[
  {
    "path": ".all-contributorsrc",
    "content": "{\n  \"projectName\": \"formik\",\n  \"projectOwner\": \"jaredpalmer\",\n  \"files\": [\n    \"packages/formik/README.md\"\n  ],\n  \"imageSize\": 100,\n  \"commit\": true,\n  \"contributors\": [\n    {\n      \"login\": \"jaredpalmer\",\n      \"name\": \"Jared Palmer\",\n      \"avatar_url\": \"https://avatars2.githubusercontent.com/u/4060187?v=4\",\n      \"profile\": \"http://jaredpalmer.com\",\n      \"contributions\": [\n        \"question\",\n        \"code\",\n        \"design\",\n        \"doc\",\n        \"example\",\n        \"ideas\",\n        \"review\",\n        \"test\"\n      ]\n    },\n    {\n      \"login\": \"eonwhite\",\n      \"name\": \"Ian White\",\n      \"avatar_url\": \"https://avatars0.githubusercontent.com/u/109324?v=4\",\n      \"profile\": \"https://www.stardog.io\",\n      \"contributions\": [\n        \"question\",\n        \"bug\",\n        \"code\",\n        \"doc\",\n        \"ideas\",\n        \"review\"\n      ]\n    },\n    {\n      \"login\": \"Andreyco\",\n      \"name\": \"Andrej Badin\",\n      \"avatar_url\": \"https://avatars0.githubusercontent.com/u/829963?v=4\",\n      \"profile\": \"http://andrejbadin.com\",\n      \"contributions\": [\n        \"question\",\n        \"bug\",\n        \"doc\"\n      ]\n    },\n    {\n      \"login\": \"skattyadz\",\n      \"name\": \"Adam Howard\",\n      \"avatar_url\": \"https://avatars2.githubusercontent.com/u/91115?v=4\",\n      \"profile\": \"http://adz.co.de\",\n      \"contributions\": [\n        \"question\",\n        \"bug\",\n        \"ideas\",\n        \"review\"\n      ]\n    },\n    {\n      \"login\": \"VladShcherbin\",\n      \"name\": \"Vlad Shcherbin\",\n      \"avatar_url\": \"https://avatars1.githubusercontent.com/u/6711845?v=4\",\n      \"profile\": \"https://github.com/VladShcherbin\",\n      \"contributions\": [\n        \"question\",\n        \"bug\",\n        \"ideas\"\n      ]\n    },\n    {\n      \"login\": \"brikou\",\n      \"name\": \"Brikou CARRE\",\n      \"avatar_url\": \"https://avatars3.githubusercontent.com/u/383212?v=4\",\n      \"profile\": \"https://github.com/brikou\",\n      \"contributions\": [\n        \"bug\",\n        \"doc\"\n      ]\n    },\n    {\n      \"login\": \"skvale\",\n      \"name\": \"Sam Kvale\",\n      \"avatar_url\": \"https://avatars0.githubusercontent.com/u/5314713?v=4\",\n      \"profile\": \"http://skvale.github.io\",\n      \"contributions\": [\n        \"bug\",\n        \"code\",\n        \"test\"\n      ]\n    },\n    {\n      \"login\": \"jontansey\",\n      \"name\": \"Jon Tansey\",\n      \"avatar_url\": \"https://avatars0.githubusercontent.com/u/13765558?v=4\",\n      \"profile\": \"http://jon.tansey.info\",\n      \"contributions\": [\n        \"bug\",\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"slightlytyler\",\n      \"name\": \"Tyler Martinez\",\n      \"avatar_url\": \"https://avatars0.githubusercontent.com/u/6819171?v=4\",\n      \"profile\": \"http://slightlytyler.com\",\n      \"contributions\": [\n        \"bug\",\n        \"doc\"\n      ]\n    },\n    {\n      \"login\": \"MrLoh\",\n      \"name\": \"Tobias Lohse\",\n      \"avatar_url\": \"https://avatars0.githubusercontent.com/u/1285032?v=4\",\n      \"profile\": \"http://MrLoh.se\",\n      \"contributions\": [\n        \"bug\",\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"quantizor\",\n      \"name\": \"Evan Jacobs\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/570070?v=4\",\n      \"profile\": \"https://quantizor.dev\",\n      \"contributions\": [\n        \"question\",\n        \"code\",\n        \"design\",\n        \"doc\",\n        \"example\",\n        \"ideas\",\n        \"review\",\n        \"test\"\n      ]\n    }\n  ],\n  \"repoType\": \"github\"\n}\n"
  },
  {
    "path": ".changeset/README.md",
    "content": "# Changesets\n\nHello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works\nwith multi-package repos, or single-package repos to help you version and publish your code. You can\nfind the full documentation for it [in our repository](https://github.com/changesets/changesets)\n\nWe have a quick list of common questions to get you started engaging with this project in\n[our documentation](https://github.com/changesets/changesets/blob/master/docs/common-questions.md)\n"
  },
  {
    "path": ".changeset/config.json",
    "content": "{\n  \"$schema\": \"https://unpkg.com/@changesets/config@1.3.0/schema.json\",\n  \"changelog\": [\"@changesets/changelog-github\", { \"repo\": \"formium/formik\" }],\n  \"commit\": false,\n  \"linked\": [],\n  \"access\": \"public\",\n  \"baseBranch\": \"main\",\n  \"updateInternalDependencies\": \"patch\",\n  \"ignore\": []\n}\n"
  },
  {
    "path": ".codesandbox/ci.json",
    "content": "{\n  \"buildCommand\": \"build:codesandbox\",\n  \"node\": \"18\",\n  \"packages\": [\"packages/formik\", \"packages/formik-native\"],\n  \"sandboxes\": [\"n4sgkx\"]\n}\n"
  },
  {
    "path": ".eslintrc.js",
    "content": "module.exports = {\n  extends: [\n    'react-app',\n    'prettier/@typescript-eslint',\n    'plugin:prettier/recommended',\n  ],\n  settings: {\n    react: {\n      version: 'detect',\n    },\n  },\n};\n"
  },
  {
    "path": ".github/CODEOWNERS",
    "content": "# Learn how to add code owners here:\n# https://help.github.com/en/articles/about-code-owners\n\n*          @jaredpalmer @quantizor\n/docs/     @jaredpalmer @quantizor\n/examples/ @jaredpalmer @quantizor"
  },
  {
    "path": ".github/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, wiki 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 jared@palmer.net. 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": ".github/CONTRIBUTING.md",
    "content": "# Contributing to Formik\n\n<!-- START doctoc generated TOC please keep comment here to allow auto update -->\n<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->\n\n**Table of Contents**\n\n- [Code of Conduct](#code-of-conduct)\n- [Ways to Contribute](#ways-to-contribute)\n- [Working on your first Pull Request?](#working-on-your-first-pull-request)\n- [Sending a Pull Request](#sending-a-pull-request)\n- [Working locally](#working-locally)\n  - [Develop](#develop)\n  - [Test](#test)\n- [How to increase the chance of a change being accepted?](#how-to-increase-the-chance-of-a-change-being-accepted)\n- [Working locally](#working-locally-1)\n  - [Watching / Building packages](#watching--building-packages)\n  - [Unit testing](#unit-testing)\n  - [Playground / Integration testing](#playground--integration-testing)\n\n<!-- END doctoc generated TOC please keep comment here to allow auto update -->\n\n## Code of Conduct\n\nFormik has adopted the [Contributor Covenant](https://www.contributor-covenant.org/) as its Code of Conduct, and we expect project participants to adhere to it.\nPlease read [the full text](/CODE_OF_CONDUCT.md) so that you can understand what actions will and will not be tolerated.\n\n## Ways to Contribute\n\nThere are many ways to contribute to Formik, code contribution is one aspect of it.\n\n- **Spread the word** - Evangelize Formik by linking to https://formik.org on your website, every backlink matters. Follow us on [Twitter](https://twitter.com/formiumhq), like and retweet the important news. Or just talk about us with your friends.\n- **Give us feedback.** Tell us what we're doing well or where we can improve. Please upvote (👍) the issues that you are the most interested in seeing solved.\n- **Help new users.** You can answer questions on StackOverflow or GitHub Discussions\n- **Make changes happen.** Suggest changes to the documentation or code.\n- **Write guides** If you come with a cool workflow, write about and we'll feature it in the blog or on the resources page\n- **Report bugs** or missing features by creating an issue.\n- **Review and comment** on existing pull requests and issues.\n\n## Working on your first Pull Request?\n\nYou can learn how from this free video series:\n\n[How to Contribute to a Project on GitHub](https://egghead.io/courses/how-to-contribute-to-an-open-source-project-on-github)\n\nTo help you get your feet wet and get you familiar with our contribution process, we have a list of [good first issues](https://github.com/formium/formik/issues?q=is:open+is:issue+label:\"good+first+issue\") that contain changes that have a relatively limited scope. This label means that there is already a working solution to the issue in the discussion section. Therefore, it is a great place to get started.\n\nIf you decide to fix an issue, please be sure to check the comment thread in case somebody is already working on a fix. If nobody is working on it at the moment, please leave a comment stating that you have started to work on it so other people don't accidentally duplicate your effort.\n\nIf somebody claims an issue but doesn't follow up for more than a week, it's fine to take it over but you should still leave a comment.\nIf there has been no activity on the issue for 7 to 14 days, it is safe to assume that nobody is working on it.\n\n## Sending a Pull Request\n\nFormik is a community project, so [Pull Requests](https://docs.github.com/en/free-pro-team@latest/github/collaborating-with-issues-and-pull-requests/creating-a-pull-request) are always welcome, but, before working on a large change, it is best to open an issue first to discuss it with the maintainers.\n\nWhen in doubt, keep your Pull Requests small. To give a Pull Request the best chance of getting accepted, don't bundle more than one feature or bug fix per Pull Request. It's often best to create two smaller Pull Requests than one big one.\n\n1. [Fork the repository](https://docs.github.com/en/free-pro-team@latest/github/getting-started-with-github/fork-a-repo).\n\n2. Clone the fork to your local machine and add upstream remote:\n\n```sh\ngit clone https://github.com/<your username>/formik.git\ncd formik\ngit remote add upstream https://github.com/formik/formik.git\n```\n\n3. Synchronize your local `next` branch with the upstream one:\n\n```sh\ngit checkout main\ngit pull upstream main\n```\n\n4. Install the dependencies with [yarn](https://yarnpkg.com) (npm isn't supported):\n\n```sh\nyarn install\n```\n\n5. Create a new topic branch:\n\n```sh\ngit checkout -b my-topic-branch\n```\n\n6. Make changes, commit and push to your fork:\n\n```sh\ngit push -u origin HEAD\n```\n\n7. Go to [the repository](https://github.com/formium/formik) and [make a Pull Request](https://docs.github.com/en/free-pro-team@latest/github/collaborating-with-issues-and-pull-requests/creating-a-pull-request).\n\nThe core team is monitoring for Pull Requests. We will review your Pull Request and either merge it, request changes to it, or close it with an explanation.\n\n## Working locally\n\nThe repo is managed with Lerna, Yarn Workspaces, and TSDX.\n\n### Develop\n\n```shell\nyarn install\nyarn dev\n```\n\n### Test\n\nRuns jest on all projects\n\n```\nyarn test\n```\n\n## How to increase the chance of a change being accepted?\n\nThe continuous integration service runs a series of checks automatically when a Pull Request is opened. If you're not\nsure if your changes will pass, you can always open a Pull Request and the GitHub UI will display a summary of\nthe results. If any of them fail, refer to [Checks and how to fix them](#checks-and-how-to-fix-them).\n\nMake sure the following is true:\n\n- The branch is targeted at `main` for ongoing development. We do our best to keep `main` in good shape, with all tests passing. Code that lands in `main` must be compatible with the latest stable release. It may contain additional features, but no breaking changes. We should be able to release a new minor version from the tip of `main` at any time.\n- If a feature is being added:\n  - If the result was already achievable with the library, explain why this feature needs to be added.\n  - If this is a common use case, consider adding an example to the documentation.\n- When adding new features or modifying existing, please include tests to confirm the new behavior.\n- The branch is not behind its target. (We use https://kodiakhq.com) to try to automate this process for you.\n\nBecause we will only merge a Pull Request for which all tests pass. The following items need to be correct. We will provide assistance if not:\n\n- The code is formatted (run `yarn format`).\n- The code is linted (run `yarn lint`).\n- The Pull Request title is written imperatively. See [How to Write a Git Commit Message](https://chris.beams.io/posts/git-commit/#imperative) for a great explanation)\n- If you have made a change that impacts semantic versioning, include a [changeset](../.changeset/README.md) by running `yarn changeset` and describing the change you've made. These get rolled together into release notes.\n\n## Working locally\n\n### Watching / Building packages\n\n```\nyarn dev\n```\n\n### Unit testing\n\nThis will run `Jest` unit tests\n\n```\nyarn test\n```\n\n### Playground / Integration testing\n\nThere is a Next.js playground that also serves as the app used for integration tests. What's cool is you can run Formik's build setup, next.js, and playwright all at the same time and everything will just magically \"work\" and live reload whenever you make a change.\nThis is the suggested development workflow going forward.\n\n1. From the root, open a terminal and run `yarn dev` to start [TSDX](https://tsdx.io) watch on all packages\n2. Then start the playground app with `yarn start:app` in another terminal window (it will boot to http://localhost:3000)\n3. And finally, you can open a third tab to run playwright\n   - You can use playwright UI using `yarn e2e:ui`\n   - Or, if you'd rather not deal GUI, just run `yarn e2e`\n"
  },
  {
    "path": ".github/FUNDING.yml",
    "content": "# These are supported funding model platforms\n\ngithub: [jaredpalmer] # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]\npatreon: # Replace with a single Patreon username\nopen_collective: formik\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": ".github/ISSUE_TEMPLATE/1.Bug-report.md",
    "content": "---\nname: Bug report\nabout: Create a bug report for Formik / examples\ntitle: ''\nlabels: 'Type: Bug'\nassignees: ''\n---\n\n## Bug report\n\n### Current Behavior\n\n<!-- If applicable, add screenshots to help explain your problem. -->\n\n### Expected behavior\n\n<!-- A clear and concise description of what you expected to happen. -->\n\n### Reproducible example\n\n<!-- Use one of the Codesandbox templates: -->\n\n<!-- Formik template: https://codesandbox.io/s/91q6rxmmrp -->\n\n<!-- withFormik template: https://codesandbox.io/s/437wy20rx4 -->\n\n### Suggested solution(s)\n\n<!-- How could we solve this bug? What changes would need to made to Formik? -->\n\n### Additional context\n\n<!-- Add any other context about the problem here.  -->\n\n### Your environment\n\n<!-- PLEASE FILL THIS OUT -->\n\n| Software         | Version(s) |\n| ---------------- | ---------- |\n| Formik           |\n| React            |\n| TypeScript       |\n| Browser          |\n| npm/Yarn         |\n| Operating System |\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/2.Feature-request.md",
    "content": "---\nname: Feature request\nabout: Request a new feature for Formik\ntitle: ''\nlabels: 'Type: Feature Request'\nassignees: ''\n---\n\n## Feature request\n\n### Current Behavior\n\n<!-- A clear and concise description of what is the current behavior / use.  -->\n\n### Desired Behavior\n\n<!-- A clear and concise description of what you want to happen.  -->\n\n### Suggested Solution\n\n<!-- Suggest a solution that the community/maintainers/you may take to enable the desired behavior  -->\n\n<!-- NOTE: Feature Requests without suggested solutions may not be addressed or treated with the same level of urgency as those that have suggested solutions. -->\n\n### Who does this impact? Who is this for?\n\n<!-- Who is this for? All users? TypeScript users? Beginners? Advanced? Yourself? People using X, Y, X, etc.? -->\n\n### Describe alternatives you've considered\n\n<!-- A clear and concise description of any alternative solutions or features you've considered.  -->\n\n### Additional context\n\n<!-- Add any other context or links about the feature request here. -->\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "content": "blank_issues_enabled: false\ncontact_links:\n  - name: Ask a question\n    url: https://github.com/formium/formik/discussions\n    about: Ask questions and discuss with other community members\n  - name: Join the Discord server\n    url: https://discord.gg/pJSg287\n    about: Chat with other community members in real-time\n"
  },
  {
    "path": ".github/workflows/ci.yml",
    "content": "name: ci\n\non:\n  pull_request:\n  push:\n    branches: [main]\n\njobs:\n  detectChangedSourceFiles:\n    name: 'determine changes'\n    runs-on: ubuntu-latest\n    outputs:\n      changes: ${{ steps.changed-files-yaml.outputs.any_changed }}\n    steps:\n      - uses: actions/checkout@v4\n      - name: Detect changed files\n        id: changed-files-yaml\n        uses: tj-actions/changed-files@v45\n        with:\n          files: |\n            .github/workflows/ci.yml\n            packages/formik/src/**\n            packages/formik/package.json\n            packages/formik-native/src/**\n            packages/formik-native/package.json\n\n  benchmark:\n    if: always() && needs.detectChangedSourceFiles.outputs.changes == 'true'\n    needs: detectChangedSourceFiles\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n\n      - uses: actions/setup-node@v4\n        with:\n          cache: yarn\n          node-version-file: .nvmrc\n\n      - name: Install & build\n        run: |\n          node --version\n          npm --version\n          yarn --version\n          yarn install --frozen-lockfile\n          yarn build:benchmark\n\n      - name: Download previous benchmark data\n        uses: actions/cache@v4\n        with:\n          path: ./benchmark-cache\n          key: ${{ runner.os }}-benchmark\n\n      - name: Run benchmark\n        run: yarn benchmark\n\n      - name: Store benchmark result\n        uses: benchmark-action/github-action-benchmark@v1\n        with:\n          tool: benchmarkjs\n          external-data-json-path: ./benchmark-cache/benchmark-data.json\n          output-file-path: output.txt\n          # comment for PRs that's updated with current perf relative to baseline (main)\n          summary-always: true\n          # warn if slowness is detected; might be transient on rerun\n          alert-threshold: 110%\n          comment-on-alert: true\n          fail-on-alert: true\n          # if things get considerably slower, deny the PR\n          fail-threshold: 120%\n          # needed for commenting on PRs\n          github-token: ${{ secrets.GITHUB_TOKEN }}\n\n  interaction:\n    needs: detectChangedSourceFiles\n    if: always() && needs.detectChangedSourceFiles.outputs.changes == 'true'\n    timeout-minutes: 10\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: actions/setup-node@v4\n        with:\n          cache: yarn\n          node-version-file: .nvmrc\n\n      - name: Install dependencies\n        run: yarn install --frozen-lockfile\n\n      - name: Get installed Playwright version\n        id: playwright-version\n        run: echo \"PLAYWRIGHT_VERSION=$(node -e \"console.log(require('./package-lock.json').dependencies['@playwright/test'].version)\")\" >> $GITHUB_ENV\n\n      - name: Cache playwright binaries\n        uses: actions/cache@v4\n        id: playwright-cache\n        with:\n          path: |\n            ~/.cache/ms-playwright\n          key: ${{ runner.os }}-playwright-${{ env.PLAYWRIGHT_VERSION }}\n\n      - name: Install Playwright Browsers\n        run: yarn playwright install --with-deps\n        if: steps.playwright-cache.outputs.cache-hit != 'true'\n      - run: yarn playwright install-deps\n        if: steps.playwright-cache.outputs.cache-hit != 'true'\n\n      - name: Run Playwright tests\n        run: yarn playwright test\n      - uses: actions/upload-artifact@v4\n        if: always()\n        with:\n          name: playwright-report\n          path: playwright-report/\n          retention-days: 5\n\n  size:\n    needs: detectChangedSourceFiles\n    if: always() && needs.detectChangedSourceFiles.outputs.changes == 'true'\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n        with:\n          fetch-depth: 1\n      - uses: preactjs/compressed-size-action@v2\n        with:\n          repo-token: '${{ secrets.GITHUB_TOKEN }}'\n          build-script: 'turbo run build --filter {./packages/*}...'\n\n  unit:\n    needs: detectChangedSourceFiles\n    if: always() && needs.detectChangedSourceFiles.outputs.changes == 'true'\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: actions/setup-node@v4\n        with:\n          cache: yarn\n          node-version-file: .nvmrc\n      - name: Install deps, build, and test\n        run: |\n          node --version\n          npm --version\n          yarn --version\n          yarn install --frozen-lockfile\n          yarn test --coverage\n        env:\n          CI: true\n          NODE_OPTIONS: --max-old-space-size=4096"
  },
  {
    "path": ".github/workflows/release.yml",
    "content": "name: Release\non:\n  push:\n    branches:\n      - main\n      - next\njobs:\n  release:\n    runs-on: ubuntu-latest\n    if: github.repository == 'jaredpalmer/formik'\n    steps:\n      - uses: actions/checkout@v4\n        with:\n          fetch-depth: 0\n\n      - uses: actions/setup-node@v4\n        with:\n          cache: yarn\n          node-version-file: .nvmrc\n\n      - name: Install Dependencies\n        run: yarn install\n\n      - name: Create Release Pull Request or Publish to npm\n        uses: changesets/action@v1.5.3\n        with:\n          publish: yarn release\n        env:\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n          NPM_TOKEN: ${{ secrets.NPM_TOKEN }}\n"
  },
  {
    "path": ".github/workflows/stale.yml",
    "content": "name: \"Close stale issues/prs\"\non:\n  schedule:\n    - cron: \"1 0 * * *\"\n\njobs:\n  stale:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/stale@v9\n        with:\n          repo-token: ${{ secrets.GITHUB_TOKEN }}\n          days-before-stale: 30\n          days-before-close: 60\n          stale-issue-label: \"stale\"\n          stale-pr-label: \"stale\"\n          stale-pr-message: \"This pull request is stale because it has been open 30 days with no activity. Remove stale label or comment or this will be closed in 60 days\"\n          stale-issue-message: \"This issue is stale because it has been open 30 days with no activity. Remove stale label or comment or this will be closed in 60 days\"\n          any-of-labels: \"Resolution: Duplicate,Resolution: Invalid,Resolution: Support Redirect,Resolution: Unsolved,Resolution: User Land,Resolution: Wontfix,Resolution: Workaround,Status: Author Feedback,Status: Needs More Information\"\n"
  },
  {
    "path": ".gitignore",
    "content": "dist\ncompiled\n*.log\ncoverage\n.DS_Store\nnext.d.ts\nlegacy.d.ts\n.idea\n*.orig\noutput.txt\n\nnode_modules\npackage-lock.json\nyarn.lock\n!/docs/yarn.lock\n!/yarn.lock\n\nwebsite/translated_docs\nwebsite/build\n!website/yarn.lock\nwebsite/node_modules\nwebsite/i18n\n!website2/yarn.lock\n.env\n.vercel\n/test-results/\n/playwright-report/\n/playwright/.cache/\n# Turborepo cache\n.turbo\n"
  },
  {
    "path": ".kodiak.toml",
    "content": "# .kodiak.toml\nversion = 1\n\n[merge]\nautomerge_label = \"automerge\"\nrequire_automerge_label = false\nmethod = \"squash\"\ndelete_branch_on_merge = true\noptimistic_updates = true\nprioritize_ready_to_merge = true\nnotify_on_conflict = false\n\n[merge.message]\ntitle = \"pull_request_title\"\nbody = \"pull_request_body\"\ninclude_pr_number = true\nbody_type = \"markdown\"\nstrip_html_comments = true"
  },
  {
    "path": ".nvmrc",
    "content": "v18\n"
  },
  {
    "path": ".prettierrc",
    "content": "{\n  \"tabWidth\": 2,\n  \"trailingComma\": \"es5\",\n  \"semi\": true,\n  \"singleQuote\": true,\n  \"arrowParens\": \"avoid\"\n}\n"
  },
  {
    "path": ".vscode/settings.json",
    "content": "{\n  \"typescript.tsdk\": \"node_modules/typescript/lib\",\n  \"editor.formatOnSave\": false,\n  \"editor.codeActionsOnSave\": {\n    \"source.fixAll.eslint\": \"explicit\"\n  },\n}\n"
  },
  {
    "path": "LICENSE",
    "content": "                             Apache License\n                       Version 2.0, January 2004\n                    https://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n  \"License\" shall mean the terms and conditions for use, reproduction,\n  and distribution as defined by Sections 1 through 9 of this document.\n\n  \"Licensor\" shall mean the copyright owner or entity authorized by\n  the copyright owner that is granting the License.\n\n  \"Legal Entity\" shall mean the union of the acting entity and all\n  other entities that control, are controlled by, or are under common\n  control with that entity. For the purposes of this definition,\n  \"control\" means (i) the power, direct or indirect, to cause the\n  direction or management of such entity, whether by contract or\n  otherwise, or (ii) ownership of fifty percent (50%) or more of the\n  outstanding shares, or (iii) beneficial ownership of such entity.\n\n  \"You\" (or \"Your\") shall mean an individual or Legal Entity\n  exercising permissions granted by this License.\n\n  \"Source\" form shall mean the preferred form for making modifications,\n  including but not limited to software source code, documentation\n  source, and configuration files.\n\n  \"Object\" form shall mean any form resulting from mechanical\n  transformation or translation of a Source form, including but\n  not limited to compiled object code, generated documentation,\n  and conversions to other media types.\n\n  \"Work\" shall mean the work of authorship, whether in Source or\n  Object form, made available under the License, as indicated by a\n  copyright notice that is included in or attached to the work\n  (an example is provided in the Appendix below).\n\n  \"Derivative Works\" shall mean any work, whether in Source or Object\n  form, that is based on (or derived from) the Work and for which the\n  editorial revisions, annotations, elaborations, or other modifications\n  represent, as a whole, an original work of authorship. For the purposes\n  of this License, Derivative Works shall not include works that remain\n  separable from, or merely link (or bind by name) to the interfaces of,\n  the Work and Derivative Works thereof.\n\n  \"Contribution\" shall mean any work of authorship, including\n  the original version of the Work and any modifications or additions\n  to that Work or Derivative Works thereof, that is intentionally\n  submitted to Licensor for inclusion in the Work by the copyright owner\n  or by an individual or Legal Entity authorized to submit on behalf of\n  the copyright owner. For the purposes of this definition, \"submitted\"\n  means any form of electronic, verbal, or written communication sent\n  to the Licensor or its representatives, including but not limited to\n  communication on electronic mailing lists, source code control systems,\n  and issue tracking systems that are managed by, or on behalf of, the\n  Licensor for the purpose of discussing and improving the Work, but\n  excluding communication that is conspicuously marked or otherwise\n  designated in writing by the copyright owner as \"Not a Contribution.\"\n\n  \"Contributor\" shall mean Licensor and any individual or Legal Entity\n  on behalf of whom a Contribution has been received by Licensor and\n  subsequently incorporated within the Work.\n\n2. Grant of Copyright License. Subject to the terms and conditions of\n  this License, each Contributor hereby grants to You a perpetual,\n  worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n  copyright license to reproduce, prepare Derivative Works of,\n  publicly display, publicly perform, sublicense, and distribute the\n  Work and such Derivative Works in Source or Object form.\n\n3. Grant of Patent License. Subject to the terms and conditions of\n  this License, each Contributor hereby grants to You a perpetual,\n  worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n  (except as stated in this section) patent license to make, have made,\n  use, offer to sell, sell, import, and otherwise transfer the Work,\n  where such license applies only to those patent claims licensable\n  by such Contributor that are necessarily infringed by their\n  Contribution(s) alone or by combination of their Contribution(s)\n  with the Work to which such Contribution(s) was submitted. If You\n  institute patent litigation against any entity (including a\n  cross-claim or counterclaim in a lawsuit) alleging that the Work\n  or a Contribution incorporated within the Work constitutes direct\n  or contributory patent infringement, then any patent licenses\n  granted to You under this License for that Work shall terminate\n  as of the date such litigation is filed.\n\n4. Redistribution. You may reproduce and distribute copies of the\n  Work or Derivative Works thereof in any medium, with or without\n  modifications, and in Source or Object form, provided that You\n  meet the following conditions:\n\n  (a) You must give any other recipients of the Work or\n      Derivative Works a copy of this License; and\n\n  (b) You must cause any modified files to carry prominent notices\n      stating that You changed the files; and\n\n  (c) You must retain, in the Source form of any Derivative Works\n      that You distribute, all copyright, patent, trademark, and\n      attribution notices from the Source form of the Work,\n      excluding those notices that do not pertain to any part of\n      the Derivative Works; and\n\n  (d) If the Work includes a \"NOTICE\" text file as part of its\n      distribution, then any Derivative Works that You distribute must\n      include a readable copy of the attribution notices contained\n      within such NOTICE file, excluding those notices that do not\n      pertain to any part of the Derivative Works, in at least one\n      of the following places: within a NOTICE text file distributed\n      as part of the Derivative Works; within the Source form or\n      documentation, if provided along with the Derivative Works; or,\n      within a display generated by the Derivative Works, if and\n      wherever such third-party notices normally appear. The contents\n      of the NOTICE file are for informational purposes only and\n      do not modify the License. You may add Your own attribution\n      notices within Derivative Works that You distribute, alongside\n      or as an addendum to the NOTICE text from the Work, provided\n      that such additional attribution notices cannot be construed\n      as modifying the License.\n\n  You may add Your own copyright statement to Your modifications and\n  may provide additional or different license terms and conditions\n  for use, reproduction, or distribution of Your modifications, or\n  for any such Derivative Works as a whole, provided Your use,\n  reproduction, and distribution of the Work otherwise complies with\n  the conditions stated in this License.\n\n5. Submission of Contributions. Unless You explicitly state otherwise,\n  any Contribution intentionally submitted for inclusion in the Work\n  by You to the Licensor shall be under the terms and conditions of\n  this License, without any additional terms or conditions.\n  Notwithstanding the above, nothing herein shall supersede or modify\n  the terms of any separate license agreement you may have executed\n  with Licensor regarding such Contributions.\n\n6. Trademarks. This License does not grant permission to use the trade\n  names, trademarks, service marks, or product names of the Licensor,\n  except as required for reasonable and customary use in describing the\n  origin of the Work and reproducing the content of the NOTICE file.\n\n7. Disclaimer of Warranty. Unless required by applicable law or\n  agreed to in writing, Licensor provides the Work (and each\n  Contributor provides its Contributions) on an \"AS IS\" BASIS,\n  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n  implied, including, without limitation, any warranties or conditions\n  of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n  PARTICULAR PURPOSE. You are solely responsible for determining the\n  appropriateness of using or redistributing the Work and assume any\n  risks associated with Your exercise of permissions under this License.\n\n8. Limitation of Liability. In no event and under no legal theory,\n  whether in tort (including negligence), contract, or otherwise,\n  unless required by applicable law (such as deliberate and grossly\n  negligent acts) or agreed to in writing, shall any Contributor be\n  liable to You for damages, including any direct, indirect, special,\n  incidental, or consequential damages of any character arising as a\n  result of this License or out of the use or inability to use the\n  Work (including but not limited to damages for loss of goodwill,\n  work stoppage, computer failure or malfunction, or any and all\n  other commercial damages or losses), even if such Contributor\n  has been advised of the possibility of such damages.\n\n9. Accepting Warranty or Additional Liability. While redistributing\n  the Work or Derivative Works thereof, You may choose to offer,\n  and charge a fee for, acceptance of support, warranty, indemnity,\n  or other liability obligations and/or rights consistent with this\n  License. However, in accepting such obligations, You may act only\n  on Your own behalf and on Your sole responsibility, not on behalf\n  of any other Contributor, and only if You agree to indemnify,\n  defend, and hold each Contributor harmless for any liability\n  incurred by, or claims asserted against, such Contributor by reason\n  of your accepting any such warranty or additional liability.\n\nEND OF TERMS AND CONDITIONS\n\nCopyright 2020 Formik, Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n   https://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n"
  },
  {
    "path": "SECURITY.md",
    "content": "# Security Policy\n\n## Supported Versions\n\n| Version | Supported          |\n| ------- | ------------------ |\n| 2.x.x     | :white_check_mark: |\n| 1.5.x   | :white_check_mark:   |\n| <= 1.4   | :x:               |\n\n## Reporting a Vulnerability\n\nSend a Twitter DM to [@jaredpalmer](http://twitter.com/@jaredpalmer) or an email to security@jaredpalmer.com\n\n"
  },
  {
    "path": "app/.gitignore",
    "content": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n/.pnp\n.pnp.js\n\n# testing\n/coverage\n\n# next.js\n/.next/\n/out/\n\n# production\n/build\n\n# misc\n.DS_Store\n*.pem\n\n# debug\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n\n# local env files\n.env.local\n.env.development.local\n.env.test.local\n.env.production.local\n\n# vercel\n.vercel\n"
  },
  {
    "path": "app/README.md",
    "content": "# Formik Integration Test App\n\nThis is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).\n"
  },
  {
    "path": "app/next-env.d.ts",
    "content": "/// <reference types=\"next\" />\n/// <reference types=\"next/image-types/global\" />\n\n// NOTE: This file should not be edited\n// see https://nextjs.org/docs/basic-features/typescript for more information.\n"
  },
  {
    "path": "app/package.json",
    "content": "{\n  \"name\": \"app\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"scripts\": {\n    \"dev\": \"next dev\",\n    \"build\": \"next build\",\n    \"start\": \"next start\"\n  },\n  \"dependencies\": {\n    \"formik\": \"latest\",\n    \"next\": \"^12.0.0\",\n    \"react\": \"^17.0.1\",\n    \"react-dom\": \"^17.0.1\",\n    \"yup\": \"^0.29.3\"\n  },\n  \"devDependencies\": {\n    \"typescript\": \"^4.0.0\"\n  }\n}\n"
  },
  {
    "path": "app/pages/_app.js",
    "content": "import React from 'react';\nimport '../styles/globals.css';\n\nfunction MyApp({ Component, pageProps }) {\n  return <Component {...pageProps} />;\n}\n\nexport default MyApp;\n"
  },
  {
    "path": "app/pages/basic.js",
    "content": "import React from 'react';\nimport { Formik, Field, Form, ErrorMessage } from 'formik';\nimport * as Yup from 'yup';\n\nconst Basic = () => {\n  const renderCount = React.useRef(0);\n  return (\n    <div>\n      <h1>Sign Up</h1>\n      <Formik\n        initialValues={{\n          firstName: '',\n          lastName: '',\n          email: '',\n          favorite: '',\n          checked: [],\n          picked: '',\n        }}\n        validationSchema={Yup.object().shape({\n          email: Yup.string()\n            .email('Invalid email address')\n            .required('Required'),\n          firstName: Yup.string().required('Required'),\n          lastName: Yup.string()\n            .min(2, 'Must be longer than 2 characters')\n            .max(20, 'Nice try, nobody has a last name that long')\n            .required('Required'),\n        })}\n        onSubmit={async values => {\n          await new Promise(r => setTimeout(r, 500));\n          alert(JSON.stringify(values, null, 2));\n        }}\n      >\n        <Form>\n          <Field name=\"firstName\" placeholder=\"Jane\" />\n          <ErrorMessage name=\"firstName\" component=\"p\" />\n\n          <Field name=\"lastName\" placeholder=\"Doe\" />\n          <ErrorMessage name=\"lastName\" component=\"p\" />\n\n          <Field\n            id=\"email\"\n            name=\"email\"\n            placeholder=\"jane@acme.com\"\n            type=\"email\"\n          />\n          <ErrorMessage name=\"email\" component=\"p\" />\n\n          <label>\n            <Field type=\"checkbox\" name=\"toggle\" />\n            <span style={{ marginLeft: 3 }}>Toggle</span>\n          </label>\n\n          <div id=\"checkbox-group\">Checkbox Group </div>\n          <div role=\"group\" aria-labelledby=\"checkbox-group\">\n            <label>\n              <Field type=\"checkbox\" name=\"checked\" value=\"One\" />\n              One\n            </label>\n            <label>\n              <Field type=\"checkbox\" name=\"checked\" value=\"Two\" />\n              Two\n            </label>\n            <label>\n              <Field type=\"checkbox\" name=\"checked\" value=\"Three\" />\n              Three\n            </label>\n          </div>\n          <div id=\"my-radio-group\">Picked</div>\n          <div role=\"group\" aria-labelledby=\"my-radio-group\">\n            <label>\n              <Field type=\"radio\" name=\"picked\" value=\"One\" />\n              One\n            </label>\n            <label>\n              <Field type=\"radio\" name=\"picked\" value=\"Two\" />\n              Two\n            </label>\n          </div>\n          <button type=\"submit\">Submit</button>\n          <div id=\"renderCounter\">{renderCount.current++}</div>\n        </Form>\n      </Formik>\n    </div>\n  );\n};\n\nexport default Basic;\n"
  },
  {
    "path": "app/pages/index.tsx",
    "content": "import React from 'react';\nimport Link from 'next/link';\n\nfunction Home() {\n  return (\n    <main>\n      <h1>Formik Examples and Fixtures</h1>\n      <ul>\n        <li>\n          <Link href=\"/basic\">Basic</Link>\n        </li>\n        <li>\n          <Link href=\"/async-submission\">Async Submission</Link>\n        </li>\n      </ul>\n      <style jsx>{`\n        main {\n          max-width: 500px;\n          margin: 2rem auto;\n          padding-bottom: 20rem;\n        }\n        a {\n          display: block;\n          margin-top: 0.5rem;\n          margin-bottom: 0.5rem;\n          color: rgb(68, 122, 221);\n          text-decoration: underline;\n          font-size: 20px;\n        }\n        ul {\n          margin: 0;\n          padding: 0;\n        }\n        li {\n          margin-left: 1rem;\n        }\n      `}</style>\n    </main>\n  );\n}\n\nexport default Home;\n"
  },
  {
    "path": "app/pages/sign-in.js",
    "content": "import React, { useEffect, useState } from 'react';\nimport { ErrorMessage, Field, Form, FormikProvider, useFormik } from 'formik';\nimport * as Yup from 'yup';\nimport { useRouter } from 'next/router';\n\nconst SignIn = () => {\n  const router = useRouter();\n  const [errorLog, setErrorLog] = useState([]);\n\n  const formik = useFormik({\n    validateOnMount: router.query.validateOnMount === 'true',\n    validateOnBlur: router.query.validateOnBlur !== 'false',\n    validateOnChange: router.query.validateOnChange !== 'false',\n    initialValues: { username: '', password: '' },\n    validationSchema: Yup.object().shape({\n      username: Yup.string().required('Required'),\n      password: Yup.string().required('Required'),\n    }),\n    onSubmit: async values => {\n      await new Promise(r => setTimeout(r, 500));\n      alert(JSON.stringify(values, null, 2));\n    },\n  });\n\n  useEffect(() => {\n    if (formik.errors.username && formik.touched.username) {\n      setErrorLog(logs => [\n        ...logs,\n        {\n          name: 'username',\n          value: formik.values.username,\n          error: formik.errors.username,\n        },\n      ]);\n    }\n\n    if (formik.errors.password && formik.touched.password) {\n      setErrorLog(logs => [\n        ...logs,\n        {\n          name: 'password',\n          value: formik.values.password,\n          error: formik.errors.password,\n        },\n      ]);\n    }\n  }, [\n    formik.values.username,\n    formik.errors.username,\n    formik.touched.username,\n    formik.values.password,\n    formik.errors.password,\n    formik.touched.password,\n  ]);\n\n  return (\n    <div>\n      <h1>Sign In</h1>\n\n      <FormikProvider value={formik}>\n        <Form>\n          <div>\n            <Field name=\"username\" placeholder=\"Username\" />\n            <ErrorMessage name=\"username\" component=\"p\" />\n          </div>\n\n          <div>\n            <Field name=\"password\" placeholder=\"Password\" type=\"password\" />\n            <ErrorMessage name=\"password\" component=\"p\" />\n          </div>\n\n          <button type=\"submit\" disabled={!formik.isValid}>\n            Submit\n          </button>\n\n          <button\n            type=\"reset\"\n            onClick={() => {\n              setErrorLog([]);\n            }}\n          >\n            Reset\n          </button>\n\n          <pre id=\"error-log\">{JSON.stringify(errorLog, null, 2)}</pre>\n        </Form>\n      </FormikProvider>\n    </div>\n  );\n};\n\nexport default SignIn;\n"
  },
  {
    "path": "app/styles/globals.css",
    "content": "html,\nbody {\n  padding: 0;\n  margin: 0;\n  font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,\n    Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;\n}\n\na {\n  color: inherit;\n  text-decoration: none;\n}\n\n* {\n  box-sizing: border-box;\n}\n"
  },
  {
    "path": "app/tsconfig.json",
    "content": "{\n  \"extends\": \"../tsconfig.base.json\",\n  \"compilerOptions\": {\n    \"target\": \"es5\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"jsx\": \"preserve\",\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"noEmit\": true,\n    \"moduleResolution\": \"node\",\n    \"resolveJsonModule\": true,\n    \"isolatedModules\": true,\n    \"incremental\": true\n  },\n  \"include\": [\n    \"next-env.d.ts\",\n    \"**/*.ts\",\n    \"**/*.tsx\"\n  ],\n  \"exclude\": [\n    \"node_modules\"\n  ]\n}\n"
  },
  {
    "path": "docs/3rd-party-bindings.md",
    "content": "---\ntitle: 3rd Party Bindings\noriginal_id: 3rd-party-bindings\ndescription: Use Formik with popular React component libraries like Material UI, Bootstrap, AntD, Semantic UI, and more.\n---\n\nIf you would like to use Formik with a UI framework, you'll probably want to create a wrapper component that binds Formik's props and callbacks.\n\nA few popular frameworks have open source wrappers readily available:\n\n- [Ant Design](https://github.com/jannikbuschke/formik-antd)\n- [Fabric](https://github.com/kmees/formik-office-ui-fabric-react)\n- [Material UI](https://github.com/stackworx/formik-material-ui)\n- [Reactstrap](https://github.com/shoaibkhan94/reactstrap-formik)\n- [Semantic UI 2.0](https://github.com/JT501/formik-semantic-ui-react)\n- [Semantic UI](https://github.com/turner-industries/formik-semantic-ui)\n"
  },
  {
    "path": "docs/api/connect.md",
    "content": "---\nid: connect\ntitle: connect()\n---\n\n`connect()` is a higher-order component (HoC) that allows you to hook anything into Formik's context. It is used internally to construct `<Field>` and `<Form>`, but you can use it to build out new components as your needs change.\n\n## Type signature\n\n```tsx\nconnect<OuterProps, Values = any>(Comp: React.ComponentType<OuterProps & { formik: FormikContext<Values> }>) => React.ComponentType<OuterProps>\n```\n\n## Example\n\n```jsx\nimport React from 'react';\nimport { connect, getIn } from 'formik';\n\n// This component renders an error message if a field has\n// an error and it's already been touched.\nconst ErrorMessage = props => {\n  // All FormikProps available on props.formik!\n  const error = getIn(props.formik.errors, props.name);\n  const touch = getIn(props.formik.touched, props.name);\n  return touch && error ? error : null;\n};\n\nexport default connect(ErrorMessage);\n```\n"
  },
  {
    "path": "docs/api/errormessage.md",
    "content": "---\nid: errormessage\ntitle: <ErrorMessage />\n---\n\n`<ErrorMessage />` is a component that renders the error message of a given field if that field has been visited (i.e.`touched[name] === true`) (and there is an `error` message present). It expects that all error messages are stored for a given field as a string. Like `<Field />`, `<FastField />`, and `<FieldArray />`, lodash-like dot path and bracket syntax is supported.\n\n## Example\n\n```diff\nimport React from 'react';\nimport { Formik, Form, Field, ErrorMessage } from 'formik';\nimport * as Yup from \"yup\";\n\nconst SignupSchema = Yup.object().shape({\n  name: Yup.string()\n    .min(2, 'Too Short!')\n    .max(70, 'Too Long!')\n    .required('Required'),\n  email: Yup.string()\n    .email('Invalid email')\n    .required('Required'),\n});\n\nexport const ValidationSchemaExample = () => (\n  <div>\n    <h1>Signup</h1>\n    <Formik\n      initialValues={{\n        name: '',\n        email: '',\n      }}\n      validationSchema={SignupSchema}\n      onSubmit={values => {\n        // same shape as initial values\n        console.log(values);\n      }}\n    >\n      {({ errors, touched }) => (\n        <Form>\n          <Field name=\"name\"  />\n-           {errors.name && touched.name ? (\n-            <div>{errors.name}</div>\n-          ) : null}\n+         <ErrorMessage name=\"name\" />\n          <Field name=\"email\" type=\"email\" />\n-           {errors.email && touched.email ? (\n-            <div>{errors.email}</div>\n-          ) : null}\n+         <ErrorMessage name=\"email\" />\n          <button type=\"submit\">Submit</button>\n        </Form>\n      )}\n    </Formik>\n  </div>\n);\n```\n\n#### Props\n\n---\n\n# Reference\n\n## Props\n\n### `children`\n\n`children?: ((message: string) => React.ReactNode)`\n\nA function that returns a valid React element. Will only be called when the field has been touched and an error exists.\n\n```jsx\n// the render callback will only be called when the\n// field has been touched and an error exists and subsequent updates.\n<ErrorMessage name=\"email\">{msg => <div>{msg}</div>}</ErrorMessage>\n```\n\n### `component`\n\n`component?: string | React.ComponentType<FieldProps>`\n\nEither a React component or the name of an HTML element to render. If not specified, `<ErrorMessage>` will just return a string.\n\n```jsx\n<ErrorMessage component=\"div\" name=\"email\" />\n// --> {touched.email && error.email ? <div>{error.email}</div> : null}\n\n<ErrorMessage component=\"span\" name=\"email\" />\n// --> {touched.email && error.email ? <span>{error.email}</span> : null}\n\n<ErrorMessage component={Custom} name=\"email\" />\n// --> {touched.email && error.email ? <Custom>{error.email}</Custom> : null}\n\n<ErrorMessage name=\"email\" />\n// This will return a string. React 16+.\n// --> {touched.email && error.email ? error.email : null}\n```\n\n### `id`\n\n`id?: string`\n\nA field's id in Formik state. To get access to DOM elements for e2e testing purposes, it doesn't impact the implementation in any way as the prop can still be omitted. \n```jsx\n// id will be used only for testing purposes\n// not contributing anything to the core implementation.\n<ErrorMessage name=\"email\" id=\"form_email_id\" />\n```\n\n### `name`\n\n`name: string`\n**Required**\n\nA field's name in Formik state. To access nested objects or arrays, name can also accept lodash-like dot path like `social.facebook` or `friends[0].firstName`\n\n### `render`\n\n`render?: (error: string) => React.ReactNode`\n\nA function that returns a valid React element. Will only be called when the field has been touched and an error exists.\n\n```jsx\n// the render callback will only be called when the\n// field has been touched and an error exists and subsequent updates.\n<ErrorMessage name=\"email\" render={msg => <div>{msg}</div>} />\n```\n"
  },
  {
    "path": "docs/api/fastfield.md",
    "content": "---\nid: fastfield\ntitle: <FastField />\n---\n\n## Before we start\n\n`<FastField />` is meant for performance _optimization_. However, you really do not need to use it until you do. Only proceed if you are familiar with how React's [`shouldComponentUpdate()`](https://reactjs.org/docs/react-component.html#shouldcomponentupdate) works. You have been warned.\n\n**No. Seriously. Please review the following parts of the official React documentation before continuing**\n\n- [React `shouldComponentUpdate()` Reference](https://reactjs.org/docs/react-component.html#shouldcomponentupdate)\n- [`shouldComponentUpdate` in Action](https://reactjs.org/docs/optimizing-performance.html#shouldcomponentupdate-in-action)\n\n## Overview\n\n`<FastField />` is an optimized version of `<Field />` meant to be used on large forms (~30+ fields) or when a field has very expensive validation requirements. `<FastField />` has the same exact API as `<Field>`, but implements `shouldComponentUpdate()` internally to block all additional re-renders unless there are direct updates to the `<FastField />`'s relevant parts/slice of Formik state.\n\nFor example, `<FastField name=\"firstName\" />` will only re-render when there are:\n\n- Changes to `values.firstName`, `errors.firstName`, `touched.firstName`, or `isSubmitting`. This is determined by shallow comparison. Note: dotpaths are supported.\n- A prop is added/removed to the `<FastField name=\"firstName\" />`\n- The `name` prop changes\n\nOther than for these aforementioned situations, `<FastField />` will not re-render when other parts of Formik state change. However, all updates triggered by a `<FastField />` will trigger re-renders to other \"vanilla\" `<Field />` components.\n\n## When to use `<FastField />`\n\n**If a `<Field />` is \"independent\" of all other `<Field />`'s in your form, then you can use `<FastField />`**.\n\nMore specifically, if the `<Field />` does not change behavior or render anything that is based on updates to another `<Field />` or `<FastField />`'s slice of Formik state AND it does not rely on other parts of top-level `<Formik />` state (e.g. `isValidating`, `submitCount`), then you can use `<FastField />` as a drop-in replacement to `<Field />`.\n\n## Example\n\n```jsx\nimport React from 'react';\nimport { Formik, Field, FastField, Form } from 'formik';\nimport * as Yup from 'yup';\n\nconst Basic = () => (\n  <div>\n    <h1>Sign Up</h1>\n    <Formik\n      initialValues={{\n        firstName: '',\n        lastName: '',\n        email: '',\n      }}\n      validationSchema={Yup.object().shape({\n        firstName: Yup.string().required(),\n        middleInitial: Yup.string(),\n        lastName: Yup.string().required(),\n        email: Yup.string().email().required(),\n      })}\n      onSubmit={values => {\n        setTimeout(() => {\n          alert(JSON.stringify(values, null, 2));\n        }, 500);\n      }}\n    >\n      {formikProps => (\n        <Form>\n          {/** This <FastField> only updates for changes made to\n           values.firstName, touched.firstName, errors.firstName */}\n          <label htmlFor=\"firstName\">First Name</label>\n          <FastField name=\"firstName\" placeholder=\"Weezy\" />\n\n          {/** Updates for all changes because it's from the\n           top-level formikProps which get all updates */}\n          {formikProps.touched.firstName && formikProps.errors.firstName && (\n            <div>{formikProps.errors.firstName}</div>\n          )}\n\n          <label htmlFor=\"middleInitial\">Middle Initial</label>\n          <FastField name=\"middleInitial\" placeholder=\"F\">\n            {({ field, form, meta }) => (\n              <div>\n                <input {...field} />\n                {/**\n                 * This updates normally because it's from the same slice of Formik state,\n                 * i.e. path to the object matches the name of this <FastField />\n                 */}\n                {meta.touched ? meta.error : null}\n\n                {/** This won't ever update since it's coming from\n                 from another <Field>/<FastField>'s (i.e. firstName's) slice   */}\n                {form.touched.firstName && form.errors.firstName\n                  ? form.errors.firstName\n                  : null}\n\n                {/* This doesn't update either */}\n                {form.submitCount}\n\n                {/* Imperative methods still work as expected */}\n                <button\n                  type=\"button\"\n                  onClick={form.setFieldValue('middleInitial', 'J')}\n                >\n                  J\n                </button>\n              </div>\n            )}\n          </FastField>\n\n          {/** Updates for all changes to Formik state\n           and all changes by all <Field>s and <FastField>s */}\n          <label htmlFor=\"lastName\">LastName</label>\n          <Field name=\"lastName\" placeholder=\"Baby\">\n            {({ field, form, meta }) => (\n              <div>\n                <input {...field} />\n                {/**  Works because this is inside\n                 of a <Field/>, which gets all updates */}\n                {form.touched.firstName && form.errors.firstName\n                  ? form.errors.firstName\n                  : null}\n              </div>\n            )}\n          </Field>\n\n          {/** Updates for all changes to Formik state and\n           all changes by all <Field>s and <FastField>s */}\n          <label htmlFor=\"email\">Email</label>\n          <Field name=\"email\" placeholder=\"jane@acme.com\" type=\"email\" />\n\n          <button type=\"submit\">Submit</button>\n        </Form>\n      )}\n    </Formik>\n  </div>\n);\n```\n"
  },
  {
    "path": "docs/api/field.md",
    "content": "---\nid: field\ntitle: <Field />\n---\n\n`<Field />` will automagically hook up inputs to Formik. It uses the `name`\nattribute to match up with Formik state. `<Field />` will default to an HTML\n`<input />` element.\n\n## Rendering\n\nThere are a few different ways to render things with `<Field>`.\n\n- `<Field as>`\n- `<Field children>`\n- `<Field component>`\n- ~~`<Field render>`~~ _deprecated in 2.x. Using these will log warning_\n\n`as` can either be a React component or the name of an HTML element to render. Formik will automagically inject `onChange`, `onBlur`, `name`, and `value` props of the field designated by the `name` prop to the (custom) component.\n\n`children` can either be an array of elements (e.g. `<option>` in the case of `<Field as=\"select\">`) or a callback function (a.k.a render prop). The render props are an object containing:\n\n- `field`: An object containing `onChange`, `onBlur`, `name`, and `value` of the field (see [`FieldInputProps`](./useField#fieldinputpropsvalue))\n- `form`: The Formik bag\n- `meta`: An object containing metadata (i.e. `value`, `touched`, `error`, and `initialValue`) about the field (see [`FieldMetaProps`](./useField#fieldmetapropsvalue))\n\n`component` can either be a React component or the name of an HTML element to render. All additional props will be passed through.\n\n> In Formik 0.9 to 1.x, the `render` prop could also be used for rendering. It has been deprecated since 2.x. While the code still lives within `<Field>`, using `render` will show a warning in the console.\n\n## Example\n\n```jsx\nimport React from 'react';\nimport { Field, Form, Formik, FormikProps } from 'formik';\n\nconst MyInput = ({ field, form, ...props }) => {\n  return <input {...field} {...props} />;\n};\n\nconst Example = () => (\n  <div>\n    <h1>My Form</h1>\n    <Formik\n      initialValues={{ email: '', color: 'red', firstName: '', lastName: '' }}\n      onSubmit={(values, actions) => {\n        setTimeout(() => {\n          alert(JSON.stringify(values, null, 2));\n          actions.setSubmitting(false);\n        }, 1000);\n      }}\n    >\n      {(props: FormikProps<any>) => (\n        <Form>\n          <Field type=\"email\" name=\"email\" placeholder=\"Email\" />\n          <Field as=\"select\" name=\"color\">\n            <option value=\"red\">Red</option>\n            <option value=\"green\">Green</option>\n            <option value=\"blue\">Blue</option>\n          </Field>\n\n          <Field name=\"lastName\">\n            {({\n              field, // { name, value, onChange, onBlur }\n              form: { touched, errors }, // also values, setXXXX, handleXXXX, dirty, isValid, status, etc.\n              meta,\n            }) => (\n              <div>\n                <input type=\"text\" placeholder=\"Email\" {...field} />\n                {meta.touched && meta.error && (\n                  <div className=\"error\">{meta.error}</div>\n                )}\n              </div>\n            )}\n          </Field>\n          <Field name=\"lastName\" placeholder=\"Doe\" component={MyInput} />\n          <button type=\"submit\">Submit</button>\n        </Form>\n      )}\n    </Formik>\n  </div>\n);\n```\n\n#### Props\n\n---\n\n# Reference\n\n## Props\n\n### `as`\n\n`as?: string | React.ComponentType<FieldProps['field']>`\n\nEither a React component or the name of an HTML element to render. That is, one of the following:\n\n- `input`\n- `select`\n- `textarea`\n- A valid HTML element name\n- A custom React component\n\nCustom React components will be passed `onChange`, `onBlur`, `name`, and `value` plus any other props passed directly to `<Field>`.\n\nDefault is `'input'` (so an `<input>` is rendered by default)\n\n```jsx\n// Renders an HTML <input> by default\n<Field name=\"lastName\" placeholder=\"Last Name\"/>\n\n// Renders an HTML <select>\n<Field name=\"color\" as=\"select\">\n  <option value=\"red\">Red</option>\n  <option value=\"green\">Green</option>\n  <option value=\"blue\">Blue</option>\n</Field>\n\n// Renders a CustomInputComponent\n<Field name=\"firstName\" as={CustomInputComponent} placeholder=\"First Name\"/>\n\nconst CustomInputComponent = (props) => (\n  <input className=\"my-custom-input\" type=\"text\" {...props} />\n);\n```\n\n### `children`\n\n`children?: React.ReactNode | ((props: FieldProps) => React.ReactNode)`\n\nEither JSX elements or callback function. Same as `render`.\n\n```jsx\n// Children can be JSX elements\n<Field name=\"color\" as=\"select\">\n  <option value=\"red\">Red</option>\n  <option value=\"green\">Green</option>\n  <option value=\"blue\">Blue</option>\n</Field>\n\n// Or a callback function\n<Field name=\"firstName\">\n{({ field, form, meta }) => (\n  <div>\n    <input type=\"text\" {...field} placeholder=\"First Name\"/>\n    {meta.touched &&\n      meta.error && <div className=\"error\">{meta.error}</div>}\n  </div>\n)}\n</Field>\n```\n\n### `component`\n\n`component?: string | React.ComponentType<FieldProps>`\n\nEither a React component or the name of an HTML element to render. That is, one of the following:\n\n- `input`\n- `select`\n- `textarea`\n- A custom React component\n\nCustom React components will be passed `FieldProps` which is same `render` prop parameters of `<Field render>` plus any other props passed to directly to `<Field>`.\n\nDefault is `'input'` (so an `<input>` is rendered by default)\n\n```jsx\n// Renders an HTML <input> by default\n<Field name=\"lastName\" placeholder=\"Last Name\"/>\n\n// Renders an HTML <select>\n<Field name=\"color\" component=\"select\">\n  <option value=\"red\">Red</option>\n  <option value=\"green\">Green</option>\n  <option value=\"blue\">Blue</option>\n</Field>\n\n// Renders a CustomInputComponent\n<Field name=\"firstName\" component={CustomInputComponent} placeholder=\"First Name\"/>\n\nconst CustomInputComponent = ({\n  field, // { name, value, onChange, onBlur }\n  form: { touched, errors }, // also values, setXXXX, handleXXXX, dirty, isValid, status, etc.\n  ...props\n}) => (\n  <div>\n    <input type=\"text\" {...field} {...props} />\n    {touched[field.name] &&\n      errors[field.name] && <div className=\"error\">{errors[field.name]}</div>}\n  </div>\n);\n```\n\n### `innerRef`\n\n`innerRef?: (el: React.HTMLElement<any> => void)`\n\nWhen you are **not** using a custom component and you need to access the underlying DOM node created by `Field` (e.g. to call `focus`), pass the callback to the `innerRef` prop instead.\n\n### `name`\n\n`name: string`\n\n**Required**\n\nA field's name in Formik state. To access nested objects or arrays, name can also accept lodash-like dot path like `social.facebook` or `friends[0].firstName`\n\n### `render`\n\n`render?: (props: FieldProps) => React.ReactNode`\n\n**Deprecated in 2.x. Use `children` instead.**\n\nA function that returns one or more JSX elements.\n\n```jsx\n// Renders an HTML <input> and passes FieldProps field property\n<Field\n  name=\"firstName\"\n  render={({ field /* { name, value, onChange, onBlur } */ }) => (\n    <input {...field} type=\"text\" placeholder=\"firstName\" />\n  )}\n/>\n\n// Renders an HTML <input> and disables it while form is submitting\n<Field\n  name=\"lastName\"\n  render={({ field, form: { isSubmitting } }) => (\n    <input {...field} disabled={isSubmitting} type=\"text\" placeholder=\"lastName\" />\n  )}\n/>\n\n// Renders an HTML <input> with custom error <div> element\n<Field\n  name=\"lastName\"\n  render={({ field, form: { touched, errors } }) => (\n    <div>\n      <input {...field} type=\"text\" placeholder=\"lastName\" />\n      {touched[field.name] &&\n        errors[field.name] && <div className=\"error\">{errors[field.name]}</div>}\n    </div>\n  )}\n/>\n```\n\n### `validate`\n\n`validate?: (value: any) => undefined | string | Promise<any>`\n\nYou can run independent field-level validations by passing a function to the\n`validate` prop. The function will respect the `validateOnBlur` and\n`validateOnChange` config/props specified in the `<Field>'s` parent `<Formik>`\n/ `withFormik`. This function can either be synchronous or asynchronous:\n\n- Sync: if invalid, return a `string` containing the error message or\n  return `undefined`.\n\n- Async: return a Promise that resolves a `string` containing the error message.\n  This works like Formik's `validate`, but instead of returning an `errors`\n  object, it's just a `string`.\n\n```jsx\nimport React from 'react';\nimport { Formik, Form, Field } from 'formik';\n\n// Synchronous validation function\nconst validate = value => {\n  let errorMessage;\n  if (!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$/i.test(value)) {\n    errorMessage = 'Invalid email address';\n  }\n  return errorMessage;\n};\n\n// Async validation function\nconst sleep = ms => new Promise(resolve => setTimeout(resolve, ms));\n\nconst validateAsync = value => {\n  return sleep(2000).then(() => {\n    if (['admin', 'null', 'god'].includes(value)) {\n      return 'Nice try';\n    }\n  });\n};\n\n// example usage\nconst MyForm = () => (\n  <Formik\n    initialValues={{ email: '', username: '' }}\n    onSubmit={values => alert(JSON.stringify(values, null, 2))}\n  >\n    {({ errors, touched }) => (\n      <Form>\n        <Field validate={validate} name=\"email\" type=\"email\" />\n        {errors.email && touched.email ? <div>{errors.email}</div> : null}\n        <Field validate={validateAsync} name=\"username\" />\n        {errors.username && touched.username ? (\n          <div>{errors.username}</div>\n        ) : null}\n        <button type=\"submit\">Submit</button>\n      </Form>\n    )}\n  </Formik>\n);\n```\n\nNote: To allow for i18n libraries, the TypeScript typings for `validate` are\nslightly relaxed and allow you to return a `Function` (e.g. `i18n('invalid')`).\n"
  },
  {
    "path": "docs/api/fieldarray.md",
    "content": "---\nid: fieldarray\ntitle: <FieldArray />\n---\n\n`<FieldArray />` is a component that helps with common array/list manipulations. You pass it a `name` property with the path to the key within `values` that holds the relevant array. `<FieldArray />` will then give you access to array helper methods via render props. For convenience, calling these methods will trigger validation and also manage `touched` for you.\n\n```jsx\nimport React from 'react';\nimport { Formik, Form, Field, FieldArray } from 'formik';\n\n// Here is an example of a form with an editable list.\n// Next to each input are buttons for insert and remove.\n// If the list is empty, there is a button to add an item.\nexport const FriendList = () => (\n  <div>\n    <h1>Friend List</h1>\n    <Formik\n      initialValues={{ friends: ['jared', 'ian', 'brent'] }}\n      onSubmit={values =>\n        setTimeout(() => {\n          alert(JSON.stringify(values, null, 2));\n        }, 500)\n      }\n      render={({ values }) => (\n        <Form>\n          <FieldArray\n            name=\"friends\"\n            render={arrayHelpers => (\n              <div>\n                {values.friends && values.friends.length > 0 ? (\n                  values.friends.map((friend, index) => (\n                    <div key={index}>\n                      <Field name={`friends.${index}`} />\n                      <button\n                        type=\"button\"\n                        onClick={() => arrayHelpers.remove(index)} // remove a friend from the list\n                      >\n                        -\n                      </button>\n                      <button\n                        type=\"button\"\n                        onClick={() => arrayHelpers.insert(index, '')} // insert an empty string at a position\n                      >\n                        +\n                      </button>\n                    </div>\n                  ))\n                ) : (\n                  <button type=\"button\" onClick={() => arrayHelpers.push('')}>\n                    {/* show this when user has removed all friends from the list */}\n                    Add a friend\n                  </button>\n                )}\n                <div>\n                  <button type=\"submit\">Submit</button>\n                </div>\n              </div>\n            )}\n          />\n        </Form>\n      )}\n    />\n  </div>\n);\n```\n\n### `name: string`\n\nThe name or path to the relevant key in [`values`](./formik#values--field-string-any-).\n\n### `validateOnChange?: boolean`\n\nDefault is `true`. Determines if form validation should or should not be run _after_ any array manipulations.\n\n## FieldArray Array of Objects\n\nYou can also iterate through an array of objects, by following a convention of `object[index].property` or `object.index.property` for the name attributes of `<Field />` or `<input />` elements in `<FieldArray />`.\n\n```jsx\n<Form>\n  <FieldArray\n    name=\"friends\"\n    render={arrayHelpers => (\n      <div>\n        {values.friends.map((friend, index) => (\n          <div key={index}>\n            {/** both these conventions do the same */}\n            <Field name={`friends[${index}].name`} />\n            <Field name={`friends.${index}.age`} />\n\n            <button type=\"button\" onClick={() => arrayHelpers.remove(index)}>\n              -\n            </button>\n          </div>\n        ))}\n        <button\n          type=\"button\"\n          onClick={() => arrayHelpers.push({ name: '', age: '' })}\n        >\n          +\n        </button>\n      </div>\n    )}\n  />\n</Form>\n```\n\n## FieldArray Validation Gotchas\n\nValidation can be tricky with `<FieldArray>`.\n\nIf you use [`validationSchema`](./guides/validation.md#validationschema) and your form has array validation requirements (like a min length) as well as nested array field requirements, displaying errors can be tricky. Formik/Yup will show validation errors inside out. For example,\n\n```js\nconst schema = Yup.object().shape({\n  friends: Yup.array()\n    .of(\n      Yup.object().shape({\n        name: Yup.string().min(4, 'too short').required('Required'), // these constraints take precedence\n        salary: Yup.string().min(3, 'cmon').required('Required'), // these constraints take precedence\n      })\n    )\n    .required('Must have friends') // these constraints are shown if and only if inner constraints are satisfied\n    .min(3, 'Minimum of 3 friends'),\n});\n```\n\nSince Yup and your custom validation function should always output error messages as strings, you'll need to sniff whether your nested error is an array or a string when you go to display it.\n\nSo...to display `'Must have friends'` and `'Minimum of 3 friends'` (our example's array validation constraints)...\n\n**_Bad_**\n\n```jsx\n// within a `FieldArray`'s render\nconst FriendArrayErrors = errors =>\n  errors.friends ? <div>{errors.friends}</div> : null; // app will crash\n```\n\n**_Good_**\n\n```jsx\n// within a `FieldArray`'s render\nconst FriendArrayErrors = errors =>\n  typeof errors.friends === 'string' ? <div>{errors.friends}</div> : null;\n```\n\nFor the nested field errors, you should assume that no part of the object is defined unless you've checked for it. Thus, you may want to do yourself a favor and make a custom `<ErrorMessage />` component that looks like this:\n\n```jsx\nimport { Field, getIn } from 'formik';\n\nconst ErrorMessage = ({ name }) => (\n  <Field\n    name={name}\n    render={({ form }) => {\n      const error = getIn(form.errors, name);\n      const touch = getIn(form.touched, name);\n      return touch && error ? error : null;\n    }}\n  />\n);\n\n// Usage\n<ErrorMessage name=\"friends[0].name\" />; // => null, 'too short', or 'required'\n```\n\n_NOTE_: In Formik v0.12 / 1.0, a new `meta` prop may be added to `Field` and `FieldArray` that will give you relevant metadata such as `error` & `touch`, which will save you from having to use Formik or lodash's getIn or checking if the path is defined on your own.\n\n## FieldArray Helpers\n\nThe following methods are made available via render props.\n\n- `push: (obj: any) => void`: Add a value to the end of an array\n- `swap: (indexA: number, indexB: number) => void`: Swap two values in an array\n- `move: (from: number, to: number) => void`: Move an element in an array to another index\n- `insert: (index: number, value: any) => void`: Insert an element at a given index into the array\n- `unshift: (value: any) => number`: Add an element to the beginning of an array and return its length\n- `remove<T>(index: number): T | undefined`: Remove an element at an index of an array and return it\n- `pop<T>(): T | undefined`: Remove and return value from the end of the array\n- `replace: (index: number, value: any) => void`: Replace a value at the given index into the array\n\n## FieldArray render methods\n\nThere are three ways to render things with `<FieldArray />`\n\n- `<FieldArray name=\"...\" component>`\n- `<FieldArray name=\"...\" render>`\n- `<FieldArray name=\"...\" children>`\n\n### `render: (arrayHelpers: ArrayHelpers) => React.ReactNode`\n\n```jsx\nimport React from 'react';\nimport { Formik, Form, Field, FieldArray } from 'formik'\n\nexport const FriendList = () => (\n  <div>\n    <h1>Friend List</h1>\n    <Formik\n      initialValues={{ friends: ['jared', 'ian', 'brent'] }}\n      onSubmit={...}\n      render={formikProps => (\n        <FieldArray\n          name=\"friends\"\n          render={({ move, swap, push, insert, unshift, pop }) => (\n            <Form>\n              {/*... use these however you want */}\n            </Form>\n          )}\n        />\n    />\n  </div>\n);\n```\n\n### `component: React.ReactNode`\n\n```jsx\nimport React from 'react';\nimport { Formik, Form, Field, FieldArray } from 'formik'\n\n\nexport const FriendList = () => (\n  <div>\n    <h1>Friend List</h1>\n    <Formik\n      initialValues={{ friends: ['jared', 'ian', 'brent'] }}\n      onSubmit={...}\n      render={formikProps => (\n        <FieldArray\n          name=\"friends\"\n          component={MyDynamicForm}\n        />\n      )}\n    />\n  </div>\n);\n\n\n// In addition to the array helpers, Formik state and helpers\n// (values, touched, setXXX, etc) are provided through a `form`\n// prop\nexport const MyDynamicForm = ({\n  move, swap, push, insert, unshift, pop, form\n}) => (\n <Form>\n  {/**  whatever you need to do */}\n </Form>\n);\n```\n\n### `children: func`\n\n```jsx\nimport React from 'react';\nimport { Formik, Form, Field, FieldArray } from 'formik'\n\n\nexport const FriendList = () => (\n  <div>\n    <h1>Friend List</h1>\n    <Formik\n      initialValues={{ friends: ['jared', 'ian', 'brent'] }}\n      onSubmit={...}\n      render={formikProps => (\n        <FieldArray name=\"friends\">\n          {({ move, swap, push, insert, unshift, pop, form }) => {\n            return (\n              <Form>\n                {/*... use these however you want */}\n              </Form>\n            );\n          }}\n        </FieldArray>\n      )}\n    />\n  </div>\n);\n```\n"
  },
  {
    "path": "docs/api/form.md",
    "content": "---\nid: form\ntitle: <Form />\n---\n\nForm is a small wrapper around an HTML `<form>` element that automatically hooks into Formik's `handleSubmit` and `handleReset`. All other props are passed directly through to the DOM node.\n\n```jsx\n// so...\n<Form />\n\n// is identical to this...\n<form onReset={formikProps.handleReset} onSubmit={formikProps.handleSubmit} {...props} />\n```\n"
  },
  {
    "path": "docs/api/formik.md",
    "content": "---\nid: formik\ntitle: <Formik />\n---\n\n`<Formik>` is a component that helps you with building forms. It uses a render\nprops pattern made popular by libraries like React Motion and React Router.\n\n## Example\n\n```jsx\nimport React from 'react';\nimport { Formik } from 'formik';\n\nconst BasicExample = () => (\n  <div>\n    <h1>My Form</h1>\n    <Formik\n      initialValues={{ name: 'jared' }}\n      onSubmit={(values, actions) => {\n        setTimeout(() => {\n          alert(JSON.stringify(values, null, 2));\n          actions.setSubmitting(false);\n        }, 1000);\n      }}\n    >\n      {props => (\n        <form onSubmit={props.handleSubmit}>\n          <input\n            type=\"text\"\n            onChange={props.handleChange}\n            onBlur={props.handleBlur}\n            value={props.values.name}\n            name=\"name\"\n          />\n          {props.errors.name && <div id=\"feedback\">{props.errors.name}</div>}\n          <button type=\"submit\">Submit</button>\n        </form>\n      )}\n    </Formik>\n  </div>\n);\n```\n\n#### Props\n\n---\n\n# Reference\n\n## Props\n\n### Formik render methods and props\n\nThere are 2 ways to render things with `<Formik />`\n\n- `<Formik component>`\n- `<Formik children>`\n- ~~`<Formik render>`~~ Deprecated in 2.x\n\nEach render methods will be passed the same props:\n\n#### `dirty: boolean`\n\nReturns `true` if values are not deeply equal from initial values, `false` otherwise.\n`dirty` is a readonly computed property and should not be mutated directly.\n\n#### `errors: { [field: string]: string }`\n\nForm validation errors. Should match the shape of your form's `values` defined\nin `initialValues`. If you are using `validationSchema` (which you should be),\nkeys and shape will match your schema exactly. Internally, Formik transforms raw\n[Yup validation errors](https://github.com/jquense/yup#validationerrorerrors-string--arraystring-value-any-path-string)\non your behalf. If you are using `validate`, then that function will determine\nthe `errors` objects shape.\n\n#### `handleBlur: (e: any) => void`\n\n`onBlur` event handler. Useful for when you need to track whether an input has\nbeen `touched` or not. This should be passed to `<input onBlur={handleBlur} ... />`\n\n#### `handleChange: (e: React.ChangeEvent<any>) => void`\n\nGeneral input change event handler. This will update the `values[key]` where\n`key` is the event-emitting input's `name` attribute. If the `name` attribute is\nnot present, `handleChange` will look for an input's `id` attribute. Note:\n\"input\" here means all HTML inputs.\n\n#### `handleReset: () => void`\n\nReset handler. Will reset the form to its initial state. This should be passed\nto `<button onClick={handleReset}>...</button>`\n\n#### `handleSubmit: (e: React.FormEvent<HTMLFormElement>) => void`\n\nSubmit handler. This should be passed to `<form onSubmit={props.handleSubmit}>...</form>`. To learn more about the submission process, see [Form Submission](../guides/form-submission.md).\n\n#### `isSubmitting: boolean`\n\nSubmitting state of the form. Returns `true` if submission is in progress and `false` otherwise. IMPORTANT: Formik will set this to `true` as soon as submission is _attempted_. To learn more about the submission process, see [Form Submission](../guides/form-submission.md).\n\n#### `isValid: boolean`\n\nReturns `true` if there are no `errors` (i.e. the `errors` object is empty) and `false` otherwise.\n\n> Note: `isInitialValid` was deprecated in 2.x. However, for backwards compatibility, if the `isInitialValid` prop is specified, `isValid` will return `true` if the there are no `errors`, or the result of `isInitialValid` of the form if it is in \"pristine\" condition (i.e. not `dirty`).\n\n#### `isValidating: boolean`\n\nReturns `true` if Formik is running validation during submission, or by calling [`validateForm`] directly `false` otherwise. To learn more about what happens with `isValidating` during the submission process, see [Form Submission](../guides/form-submission.md).\n\n#### `resetForm: (nextState?: Partial<FormikState<Values>>) => void`\n\nImperatively reset the form. The only (optional) argument, `nextState`, is an object on which any of these `FormikState` fields are optional:\n\n```ts\ninterface FormikState<Values> {\n  /** Form values */\n  values: Values;\n  /** map of field names to specific error for that field */\n  errors: FormikErrors<Values>;\n  /** map of field names to **whether** the field has been touched */\n  touched: FormikTouched<Values>;\n  /** whether the form is currently submitting */\n  isSubmitting: boolean;\n  /** whether the form is currently validating (prior to submission) */\n  isValidating: boolean;\n  /** Top level status state, in case you need it */\n  status?: any;\n  /** Number of times user tried to submit the form */\n  submitCount: number;\n}\n```\n\nIf `nextState` is specified, Formik will set `nextState.values` as the new \"initial state\" and use the related values of `nextState` to update the form's `initialValues` as well as `initialTouched`, `initialStatus`, `initialErrors`. This is useful for altering the initial state (i.e. \"base\") of the form after changes have been made.\n\n```tsx\n// typescript usage\nfunction MyForm(props: MyFormProps) {\n  // using TSX Generics here to set <Values> to <Blog>\n  return (\n    <Formik<Blog>\n      initialValues={props.initVals}\n      onSubmit={(values, actions) => {\n        props.onSubmit(values).then(() => {\n          actions.setSubmitting(false);\n          actions.resetForm({\n            values: {\n              // the type of `values` inferred to be Blog\n              title: '',\n              image: '',\n              body: '',\n            },\n            // you can also set the other form states here\n          });\n        });\n      }}\n    >\n      // etc\n    </Formik>\n  );\n}\n```\n\nIf `nextState` is omitted, then Formik will reset state to the original initial state. The latter is useful for calling `resetForm` within `componentDidUpdate` or `useEffect`.\n\n```tsx\nactions.resetForm();\n```\n\n#### `setErrors: (fields: { [field: string]: string }) => void`\n\nSet `errors` imperatively.\n\n#### `setFieldError: (field: string, errorMsg: string) => void`\n\nSet the error message of a field imperatively. `field` should match the key of\n`errors` you wish to update. Useful for creating custom input error handlers.\n\n#### `setFieldTouched: (field: string, isTouched?: boolean, shouldValidate?: boolean) => Promise<void | FormikErrors>`\n\nSet the touched state of a field imperatively. `field` should match the key of\n`touched` you wish to update. Useful for creating custom input blur handlers. Calling this method will trigger validation to run if `validateOnBlur` is set to `true` (which it is by default). `isTouched` defaults to `true` if not specified. You can also explicitly prevent/skip validation by passing a third argument as `false`.\n\nIf `validateOnBlur` is set to `true` and there are errors, they will be resolved in the returned `Promise`.\n\n#### `submitForm: () => Promise`\n\nTrigger a form submission. The promise will be rejected if form is invalid.\n\n#### `submitCount: number`\n\nNumber of times user tried to submit the form. Increases when [`handleSubmit`](#handlesubmit-e-reactformeventhtmlformelement--void) is called, resets after calling\n[`handleReset`](#handlereset---void). `submitCount` is readonly computed property and should not be mutated directly.\n\n#### `setFieldValue: (field: string, value: React.SetStateAction<any>, shouldValidate?: boolean) => Promise<void | FormikErrors>`\n\nSet the value of a field imperatively. `field` should match the key of\n`values` you wish to update. Useful for creating custom input change handlers. Calling this will trigger validation to run if `validateOnChange` is set to `true` (which it is by default). You can also explicitly prevent/skip validation by passing a third argument as `false`.\n\nIf `validateOnChange` is set to `true` and there are errors, they will be resolved in the returned `Promise`.\n\n#### `setStatus: (status?: any) => void`\n\nSet a top-level `status` to anything you want imperatively. Useful for\ncontrolling arbitrary top-level state related to your form. For example, you can\nuse it to pass API responses back into your component in `handleSubmit`.\n\n#### `setSubmitting: (isSubmitting: boolean) => void`\n\nSet `isSubmitting` imperatively. You would call it with `setSubmitting(false)` in your `onSubmit` handler to finish the cycle. To learn more about the submission process, see [Form Submission](../guides/form-submission.md).\n\n#### `setTouched: (fields: { [field: string]: boolean }, shouldValidate?: boolean) => Promise<void | FormikErrors>`\n\nSet `touched` imperatively. Calling this will trigger validation to run if `validateOnBlur` is set to `true` (which it is by default). You can also explicitly prevent/skip validation by passing a second argument as `false`.\n\nIf `validateOnBlur` is set to `true` and there are errors, they will be resolved in the returned `Promise`.\n\n#### `setValues: (fields: React.SetStateAction<{ [field: string]: any }>, shouldValidate?: boolean) => Promise<void | FormikErrors<Values>>`\n\nSet `values` imperatively. Calling this will trigger validation to run if `validateOnChange` is set to `true` (which it is by default). You can also explicitly prevent/skip validation by passing a second argument as `false`.\n\nIf `validateOnChange` is set to `true` and there are errors, they will be resolved in the returned `Promise`.\n\n#### `status?: any`\n\nA top-level status object that you can use to represent form state that can't\notherwise be expressed/stored with other methods. This is useful for capturing\nand passing through API responses to your inner component.\n\n`status` should only be modified by calling\n[`setStatus`](#setstatus-status-any--void).\n\n#### `touched: { [field: string]: boolean }`\n\nTouched fields. Each key corresponds to a field that has been touched/visited.\n\n#### `values: { [field: string]: any }`\n\nYour form's values. Will have the shape of the result of `mapPropsToValues`\n(if specified) or all props that are not functions passed to your wrapped\ncomponent.\n\n#### `validateForm: (values?: any) => Promise<FormikErrors<Values>>`\n\nImperatively call your `validate` or `validateSchema` depending on what was specified. You can optionally pass values to validate against and this modify Formik state accordingly, otherwise this will use the current `values` of the form.\n\n#### `validateField: (field: string) => void`\n\nImperatively call field's `validate` function if specified for given field or run schema validation using [Yup's `schema.validateAt`](https://github.com/jquense/yup#mixedvalidateatpath-string-value-any-options-object-promiseany-validationerror) and the provided top-level `validationSchema` prop. Formik will use the current field value.\n\n### `component?: React.ComponentType<FormikProps<Values>>`\n\n```jsx\n<Formik component={ContactForm} />;\n\nconst ContactForm = ({\n  handleSubmit,\n  handleChange,\n  handleBlur,\n  values,\n  errors,\n}) => (\n  <form onSubmit={handleSubmit}>\n    <input\n      type=\"text\"\n      onChange={handleChange}\n      onBlur={handleBlur}\n      value={values.name}\n      name=\"name\"\n    />\n    {errors.name && <div>{errors.name}</div>}\n    <button type=\"submit\">Submit</button>\n  </form>\n);\n```\n\n**Warning:** `<Formik component>` takes precedence over `<Formik render>` so\ndon’t use both in the same `<Formik>`.\n\n### `render: (props: FormikProps<Values>) => ReactNode`\n\n**Deprecated in 2.x**\n\n```jsx\n<Formik render={props => <ContactForm {...props} />} />\n\n<Formik\n  render={({ handleSubmit, handleChange, handleBlur, values, errors }) => (\n    <form onSubmit={handleSubmit}>\n      <input\n        type=\"text\"\n        onChange={handleChange}\n        onBlur={handleBlur}\n        value={values.name}\n        name=\"name\"\n      />\n      {errors.name &&\n        <div>\n          {errors.name}\n        </div>}\n      <button type=\"submit\">Submit</button>\n    </form>\n  )}\n/>\n```\n\n### `children?: React.ReactNode | (props: FormikProps<Values>) => ReactNode`\n\n```jsx\n<Formik children={props => <ContactForm {...props} />} />\n\n// or...\n\n<Formik>\n  {({ handleSubmit, handleChange, handleBlur, values, errors }) => (\n    <form onSubmit={handleSubmit}>\n      <input\n        type=\"text\"\n        onChange={handleChange}\n        onBlur={handleBlur}\n        value={values.name}\n        name=\"name\"\n      />\n      {errors.name &&\n        <div>\n          {errors.name}\n        </div>}\n      <button type=\"submit\">Submit</button>\n    </form>\n  )}\n</Formik>\n```\n\n### `enableReinitialize?: boolean`\n\nDefault is `false`. Control whether Formik should reset the form if\n`initialValues` changes (using deep equality).\n\n### `isInitialValid?: boolean`\n\n**Deprecated in 2.x, use `initialErrors` instead**\n\nControl the initial value of `isValid` prop prior to\nmount. You can also pass a function. Useful for situations when you want to\nenable/disable a submit and reset buttons on initial mount.\n\n### `initialErrors?: FormikErrors<Values>`\n\nInitial field errors of the form, Formik will make these values available to\nrender methods component as `errors`.\n\nNote: `initialErrors` is not available to the higher-order component `withFormik`, use\n`mapPropsToErrors` instead.\n\n### `initialStatus?: any`\n\nAn arbitrary value for the initial `status` of the form. If the form is reset, this value will be restored.\n\nNote: `initialStatus` is not available to the higher-order component `withFormik`, use\n`mapPropsToStatus` instead.\n\n### `initialTouched?: FormikTouched<Values>`\n\nInitial visited fields of the form, Formik will make these values available to\nrender methods component as `touched`.\n\nNote: `initialTouched` is not available to the higher-order component `withFormik`, use\n`mapPropsToTouched` instead.\n\n### `initialValues: Values`\n\nInitial field values of the form, Formik will make these values available to\nrender methods component as `values`.\n\nEven if your form is empty by default, you must initialize all fields with\ninitial values otherwise React will throw an error saying that you have changed\nan input from uncontrolled to controlled.\n\nNote: `initialValues` not available to the higher-order component, use\n`mapPropsToValues` instead.\n\n### `onReset?: (values: Values, formikBag: FormikBag) => void`\n\nYour optional form reset handler. It is passed your forms `values` and the\n\"FormikBag\".\n\n### `onSubmit: (values: Values, formikBag: FormikBag) => void | Promise<any>`\n\nYour form submission handler. It is passed your forms `values` and the\n\"FormikBag\", which includes an object containing a subset of the\n[injected props and methods](#formik-render-methods-and-props) (i.e. all the methods\nwith names that start with `set<Thing>` + `resetForm`) and any props that were\npassed to the wrapped component.\n\nNote: `errors`, `touched`, `status` and all event handlers are NOT\nincluded in the `FormikBag`.\n\n> IMPORTANT: If `onSubmit` is async, then Formik will automatically set `isSubmitting` to `false` on your behalf once it has resolved. This means you do NOT need to call `formikBag.setSubmitting(false)` manually. However, if your `onSubmit` function is synchronous, then you need to call `setSubmitting(false)` on your own.\n\n### `validate?: (values: Values) => FormikErrors<Values> | Promise<any>`\n\n_Note: I suggest using `validationSchema` and Yup for validation. However,\n`validate` is a dependency-free, straightforward way to validate your forms._\n\nValidate the form's `values` with function. This function can either be:\n\n1. Synchronous and return an `errors` object.\n\n```js\n// Synchronous validation\nconst validate = values => {\n  const errors = {};\n\n  if (!values.email) {\n    errors.email = 'Required';\n  } else if (!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$/i.test(values.email)) {\n    errors.email = 'Invalid email address';\n  }\n\n  //...\n\n  return errors;\n};\n```\n\n- Asynchronous and return a Promise that's resolves to an object containing `errors`\n\n```js\n// Async Validation\nconst sleep = ms => new Promise(resolve => setTimeout(resolve, ms));\n\nconst validate = values => {\n  return sleep(2000).then(() => {\n    const errors = {};\n    if (['admin', 'null', 'god'].includes(values.username)) {\n      errors.username = 'Nice try';\n    }\n    // ...\n    return errors;\n  });\n};\n```\n\n### `validateOnBlur?: boolean`\n\nDefault is `true`. Use this option to run validations on `blur` events. More\nspecifically, when either `handleBlur`, `setFieldTouched`, or `setTouched`\nare called.\n\n### `validateOnChange?: boolean`\n\nDefault is `true`. Use this option to tell Formik to run validations on `change`\nevents and `change`-related methods. More specifically, when either\n`handleChange`, `setFieldValue`, or `setValues` are called.\n\n### `validateOnMount?: boolean`\n\nDefault is `false`. Use this option to tell Formik to run validations when the `<Formik />` component mounts\nand/or `initialValues` change.\n\n### `validationSchema?: Schema | (() => Schema)`\n\n[A Yup schema](https://github.com/jquense/yup) or a function that returns a Yup\nschema. This is used for validation. Errors are mapped by key to the inner\ncomponent's `errors`. Its keys should match those of `values`.\n"
  },
  {
    "path": "docs/api/useField.md",
    "content": "---\nid: useField\ntitle: useField()\n---\n\n`useField` is a React hook used to thread Formik behaviors into arbitrary field components. It provides the greatest amount of flexibility for scenarios where `Field` is inappropriate. There are two ways to use it.\n\n## Example\n\n```tsx\nimport React from 'react';\nimport { useField, Form, FormikProps, Formik } from 'formik';\n\ninterface Values {\n  firstName: string;\n  lastName: string;\n  email: string;\n}\n\nconst MyTextField = ({ label, ...props }) => {\n  const [field, meta] = useField(props);\n  return (\n    <>\n      <label>\n        {label}\n        <input {...field} {...props} />\n      </label>\n      {meta.touched && meta.error ? (\n        <div className=\"error\">{meta.error}</div>\n      ) : null}\n    </>\n  );\n};\n\nconst Example = () => (\n  <div>\n    <h1>My Form</h1>\n    <Formik\n      initialValues={{\n        email: '',\n        firstName: 'red',\n        lastName: '',\n      }}\n      onSubmit={(values, actions) => {\n        setTimeout(() => {\n          alert(JSON.stringify(values, null, 2));\n          actions.setSubmitting(false);\n        }, 1000);\n      }}\n    >\n      {(props: FormikProps<Values>) => (\n        <Form>\n          <MyTextField name=\"firstName\" type=\"text\" label=\"First Name\" />\n          <MyTextField name=\"lastName\" type=\"text\" label=\"Last Name\" />\n          <MyTextField name=\"email\" type=\"email\" label=\"Email\" />\n          <button type=\"submit\">Submit</button>\n        </Form>\n      )}\n    </Formik>\n  </div>\n);\n```\n\n---\n\n# Reference\n\n## `useField<Value = any>(name: string | FieldHookConfig<Value>): [FieldInputProps<Value>, FieldMetaProps<Value>, FieldHelperProps]`\n\nA custom React Hook that returns a 3-tuple (an array with three elements) containing `FieldProps`, `FieldMetaProps` and `FieldHelperProps`. It accepts either a string of a field name or an object as an argument. The object must at least contain a `name` key. This object is a subset of the props that you would pass to `<Field>` and the values and functions in `FieldProps` will mimic the behavior of `<Field>` exactly. This is useful, and generally preferred, since it allows you to take advantage of Formik's checkbox, radio, and multiple select behavior when the object contains the relevant key/values (e.g. `type: 'checkbox'`, `multiple: true`, etc.).\n\n`FieldMetaProps` contains computed values about the field which can be used to style or otherwise change the field. `FieldHelperProps` contains helper functions that allow you to imperatively change a field's values.\n\n```jsx\nimport React from 'react';\nimport { useField } from 'formik';\n\nfunction MyTextField(props) {\n  // this will return field props for an <input />\n  const [field, meta, helpers] = useField(props.name);\n  return (\n    <>\n      <input {...field} {...props} />\n      {meta.error && meta.touched && <div>{meta.error}</div>}\n    </>\n  );\n}\n\nfunction MyInput(props) {\n  // this will return field exactly like <Field>{({ field }) => ... }</Field>\n  const [field, meta] = useField(props);\n  return (\n    <>\n      <input {...field} {...props} />\n      {meta.error && meta.touched && <div>{meta.error}</div>}\n    </>\n  );\n}\n\nfunction MyOtherComponent(props) {\n  // This isn't an input, so instead of using the values in 'field' directly,\n  // we'll use 'meta' and 'helpers'.\n  const [field, meta, helpers] = useField(props.name);\n\n  const { value } = meta;\n  const { setValue } = helpers;\n\n  const isSelected = v => (v === value ? 'selected' : '');\n\n  return (\n    <div className=\"itemsPerPage\">\n      <button onClick={() => setValue(5)} className={isSelected(5)}>\n        5\n      </button>\n      <button onClick={() => setValue(10)} className={isSelected(10)}>\n        10\n      </button>\n      <button onClick={() => setValue(25)} className={isSelected(25)}>\n        25\n      </button>\n    </div>\n  );\n}\n```\n\n### `FieldHookConfig<Value>`\n\nThis object is a subset of the props that you would pass to `<Field>`. It contains:\n\n- `name: string` - The name of the field\n- `validate?: (value: any) => undefined | string | Promise<any>` - See [the documentation for `<Field>`](./field#validate)\n- `type?: string` - The type of the HTML input (`text`, `number` and etc.)\n- `multiple?: boolean` - Whether or not the multiple values can be selected.\n- `value?: string`- Works only for inputs of type `checkbox` and `radio`. When a form is submitted, checkboxes and radios are submitted with the provided `value`. Read more about it on [MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/checkbox#Value).\n\n### `FieldInputProps<Value>`\n\nAn object that contains:\n\n- `name: string` - The name of the field\n- `checked?: boolean` - Whether or not the input is checked, this is _only_ defined if `useField` is passed an object with a `name`, `type: 'checkbox'` or `type: 'radio'`.\n- `onBlur: () => void` - A blur event handler\n- `onChange: (e: React.ChangeEvent<any>) => void` - A change event handler\n- `value: Value` - The field's value (plucked out of `values`) or, if it is a checkbox or radio input, then potentially the `value` passed into `useField`.\n- `multiple?: boolean` - Whether or not the multiple values can be selected. This is only ever defined when `useField` is passed an object with `multiple: true`\n\n### `FieldMetaProps<Value>`\n\nAn object that contains relevant computed metadata about a field. More specifically,\n\n- `error?: string` - The field's error message (plucked out of `errors`)\n- `initialError?: string` - The field's initial error if the field is present in `initialErrors` (plucked out of `initialErrors`)\n- `initialTouched: boolean` - The field's initial value if the field is present in `initialTouched` (plucked out of `initialTouched`)\n- `initialValue?: Value` - The field's initial value if the field is given a value in `initialValues` (plucked out of `initialValues`)\n- `touched: boolean` - Whether the field has been visited (plucked out of `touched`)\n- `value: any` - The field's value (plucked out of `values`)\n\n### `FieldHelperProps`\n\nAn object that contains helper functions which you can use to imperatively change the value, error value or touched status for the field in question. This is useful for components which need to change a field's status directly, without triggering change or blur events.\n\n- `setValue(value: any, shouldValidate?: boolean): Promise<void | FormikErrors>` - A function to change the field's value. Calling this will trigger validation to run if `validateOnChange` is set to `true` (which it is by default). You can also explicitly prevent/skip validation by passing a second argument as `false`.\nIf `validateOnChange` is set to `true` and there are errors, they will be resolved in the returned `Promise`.\n\n- `setTouched(value: boolean, shouldValidate?: boolean): void` - A function to change the field's touched status. Calling this will trigger validation to run if `validateOnBlur` is set to `true` (which it is by default). You can also explicitly prevent/skip validation by passing a second argument as `false`.\nIf `validateOnBlur` is set to `true` and there are errors, they will be resolved in the returned `Promise`.\n\n- `setError(value: any): void` - A function to change the field's error value\n"
  },
  {
    "path": "docs/api/useFormik.md",
    "content": "---\nid: useFormik\ntitle: useFormik()\n---\n\n`useFormik()` is a custom React hook that will return all Formik state and helpers directly. Despite its name, it is not meant for the majority of use cases. Internally, Formik uses `useFormik` to create the `<Formik>` component (which renders a [React Context](https://reactjs.org/docs/context.html) Provider). If you are trying to access Formik state via context, use [useFormikContext](useFormikContext.md). Only use this hook if you are NOT using `<Formik>` or `withFormik`.\n\n\\*\\* Be aware that `<Field>`, `<FastField>`, `<ErrorMessage>`, `connect()`, and `<FieldArray>` will NOT work with `useFormik()` as they all require React Context.\n\n## Use cases for `useFormik()`\n\n- You are Jared\n- You are modifying the returned value and creating a modified version of `<Formik>` for your own consumption\n- You want to avoid using React Context (possibly for perf reasons)\n\n## Example\n\n```jsx\nimport React from 'react';\nimport { useFormik } from 'formik';\n\nconst SignupForm = () => {\n  const formik = useFormik({\n    initialValues: {\n      firstName: '',\n      lastName: '',\n      email: '',\n    },\n    onSubmit: values => {\n      alert(JSON.stringify(values, null, 2));\n    },\n  });\n  return (\n    <form onSubmit={formik.handleSubmit}>\n      <label htmlFor=\"firstName\">First Name</label>\n      <input\n        id=\"firstName\"\n        name=\"firstName\"\n        type=\"text\"\n        onChange={formik.handleChange}\n        value={formik.values.firstName}\n      />\n      <label htmlFor=\"lastName\">Last Name</label>\n      <input\n        id=\"lastName\"\n        name=\"lastName\"\n        type=\"text\"\n        onChange={formik.handleChange}\n        value={formik.values.lastName}\n      />\n      <label htmlFor=\"email\">Email Address</label>\n      <input\n        id=\"email\"\n        name=\"email\"\n        type=\"email\"\n        onChange={formik.handleChange}\n        value={formik.values.email}\n      />\n      <button type=\"submit\">Submit</button>\n    </form>\n  );\n};\n```\n\n---\n\n# Reference\n\n## `useFormik<Values>(config: FormikConfig<Values>): FormikProps<Values>`\n\nA custom React Hook that returns Formik states and helpers. It is used internally to create the `<Formik>` component, but is exported for advanced use cases or for those people that do not want to use React Context.\n"
  },
  {
    "path": "docs/api/useFormikContext.md",
    "content": "---\nid: useFormikContext\ntitle: useFormikContext()\n---\n\n`useFormikContext()` is a custom React hook that will return all Formik state and helpers via [React Context](https://reactjs.org/docs/context.html).\n\n## Example\n\nHere's an example of a form that works similarly to Stripe's 2-factor verification form. As soon as you type a 6 digit number, the form will automatically submit (i.e. no enter keypress is needed).\n\n```js\nimport React from 'react';\nimport { useFormikContext, Formik, Form, Field } from 'formik';\n\nconst AutoSubmitToken = () => {\n  // Grab values and submitForm from context\n  const { values, submitForm } = useFormikContext();\n  React.useEffect(() => {\n    // Submit the form imperatively as an effect as soon as form values.token are 6 digits long\n    if (values.token.length === 6) {\n      submitForm();\n    }\n  }, [values, submitForm]);\n  return null;\n};\n\nconst TwoFactorVerificationForm = () => (\n  <div>\n    <h1>2-step Verification</h1>\n    <p>Please enter the 6 digit code sent to your device</p>\n    <Formik\n      initialValues={{ token: '' }}\n      validate={values => {\n        const errors = {};\n        if (values.token.length < 5) {\n          errors.token = 'Invalid code. Too short.';\n        }\n        return errors;\n      }}\n      onSubmit={(values, actions) => {\n        setTimeout(() => {\n          alert(JSON.stringify(values, null, 2));\n          actions.setSubmitting(false);\n        }, 1000);\n      }}\n    >\n      <Form>\n        <Field name=\"token\" type=\"tel\" />\n        <AutoSubmitToken />\n      </Form>\n    </Formik>\n  </div>\n);\n```\n\n---\n\n# Reference\n\n## `useFormikContext(): FormikProps<Values>`\n\nA custom React Hook that returns Formik states and helpers via React Context. Thus, this hook will only work if there is a parent Formik React Context from which it can pull from. If called without a parent context (i.e. a descendent of a `<Formik>` component or `withFormik` higher-order component), you will get a warning in your console.\n"
  },
  {
    "path": "docs/api/utils.md",
    "content": "---\nid: utils\ntitle: Utils\n---\n\n# Reference\n\n## Exported Functions\n\n#### `getActiveElement(doc?: Document): Element | null`\n\n#### `getIn(obj: any, key: string | string[], def?: any, p?: number): any`\n\n#### `setIn(obj: any, path: string, value: any): any`\n\n#### `setNestedObjectValues<T>(object: any, value: any, visited?: any, response?: any): T`\n\n#### `isEmptyArray: (value?: any) => boolean`\n\n#### `isFunction: (obj: any) => obj is Function`\n\n#### `isObject: (obj: any) => obj is Object`\n\n#### `isInteger: (obj: any) => boolean`\n\n#### `isString: (obj: any) => obj is string`\n\n#### `isNaN: (obj: any) => boolean`\n\n#### `isEmptyChildren: (children: any) => boolean`\n\n#### `isPromise: (value: any) => value is PromiseLike<any>`\n\n#### `isInputEvent: (value: any) => value is React.SyntheticEvent<any, Event>`\n"
  },
  {
    "path": "docs/api/withFormik.md",
    "content": "---\nid: withFormik\ntitle: withFormik()\n---\n\nCreate a higher-order React component class that passes props and form handlers\n(the \"`FormikBag`\") into your component derived from supplied options.\n\n## Example\n\n```jsx\nimport React from 'react';\nimport { withFormik } from 'formik';\n\nconst MyForm = props => {\n  const {\n    values,\n    touched,\n    errors,\n    handleChange,\n    handleBlur,\n    handleSubmit,\n  } = props;\n  return (\n    <form onSubmit={handleSubmit}>\n      <input\n        type=\"text\"\n        onChange={handleChange}\n        onBlur={handleBlur}\n        value={values.name}\n        name=\"name\"\n      />\n      {errors.name && touched.name && <div id=\"feedback\">{errors.name}</div>}\n      <button type=\"submit\">Submit</button>\n    </form>\n  );\n};\n\nconst MyEnhancedForm = withFormik({\n  mapPropsToValues: () => ({ name: '' }),\n\n  // Custom sync validation\n  validate: values => {\n    const errors = {};\n\n    if (!values.name) {\n      errors.name = 'Required';\n    }\n\n    return errors;\n  },\n\n  handleSubmit: (values, { setSubmitting }) => {\n    setTimeout(() => {\n      alert(JSON.stringify(values, null, 2));\n      setSubmitting(false);\n    }, 1000);\n  },\n\n  displayName: 'BasicForm',\n})(MyForm);\n```\n\n#### `options`\n\n---\n\n# Reference\n\n## `options`\n\n### `displayName?: string`\n\nWhen your inner form component is a stateless functional component, you can use\nthe `displayName` option to give the component a proper name so you can more\neasily find it in\n[React DevTools](https://chrome.google.com/webstore/detail/react-developer-tools/fmkadmapgofadopljbjfkapdkoienihi?hl=en).\nIf specified, your wrapped form will show up as `Formik(displayName)`. If\nomitted, it will show up as `Formik(Component)`. This option is not required for\nclass components (e.g. `class XXXXX extends React.Component {..}`).\n\n### `enableReinitialize?: boolean`\n\nDefault is `false`. Control whether Formik should reset the form if the wrapped\ncomponent props change (using deep equality).\n\n### `handleSubmit: (values: Values, formikBag: FormikBag) => void | Promise<any>`\n\nYour form submission handler. It is passed your forms `values` and the\n\"FormikBag\", which includes an object containing a subset of the\n[injected props and methods](#injected-props-and-methods) (i.e. all the methods\nwith names that start with `set<Thing>` + `resetForm`) and any props that were\npassed to the wrapped component.\n\n#### The \"FormikBag\"\n\n- `props` (props passed to the wrapped component)\n- `resetForm`\n- `setErrors`\n- `setFieldError`\n- `setFieldTouched`\n- `setFieldValue`\n- `setStatus`\n- `setSubmitting`\n- `setTouched`\n- `setValues`\n\nNote: `errors`, `touched`, `status` and all event handlers are NOT\nincluded in the `FormikBag`.\n\n> IMPORTANT: If `onSubmit` is async, then Formik will automatically set `isSubmitting` to `false` on your behalf once it has resolved. This means you do NOT need to call `formikBag.setSubmitting(false)` manually. However, if your `onSubmit` function is synchronous, then you need to call `setSubmitting(false)` on your own.\n\n### `isInitialValid?: boolean | (props: Props) => boolean`\n\n**Deprecated in 2.x, use `mapPropsToErrors` instead**\n\nControl the initial value of `isValid` prop prior to\nmount. You can also pass a function. Useful for situations when you want to\nenable/disable a submit and reset buttons on initial mount.\n\n### `mapPropsToErrors?: (props: Props) => FormikErrors<Values>`\n\nIf this option is specified, then Formik will transfer its results into\nupdatable form state and make these values available to the new component as\n`props.errors` initially. Useful for instantiating arbitrary error state into your form. As a reminder, `props.errors` will be overwritten as soon as validation runs. Formik will also reset `props.errors` to this initial value (and this function will be re-run) if the form is reset.\n\n### `mapPropsToStatus?: (props: Props) => any`\n\nIf this option is specified, then Formik will transfer its results into\nupdatable form state and make these values available to the new component as\n`props.status`. Useful for storing or instantiating arbitrary state into your form. As a reminder, `status` will be reset to this initial value (and this function will be re-run) if the form is reset.\n\n### `mapPropsToTouched?: (props: Props) => FormikTouched<Values>`\n\nIf this option is specified, then Formik will transfer its results into\nupdatable form state and make these values available to the new component as\n`props.touched`. Useful for instantiating arbitrary touched state (i.e. marking fields as visited) into your form. As a reminder, Formik will use this initial value (and this function will be re-run) if the form is reset.\n\n### `mapPropsToValues?: (props: Props) => Values`\n\nIf this option is specified, then Formik will transfer its results into\nupdatable form state and make these values available to the new component as\n`props.values`. If `mapPropsToValues` is not specified, then Formik\nwill map all props that are not functions to the inner component's\n`props.values`. That is, if you omit it, Formik will only pass\n`props` where `typeof props[k] !== 'function'`, where `k` is some key.\n\nEven if your form is not receiving any props from its parent, use\n`mapPropsToValues` to initialize your forms empty state.\n\n### `validate?: (values: Values, props: Props) => FormikErrors<Values> | Promise<any>`\n\n_Note: I suggest using `validationSchema` and Yup for validation. However,\n`validate` is a dependency-free, straightforward way to validate your forms._\n\nValidate the form's `values` with function. This function can either be:\n\n1. Synchronous and return an `errors` object.\n\n```js\n// Synchronous validation\nconst validate = (values, props) => {\n  const errors = {};\n\n  if (!values.email) {\n    errors.email = 'Required';\n  } else if (!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$/i.test(values.email)) {\n    errors.email = 'Invalid email address';\n  }\n\n  //...\n\n  return errors;\n};\n```\n\n- Asynchronous and return a Promise that's resolves to an object containing `errors`\n\n```js\n// Async Validation\nconst sleep = ms => new Promise(resolve => setTimeout(resolve, ms));\n\nconst validate = (values, props) => {\n  return sleep(2000).then(() => {\n    const errors = {};\n    if (['admin', 'null', 'god'].includes(values.username)) {\n      errors.username = 'Nice try';\n    }\n    // ...\n    return errors;\n  });\n};\n```\n\n### `validateOnBlur?: boolean`\n\nDefault is `true`. Use this option to run validations on `blur` events. More\nspecifically, when either `handleBlur`, `setFieldTouched`, or `setTouched`\nare called.\n\n### `validateOnChange?: boolean`\n\nDefault is `true`. Use this option to tell Formik to run validations on `change`\nevents and `change`-related methods. More specifically, when either\n`handleChange`, `setFieldValue`, or `setValues` are called.\n\n### `validateOnMount?: boolean`\n\nDefault is `false`. Use this option to tell Formik to run validation (at low priority) when the wrapped component mounts\nand/or `initialValues` change.\n\n### `validationSchema?: Schema | ((props: Props) => Schema)`\n\n[A Yup schema](https://github.com/jquense/yup) or a function that returns a Yup\nschema. This is used for validation. Errors are mapped by key to the inner\ncomponent's `errors`. Its keys should match those of `values`.\n\n## Injected props and methods\n\nThese are identical to the props of [`<Formik render={props => ...} />`](./formik#formik-render-methods-and-props)\n"
  },
  {
    "path": "docs/examples/async-submission.md",
    "content": "---\ntitle: Async Submission Example\ndescription: This example demonstrates how to use async/await to submit a Formik form.\n---\n\nThis example demonstrates how to use `async`/`await` to submit a Formik form.\n\n<div className=\"embed-responsive aspect-ratio-square\">\n  <iframe\n  src=\"https://codesandbox.io/embed/github/formik/formik/tree/main/examples/async-submission?fontsize=14&hidenavigation=1&theme=dark\"\n  style={{ width:'100%', height: '100%', border:0, borderRadius: 4, overflow: 'hidden'}}\n  title=\"formik/formik: async-submission\"\n  allow=\"accelerometer; ambient-light-sensor; camera; encrypted-media; geolocation; gyroscope; hid; microphone; midi; payment; usb; vr; xr-spatial-tracking\"\n  sandbox=\"allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts\"\n  ></iframe>\n</div>\n"
  },
  {
    "path": "docs/examples/basic.md",
    "content": "---\ntitle: Basic Example\ndescription: This example demonstrates how to use Formik in its most basic way.\n---\n\nThis example demonstrates how to use Formik in its most basic way.\n\n<div className=\"embed-responsive aspect-ratio-square\">\n  <iframe\n  src=\"https://codesandbox.io/embed/github/formik/formik/tree/main/examples/basic?fontsize=14&hidenavigation=1&theme=dark\"\n  style={{ width:'100%', height: '100%', border:0, borderRadius: 4, overflow: 'hidden'}}\n  title=\"formik/formik: async-submission\"\n  allow=\"accelerometer; ambient-light-sensor; camera; encrypted-media; geolocation; gyroscope; hid; microphone; midi; payment; usb; vr; xr-spatial-tracking\"\n  sandbox=\"allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts\"\n  ></iframe>\n</div>\n"
  },
  {
    "path": "docs/examples/checkboxes.md",
    "content": "---\ntitle: Checkboxes Example\ndescription: This example demonstrates how to use Formik with a checkbox group. Given that the fields all share the same `name`, Formik will automagically bind them to a single array.\n---\n\nThis example demonstrates how to use Formik with a checkbox group. Given that the fields all share the same `name`, Formik will automagically bind them to a single array.\n\n<div className=\"embed-responsive aspect-ratio-square\">\n  <iframe\n  src=\"https://codesandbox.io/embed/github/formik/formik/tree/main/examples/checkboxes?fontsize=14&hidenavigation=1&theme=dark\"\n  style={{ width:'100%', height: '100%', border:0, borderRadius: 4, overflow: 'hidden'}}\n  title=\"formik/formik: async-submission\"\n  allow=\"accelerometer; ambient-light-sensor; camera; encrypted-media; geolocation; gyroscope; hid; microphone; midi; payment; usb; vr; xr-spatial-tracking\"\n  sandbox=\"allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts\"\n  ></iframe>\n</div>\n"
  },
  {
    "path": "docs/examples/dependent-fields-async-api-request.md",
    "content": "---\ntitle: Dependent fields with an Async API Request Example\ndescription: This is an example of a complex dependent field in Formik v2. In this example, one field's value is set by making an asynchronous API request based on the current values of other fields.\n---\n\nThis is an example of a complex dependent field in Formik. In this example, one field's value is set by making an asynchronous API request based on the current values of other fields.\n\n<div className=\"embed-responsive aspect-ratio-square\">\n  <iframe\n  src=\"https://codesandbox.io/embed/github/formik/formik/tree/main/examples/dependent-fields-async-api-request?fontsize=14&hidenavigation=1&theme=dark\"\n  style={{ width:'100%', height: '100%', border:0, borderRadius: 4, overflow: 'hidden'}}\n  title=\"formik/formik: async-submission\"\n  allow=\"accelerometer; ambient-light-sensor; camera; encrypted-media; geolocation; gyroscope; hid; microphone; midi; payment; usb; vr; xr-spatial-tracking\"\n  sandbox=\"allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts\"\n  ></iframe>\n</div>\n"
  },
  {
    "path": "docs/examples/dependent-fields.md",
    "content": "---\ntitle: Dependent Fields Example\ndescription: This is an example of how to set the value of one field based on the current values of other fields in Formik.\n---\n\nThis is an example of how to set the value of one field based on the current values of other fields in Formik.\n\n<div className=\"embed-responsive aspect-ratio-square\">\n  <iframe\n  src=\"https://codesandbox.io/embed/github/formik/formik/tree/main/examples/dependent-fields?fontsize=14&hidenavigation=1&theme=dark\"\n  style={{ width:'100%', height: '100%', border:0, borderRadius: 4, overflow: 'hidden'}}\n  title=\"formik/formik: async-submission\"\n  allow=\"accelerometer; ambient-light-sensor; camera; encrypted-media; geolocation; gyroscope; hid; microphone; midi; payment; usb; vr; xr-spatial-tracking\"\n  sandbox=\"allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts\"\n  ></iframe>\n</div>\n"
  },
  {
    "path": "docs/examples/field-arrays.md",
    "content": "---\ntitle: Field Arrays Example\n---\n\nThis example demonstrates how to work with array fields in Formik.\n\n<div className=\"embed-responsive aspect-ratio-square\">\n  <iframe\n  src=\"https://codesandbox.io/embed/github/formik/formik/tree/main/examples/field-arrays?fontsize=14&hidenavigation=1&theme=dark\"\n  style={{ width:'100%', height: '100%', border:0, borderRadius: 4, overflow: 'hidden'}}\n  title=\"formik/formik: async-submission\"\n  allow=\"accelerometer; ambient-light-sensor; camera; encrypted-media; geolocation; gyroscope; hid; microphone; midi; payment; usb; vr; xr-spatial-tracking\"\n  sandbox=\"allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts\"\n  ></iframe>\n</div>\n"
  },
  {
    "path": "docs/examples/instant-feedback.md",
    "content": "---\ntitle: Accessible Instant Feedback Example\n---\n\nInstant feedback during typing can be extremely helpful in certain situations. For example, checking the validity (or availability) of a username shouldn't require the user to resubmit the form (multiple times). Providing instant feedback while users are typing can allow them to experiment more easily until they find valid input value (like a suitable username). Note: This isn't always optimal, use your judgement.\n\n<div className=\"embed-responsive aspect-ratio-square\">\n  <iframe\n  src=\"https://codesandbox.io/embed/github/formik/formik/tree/main/examples/instant-feedback?fontsize=14&hidenavigation=1&theme=dark\"\n  style={{ width:'100%', height: '100%', border:0, borderRadius: 4, overflow: 'hidden'}}\n  title=\"formik/formik: async-submission\"\n  allow=\"accelerometer; ambient-light-sensor; camera; encrypted-media; geolocation; gyroscope; hid; microphone; midi; payment; usb; vr; xr-spatial-tracking\"\n  sandbox=\"allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts\"\n  ></iframe>\n</div>\n"
  },
  {
    "path": "docs/examples/more-examples.md",
    "content": "---\ntitle: More Examples\n---\n\nYou can find additional examples in [`examples` folder of the Formik GitHub repository](https://github.com/formik/formik/tree/main/examples/).\n"
  },
  {
    "path": "docs/examples/radio-group.md",
    "content": "---\ntitle: Radio Group Example\ndescription: This example demonstrates how to create a radio group with Formik.\n---\n\nThis example demonstrates how to create a radio group with Formik.\n\n<div className=\"embed-responsive aspect-ratio-square\">\n  <iframe\n  src=\"https://codesandbox.io/embed/github/formik/formik/tree/main/examples/radio-group?fontsize=14&hidenavigation=1&theme=dark\"\n  style={{ width:'100%', height: '100%', border:0, borderRadius: 4, overflow: 'hidden'}}\n  title=\"formik/formik: async-submission\"\n  allow=\"accelerometer; ambient-light-sensor; camera; encrypted-media; geolocation; gyroscope; hid; microphone; midi; payment; usb; vr; xr-spatial-tracking\"\n  sandbox=\"allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts\"\n  ></iframe>\n</div>\n"
  },
  {
    "path": "docs/examples/typescript.md",
    "content": "---\ntitle: Basic TypeScript\ndescription: This example demonstrates how to use Formik in its most basic way with TypeScript.\n---\n\nThis example demonstrates how to use Formik in its most basic way with TypeScript.\n\n<div className=\"embed-responsive aspect-ratio-square\">\n  <iframe\n  src=\"https://codesandbox.io/embed/github/formik/formik/tree/main/examples/basic-typescript?fontsize=14&hidenavigation=1&theme=dark\"\n  style={{ width:'100%', height: '100%', border:0, borderRadius: 4, overflow: 'hidden'}}\n  title=\"formik/formik: async-submission\"\n  allow=\"accelerometer; ambient-light-sensor; camera; encrypted-media; geolocation; gyroscope; hid; microphone; midi; payment; usb; vr; xr-spatial-tracking\"\n  sandbox=\"allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts\"\n  ></iframe>\n</div>\n"
  },
  {
    "path": "docs/examples/with-material-ui.md",
    "content": "---\nid: with-material-ui\ntitle: Material UI\n---\n\nFormik can be easily used/integrated with [Material UI](https://material-ui.com/), with just passing a few formik props to the respective Material UI Component props. Refer to the example below to get started.\n\n<div className=\"embed-responsive aspect-ratio-square\">\n  <iframe\n  src=\"https://codesandbox.io/embed/github/formik/formik/tree/main/examples/with-material-ui?fontsize=14&hidenavigation=1&theme=dark\"\n  style={{ width:'100%', height: '100%', border:0, borderRadius: 4, overflow: 'hidden'}}\n  title=\"formik/formik: async-submission\"\n  allow=\"accelerometer; ambient-light-sensor; camera; encrypted-media; geolocation; gyroscope; hid; microphone; midi; payment; usb; vr; xr-spatial-tracking\"\n  sandbox=\"allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts\"\n  ></iframe>\n</div>\n"
  },
  {
    "path": "docs/examples.md",
    "content": "---\nid: examples\ntitle: Examples\ndescription: Runnable examples of using Formik in React and React Native to create forms\n---\n\n## Dependent Fields\n\nProgrammatically set the value of one field based on the current values of other fields.\n\nhttps://codesandbox.io/s/formik-v2x-dependent-fields-r0n0v\n\n## Dependent Fields based on Async API Request\n\nIn this example, one field's value is set by making an async API based on the current values of two other fields.\n\nhttps://codesandbox.io/s/formik-v2x-dependent-field-with-async-api-request-4yjrv\n"
  },
  {
    "path": "docs/guides/arrays.md",
    "content": "---\nid: arrays\ntitle: Arrays and Nested Objects\n---\n\nFormik has support for nested objects and arrays out of the box. These subjects are somewhat related because they both leverage the same syntax.\n\n## Nested Objects\n\nThe `name` props in Formik can use lodash-like dot paths to reference nested Formik values. This means that you do not need to flatten out your form's values anymore.\n\n```jsx\nimport React from 'react';\nimport { Formik, Form, Field } from 'formik';\n\nexport const NestedExample = () => (\n  <div>\n    <h1>Social Profiles</h1>\n    <Formik\n      initialValues={{\n        social: {\n          facebook: '',\n          twitter: '',\n        },\n      }}\n      onSubmit={values => {\n        // same shape as initial values\n        console.log(values);\n      }}\n    >\n      <Form>\n        <Field name=\"social.facebook\" />\n        <Field name=\"social.twitter\" />\n        <button type=\"submit\">Submit</button>\n      </Form>\n    </Formik>\n  </div>\n);\n```\n\n## Arrays\n\nFormik also has support for arrays and arrays of objects out of the box. Using lodash-like bracket syntax for `name` string you can quickly build fields for items in a list.\n\n```jsx\nimport React from 'react';\nimport { Formik, Form, Field } from 'formik';\n\nexport const BasicArrayExample = () => (\n  <div>\n    <h1>Friends</h1>\n    <Formik\n      initialValues={{\n        friends: ['jared', 'ian'],\n      }}\n      onSubmit={values => {\n        // same shape as initial values\n        console.log(values);\n      }}\n    >\n      <Form>\n        <Field name=\"friends[0]\" />\n        <Field name=\"friends[1]\" />\n        <button type=\"submit\">Submit</button>\n      </Form>\n    </Formik>\n  </div>\n);\n```\n\nFor more information around manipulating (add/remove/etc) items in lists, see the API reference section on the `<FieldArray>` component.\n\n## Avoid nesting\n\nIf you want to avoid this default behavior Formik also has support for it to have fields with dots.\n\n```jsx\nimport React from 'react';\nimport { Formik, Form, Field } from 'formik';\n\nexport const NestedExample = () => (\n  <div>\n    <h1>Social Profiles</h1>\n    <Formik\n      initialValues={{\n        'owner.fullname': '',\n      }}\n      onSubmit={values => {\n        // same shape as initial values\n        console.log(values);\n      }}\n    >\n      <Form>\n        <Field name=\"['owner.fullname']\" />\n        <button type=\"submit\">Submit</button>\n      </Form>\n    </Formik>\n  </div>\n);\n```\n"
  },
  {
    "path": "docs/guides/form-submission.md",
    "content": "---\nid: form-submission\ntitle: Form Submission\n---\n\n## Submission Phases\n\nTo submit a form in Formik, you need to somehow fire off the provided `handleSubmit(e)` or `submitForm` prop. When you call either of these methods, Formik will execute the following _(pseudo code)_ each time:\n\n### Pre-submit\n\n- Touch all fields. `initialValues` are required and should always be specified. See [#445](https://github.com/jaredpalmer/formik/issues/445#issuecomment-366952762)\n- Set `isSubmitting` to `true`\n- Increment `submitCount` + 1\n\n### Validation\n\n- Set `isValidating` to `true`\n- Run all field-level validations, `validate`, and `validationSchema` asynchronously and deeply merge results\n- Are there any errors?\n  - Yes: Abort submission. Set `isValidating` to `false`, set `errors`, set `isSubmitting` to `false`\n  - No: Set `isValidating` to `false`, proceed to \"Submission\"\n\n### Submission\n\n- Proceed with running the submission handler (i.e. `onSubmit` or `handleSubmit`)\n- Did the submit handler return a promise?\n  - Yes: Wait until it is resolved or rejected, then set `setSubmitting` to `false`\n  - No: _Call `setSubmitting(false)`_ to finish the cycle\n\n## Frequently Asked Questions\n\n<details>\n<summary>How do I determine if my submission handler is executing?</summary>\n\nIf `isValidating` is `false` and `isSubmitting` is `true`.\n\n</details>\n\n<details>\n<summary>Why does Formik touch all fields before submit?</summary>\n\nIt is common practice to only show an input's errors in the UI if it has been visited (a.k.a \"touched\"). Before submitting a form, Formik touches all fields so that all errors that may have been hidden will now be visible.\n\n</details>\n\n<details>\n<summary>How do I protect against double submits?</summary>\n\nDisable whatever is triggering submission if `isSubmitting` is `true`.\n\n</details>\n\n<details>\n<summary>How do I know when my form is validating before submit?</summary>\n\nIf `isValidating` is `true` and `isSubmitting` is `true`.\n\n</details>\n\n<details>\n<summary>Why does `isSubmitting` remain true after submission?</summary>\n  \nIf the submission handler returns a promise, make sure it is correctly resolved or rejected when called.\n\nIf the submission handler does not return a promise, make sure `setSubmitting(false)` is called at the end of the handler.\n\n</details>\n"
  },
  {
    "path": "docs/guides/react-native.md",
    "content": "---\nid: react-native\ntitle: React Native\n---\n\n**Formik is 100% compatible with React Native and React Native Web.** However,\nbecause of differences between ReactDOM's and React Native's handling of forms\nand text input, there are some differences to be aware of. This section will walk\nyou through them and what we consider to be best practices.\n\n### The gist\n\nBefore going any further, here's a super minimal gist of how to use Formik with\nReact Native that demonstrates the key differences:\n\n```jsx\n// Formik x React Native example\nimport React from 'react';\nimport { Button, TextInput, View } from 'react-native';\nimport { Formik } from 'formik';\n\nexport const MyReactNativeForm = props => (\n  <Formik\n    initialValues={{ email: '' }}\n    onSubmit={values => console.log(values)}\n  >\n    {({ handleChange, handleBlur, handleSubmit, values }) => (\n      <View>\n        <TextInput\n          onChangeText={handleChange('email')}\n          onBlur={handleBlur('email')}\n          value={values.email}\n        />\n        <Button onPress={handleSubmit} title=\"Submit\" />\n      </View>\n    )}\n  </Formik>\n);\n```\n\nAs you can see above, the notable differences between using Formik with React\nDOM and React Native are:\n\n1. Formik's `handleSubmit` is passed to a `<Button onPress={...} />`\n   instead of HTML `<form onSubmit={...} />` component (since there is no\n   `<form />` element in React Native).\n2. `<TextInput />` uses Formik's `handleChange(fieldName)` and `handleBlur(fieldName)` instead of directly assigning the callbacks to props, because we have to get the `fieldName` from somewhere and with React Native we can't get it automatically like in web (using input name attribute). You can also use `setFieldValue(fieldName, value)` and `setFieldTouched(fieldName, bool)` as an alternative.\n"
  },
  {
    "path": "docs/guides/typescript.md",
    "content": "---\nid: typescript\ntitle: TypeScript\n---\n\nThe Formik source code is written in TypeScript, so you can rest easy that Formik's\ntypes will always be up-to-date. As a mental model, Formik's type signatures are very\nsimilar to React Router 4's `<Route>`.\n\n#### Render props (`<Formik />` and `<Field />`)\n\n```typescript\nimport * as React from 'react';\nimport {\n  Formik,\n  FormikHelpers,\n  FormikProps,\n  Form,\n  Field,\n  FieldProps,\n} from 'formik';\n\ninterface MyFormValues {\n  firstName: string;\n}\n\nexport const MyApp: React.FC<{}> = () => {\n  const initialValues: MyFormValues = { firstName: '' };\n  return (\n    <div>\n      <h1>My Example</h1>\n      <Formik\n        initialValues={initialValues}\n        onSubmit={(values, actions) => {\n          console.log({ values, actions });\n          alert(JSON.stringify(values, null, 2));\n          actions.setSubmitting(false);\n        }}\n      >\n        <Form>\n          <label htmlFor=\"firstName\">First Name</label>\n          <Field id=\"firstName\" name=\"firstName\" placeholder=\"First Name\" />\n          <button type=\"submit\">Submit</button>\n        </Form>\n      </Formik>\n    </div>\n  );\n};\n```\n\n#### `withFormik()`\n\n```tsx\nimport React from 'react';\nimport * as Yup from 'yup';\nimport { withFormik, FormikProps, FormikErrors, Form, Field } from 'formik';\n\n// Shape of form values\ninterface FormValues {\n  email: string;\n  password: string;\n}\n\ninterface OtherProps {\n  message: string;\n}\n\n// Aside: You may see InjectedFormikProps<OtherProps, FormValues> instead of what comes below in older code.. InjectedFormikProps was artifact of when Formik only exported a HoC. It is also less flexible as it MUST wrap all props (it passes them through).\nconst InnerForm = (props: OtherProps & FormikProps<FormValues>) => {\n  const { touched, errors, isSubmitting, message } = props;\n  return (\n    <Form>\n      <h1>{message}</h1>\n      <Field type=\"email\" name=\"email\" />\n      {touched.email && errors.email && <div>{errors.email}</div>}\n\n      <Field type=\"password\" name=\"password\" />\n      {touched.password && errors.password && <div>{errors.password}</div>}\n\n      <button type=\"submit\" disabled={isSubmitting}>\n        Submit\n      </button>\n    </Form>\n  );\n};\n\n// The type of props MyForm receives\ninterface MyFormProps {\n  initialEmail?: string;\n  message: string; // if this passed all the way through you might do this or make a union type\n}\n\n// Wrap our form with the withFormik HoC\nconst MyForm = withFormik<MyFormProps, FormValues>({\n  // Transform outer props into form values\n  mapPropsToValues: props => {\n    return {\n      email: props.initialEmail || '',\n      password: '',\n    };\n  },\n\n  // Add a custom validation function (this can be async too!)\n  validate: (values: FormValues) => {\n    let errors: FormikErrors<FormValues> = {};\n    if (!values.email) {\n      errors.email = 'Required';\n    } else if (!isValidEmail(values.email)) {\n      errors.email = 'Invalid email address';\n    }\n    return errors;\n  },\n\n  handleSubmit: values => {\n    // do submitting things\n  },\n})(InnerForm);\n\n// Use <MyForm /> wherevs\nconst Basic = () => (\n  <div>\n    <h1>My App</h1>\n    <p>This can be anywhere in your application</p>\n    <MyForm message=\"Sign up\" />\n  </div>\n);\n\nexport default Basic;\n```\n"
  },
  {
    "path": "docs/guides/validation.md",
    "content": "---\nid: validation\ntitle: Validation\n---\n\nFormik is designed to manage forms with complex validation with ease. Formik supports synchronous and asynchronous\nform-level and field-level validation. Furthermore, it comes with baked-in support for schema-based form-level validation through Yup. This guide will describe the ins and outs of all of the above.\n\n## Flavors of Validation\n\n### Form-level Validation\n\nForm-level validation is useful because you have complete access to all of your form's `values` and props whenever the function runs, so you can validate dependent fields at the same time.\n\nThere are 2 ways to do form-level validation with Formik:\n\n- `<Formik validate>` and `withFormik({ validate: ... })`\n- `<Formik validationSchema>` and `withFormik({ validationSchema: ... })`\n\n#### `validate`\n\n`<Formik>` and `withFormik()` take a prop/option called `validate` that accepts either a synchronous or asynchronous function.\n\n```js\n// Synchronous validation\nconst validate = (values, props /* only available when using withFormik */) => {\n  const errors = {};\n\n  if (!values.email) {\n    errors.email = 'Required';\n  } else if (!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$/i.test(values.email)) {\n    errors.email = 'Invalid email address';\n  }\n\n  //...\n\n  return errors;\n};\n\n// Async Validation\nconst sleep = ms => new Promise(resolve => setTimeout(resolve, ms));\n\nconst validate = (values, props /* only available when using withFormik */) => {\n  return sleep(2000).then(() => {\n    const errors = {};\n    if (['admin', 'null', 'god'].includes(values.username)) {\n      errors.username = 'Nice try';\n    }\n    // ...\n    return errors;\n  });\n};\n```\n\nFor more information about `<Formik validate>`, see the API reference.\n\n#### `validationSchema`\n\nAs you can see above, validation is left up to you. Feel free to write your own\nvalidators or use a 3rd party library. At The Palmer Group, we use\n[Yup](https://github.com/jquense/yup) for object schema validation. It has an\nAPI that's pretty similar to [Joi](https://github.com/hapijs/joi) and\n[React PropTypes](https://github.com/facebook/prop-types) but is small enough\nfor the browser and fast enough for runtime usage. Because we ❤️ Yup sooo\nmuch, Formik has a special config option / prop for Yup object schemas called `validationSchema` which will automatically transform Yup's validation errors into a pretty object whose keys match `values` and `touched`. This symmetry makes it easy to manage business logic around error messages.\n\nTo add Yup to your project, install it from NPM.\n\n```sh\nnpm install yup --save\n```\n\n```jsx\nimport React from 'react';\nimport { Formik, Form, Field } from 'formik';\nimport * as Yup from 'yup';\n\nconst SignupSchema = Yup.object().shape({\n  firstName: Yup.string()\n    .min(2, 'Too Short!')\n    .max(50, 'Too Long!')\n    .required('Required'),\n  lastName: Yup.string()\n    .min(2, 'Too Short!')\n    .max(50, 'Too Long!')\n    .required('Required'),\n  email: Yup.string().email('Invalid email').required('Required'),\n});\n\nexport const ValidationSchemaExample = () => (\n  <div>\n    <h1>Signup</h1>\n    <Formik\n      initialValues={{\n        firstName: '',\n        lastName: '',\n        email: '',\n      }}\n      validationSchema={SignupSchema}\n      onSubmit={values => {\n        // same shape as initial values\n        console.log(values);\n      }}\n    >\n      {({ errors, touched }) => (\n        <Form>\n          <Field name=\"firstName\" />\n          {errors.firstName && touched.firstName ? (\n            <div>{errors.firstName}</div>\n          ) : null}\n          <Field name=\"lastName\" />\n          {errors.lastName && touched.lastName ? (\n            <div>{errors.lastName}</div>\n          ) : null}\n          <Field name=\"email\" type=\"email\" />\n          {errors.email && touched.email ? <div>{errors.email}</div> : null}\n          <button type=\"submit\">Submit</button>\n        </Form>\n      )}\n    </Formik>\n  </div>\n);\n```\n\nFor more information about `<Formik validationSchema>`, see the API reference.\n\n### Field-level Validation\n\n#### `validate`\n\nFormik supports field-level validation via the `validate` prop of `<Field>`/`<FastField>` components or `useField` hook. This function can be synchronous or asynchronous (return a Promise). It will run after any `onChange` and `onBlur` by default. This behavior can be altered at the top level `<Formik/>` component using the `validateOnChange` and `validateOnBlur` props respectively. In addition to change/blur, all field-level validations are run at the beginning of a submission attempt and then the results are deeply merged with any top-level validation results.\n\n> Note: The `<Field>/<FastField>` components' `validate` function will only be executed on mounted fields. That is to say, if any of your fields unmount during the flow of your form (e.g. Material-UI's `<Tabs>` unmounts the previous `<Tab>` your user was on), those fields will not be validated during form validation/submission.\n\n```jsx\nimport React from 'react';\nimport { Formik, Form, Field } from 'formik';\n\nfunction validateEmail(value) {\n  let error;\n  if (!value) {\n    error = 'Required';\n  } else if (!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$/i.test(value)) {\n    error = 'Invalid email address';\n  }\n  return error;\n}\n\nfunction validateUsername(value) {\n  let error;\n  if (value === 'admin') {\n    error = 'Nice try!';\n  }\n  return error;\n}\n\nexport const FieldLevelValidationExample = () => (\n  <div>\n    <h1>Signup</h1>\n    <Formik\n      initialValues={{\n        username: '',\n        email: '',\n      }}\n      onSubmit={values => {\n        // same shape as initial values\n        console.log(values);\n      }}\n    >\n      {({ errors, touched, isValidating }) => (\n        <Form>\n          <Field name=\"email\" validate={validateEmail} />\n          {errors.email && touched.email && <div>{errors.email}</div>}\n\n          <Field name=\"username\" validate={validateUsername} />\n          {errors.username && touched.username && <div>{errors.username}</div>}\n\n          <button type=\"submit\">Submit</button>\n        </Form>\n      )}\n    </Formik>\n  </div>\n);\n```\n\n### Manually Triggering Validation\n\nYou can manually trigger both form-level and field-level validation with Formik using the `validateForm` and `validateField` methods respectively.\n\n```jsx\nimport React from 'react';\nimport { Formik, Form, Field } from 'formik';\n\nfunction validateEmail(value) {\n  let error;\n  if (!value) {\n    error = 'Required';\n  } else if (!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$/i.test(value)) {\n    error = 'Invalid email address';\n  }\n  return error;\n}\n\nfunction validateUsername(value) {\n  let error;\n  if (value === 'admin') {\n    error = 'Nice try!';\n  }\n  return error;\n}\n\nexport const FieldLevelValidationExample = () => (\n  <div>\n    <h1>Signup</h1>\n    <Formik\n      initialValues={{\n        username: '',\n        email: '',\n      }}\n      onSubmit={values => {\n        // same shape as initial values\n        console.log(values);\n      }}\n    >\n      {({ errors, touched, validateField, validateForm }) => (\n        <Form>\n          <Field name=\"email\" validate={validateEmail} />\n          {errors.email && touched.email && <div>{errors.email}</div>}\n\n          <Field name=\"username\" validate={validateUsername} />\n          {errors.username && touched.username && <div>{errors.username}</div>}\n          {/** Trigger field-level validation\n           imperatively */}\n          <button type=\"button\" onClick={() => validateField('username')}>\n            Check Username\n          </button>\n          {/** Trigger form-level validation\n           imperatively */}\n          <button\n            type=\"button\"\n            onClick={() => validateForm().then(() => console.log('blah'))}\n          >\n            Validate All\n          </button>\n          <button type=\"submit\">Submit</button>\n        </Form>\n      )}\n    </Formik>\n  </div>\n);\n```\n\n## When Does Validation Run?\n\nYou can control when Formik runs validation by changing the values of `<Formik validateOnChange>` and/or `<Formik validateOnBlur>` props depending on your needs. By default, Formik will run validation methods as follows:\n\n**After \"change\" events/methods** (things that update`values`)\n\n- `handleChange`\n- `setFieldValue`\n- `setValues`\n\n**After \"blur\" events/methods** (things that update `touched`)\n\n- `handleBlur`\n- `setTouched`\n- `setFieldTouched`\n\n**Whenever submission is attempted**\n\n- `handleSubmit`\n- `submitForm`\n\nThere are also imperative helper methods provided to you via Formik's render/injected props which you can use to imperatively call validation.\n\n- `validateForm`\n- `validateField`\n\n## Displaying Error Messages\n\nError messages are dependent on the form's validation. If an error exists, and the validation function produces an error object (as it should) with a matching shape to our values/initialValues, dependent field errors can be accessed from the errors object.\n\n```js\nimport React from 'react';\nimport { Formik, Form, Field } from 'formik';\nimport * as Yup from 'yup';\n\nconst DisplayingErrorMessagesSchema = Yup.object().shape({\n  username: Yup.string()\n    .min(2, 'Too Short!')\n    .max(50, 'Too Long!')\n    .required('Required'),\n  email: Yup.string().email('Invalid email').required('Required'),\n});\n\nexport const DisplayingErrorMessagesExample = () => (\n  <div>\n    <h1>Displaying Error Messages</h1>\n    <Formik\n      initialValues={{\n        username: '',\n        email: '',\n      }}\n      validationSchema={DisplayingErrorMessagesSchema}\n      onSubmit={values => {\n        // same shape as initial values\n        console.log(values);\n      }}\n    >\n      {({ errors, touched }) => (\n        <Form>\n          <Field name=\"username\" />\n          {/* If this field has been touched, and it contains an error, display it\n           */}\n          {touched.username && errors.username && <div>{errors.username}</div>}\n          <Field name=\"email\" />\n          {/* If this field has been touched, and it contains an error, display\n          it */}\n          {touched.email && errors.email && <div>{errors.email}</div>}\n          <button type=\"submit\">Submit</button>\n        </Form>\n      )}\n    </Formik>\n  </div>\n);\n```\n\n> The [ErrorMessage](../api/errormessage.md) component can also be used to display error messages.\n\n## Frequently Asked Questions\n\n<details>\n<summary>How do I determine if my form is validating?</summary>\n\nIf `isValidating` prop is `true`\n\n</details>\n\n<details>\n<summary>Can I return `null` as an error message?</summary>\n\nNo. Use `undefined` instead. Formik uses `undefined` to represent empty states. If you use `null`, several parts of Formik's computed props (e.g. `isValid` for example), will not work as expected.\n\n</details>\n\n<details>\n<summary>How do I test validation?</summary>\n\nFormik has extensive unit tests for Yup validation so you do not need to test that. However, if you are rolling your own validation functions, you should simply unit test those. If you do need to test Formik's execution you should use the imperative `validateForm` and `validateField` methods respectively.\n\n</details>\n"
  },
  {
    "path": "docs/manifest.json",
    "content": "{\n  \"routes\": [\n    {\n      \"title\": \"Documentation\",\n      \"heading\": true,\n      \"routes\": [\n        {\n          \"title\": \"Getting Started\",\n          \"path\": \"/docs/overview.md\"\n        },\n        {\n          \"title\": \"Tutorial\",\n          \"path\": \"/docs/tutorial.md\"\n        },\n        {\n          \"title\": \"Resources\",\n          \"path\": \"/docs/resources.md\"\n        },\n        {\n          \"title\": \"3rd-Party Bindings\",\n          \"path\": \"/docs/3rd-party-bindings.md\"\n        },\n        {\n          \"title\": \"Migrating from v1.x to v2.x\",\n          \"path\": \"/docs/migrating-v2.md\"\n        },\n        {\n          \"title\": \"Guides\",\n          \"open\": true,\n          \"routes\": [\n            {\n              \"title\": \"Validation\",\n              \"path\": \"/docs/guides/validation.md\"\n            },\n            {\n              \"title\": \"Arrays\",\n              \"path\": \"/docs/guides/arrays.md\"\n            },\n            {\n              \"title\": \"TypeScript\",\n              \"path\": \"/docs/guides/typescript.md\"\n            },\n            {\n              \"title\": \"React Native\",\n              \"path\": \"/docs/guides/react-native.md\"\n            },\n            {\n              \"title\": \"Form Submission\",\n              \"path\": \"/docs/guides/form-submission.md\"\n            }\n          ]\n        },\n        {\n          \"title\": \"Examples\",\n          \"open\": true,\n          \"routes\": [\n            {\n              \"title\": \"Basic\",\n              \"path\": \"/docs/examples/basic.md\"\n            },\n            {\n              \"title\": \"TypeScript\",\n              \"path\": \"/docs/examples/typescript.md\"\n            },\n            {\n              \"title\": \"Async Submission\",\n              \"path\": \"/docs/examples/async-submission.md\"\n            },\n\n            {\n              \"title\": \"Checkboxes\",\n              \"path\": \"/docs/examples/checkboxes.md\"\n            },\n            {\n              \"title\": \"Radio Group\",\n              \"path\": \"/docs/examples/radio-group.md\"\n            },\n            {\n              \"title\": \"Dependent Fields\",\n              \"path\": \"/docs/examples/dependent-fields.md\"\n            },\n            {\n              \"title\": \"Dependent Fields with Async API Request\",\n              \"path\": \"/docs/examples/dependent-fields-async-api-request.md\"\n            },\n            {\n              \"title\": \"Arrays and Lists\",\n              \"path\": \"/docs/examples/field-arrays.md\"\n            },\n            {\n              \"title\": \"Instant Feedback\",\n              \"path\": \"/docs/examples/instant-feedback.md\"\n            },\n            {\n              \"title\": \"Material UI\",\n              \"path\": \"/docs/examples/with-material-ui.md\"\n            },\n            {\n              \"title\": \"More Examples\",\n              \"path\": \"/docs/examples/more-examples.md\"\n            }\n          ]\n        }\n      ]\n    },\n\n    {\n      \"title\": \"API Reference\",\n      \"heading\": true,\n      \"routes\": [\n        {\n          \"title\": \"connect()\",\n          \"path\": \"/docs/api/connect.md\"\n        },\n        {\n          \"title\": \"<ErrorMessage />\",\n          \"path\": \"/docs/api/errormessage.md\"\n        },\n        {\n          \"title\": \"<FastField />\",\n          \"path\": \"/docs/api/fastfield.md\"\n        },\n        {\n          \"title\": \"<Field />\",\n          \"path\": \"/docs/api/field.md\"\n        },\n        {\n          \"title\": \"<FieldArray />\",\n          \"path\": \"/docs/api/fieldarray.md\"\n        },\n        {\n          \"title\": \"<Form />\",\n          \"path\": \"/docs/api/form.md\"\n        },\n        {\n          \"title\": \"<Formik />\",\n          \"path\": \"/docs/api/formik.md\"\n        },\n        {\n          \"title\": \"useField()\",\n          \"path\": \"/docs/api/useField.md\"\n        },\n        {\n          \"title\": \"useFormik()\",\n          \"path\": \"/docs/api/useFormik.md\"\n        },\n        {\n          \"title\": \"useFormikContext()\",\n          \"path\": \"/docs/api/useFormikContext.md\"\n        },\n        {\n          \"title\": \"withFormik()\",\n          \"path\": \"/docs/api/withFormik.md\"\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "docs/migrating-v2.md",
    "content": "---\nid: migrating-v2\ntitle: Migrating from v1.x to v2.x\ndescription: How to migrate from Formik v1 to v2\n---\n\n## Breaking Changes\n\n### Minimum Requirements\n\n- Since Formik 2 is built on top of React Hooks, you must be on React 16.8.x or higher\n- Since Formik 2 uses the `unknown` type, you must be on TypeScript 3.0 or higher (if you use TypeScript)\n\n**There are a few breaking changes in Formik 2.x.** Luckily, these probably won't impact many people:\n\n### `resetForm`\n\nWith Formik 2, we introduced the new props for more initial state: `initialErrors`, `initialTouched`, `initialStatus`. Therefore, `resetForm`'s signature has changed. Instead of optionally accepting just the next initial values of the form. It now optionally accepts the partial next initial state of Formik.\n\n**v1**\n\n```jsx\n// Reset to `initialValues`\nformik.resetForm();\n// Reset form and set the next `initialValues` of the form\nformik.resetForm({ name: '', email: '' });\n```\n\n**v2**\n\n```jsx\n// Reset the form. This will set the next initial state of\n// Formik to the `initialValues`, `initialErrors`, `initialTouched`,\n// `initialStatus` props.\nformik.resetForm();\n\n// Reset the form back to `initialXXXX` but change next\n// `initialValues` to a custom value\nformik.resetForm({\n  values: { name: 'Custom initial values', email: '' },\n});\n\n// Reset form back to `initialXXXX`, but change next `initialValues`\n// and `initialErrors` of the form\nformik.resetForm({\n  values: { name: '', email: '' },\n  errors: { name: 'Something special' },\n});\n\n// Reset form back to `initialXXXX`, but change next `initialStatus` to 'Foo'\nformik.resetForm({\n  status: 'Foo',\n});\n```\n\n### `setError`\n\nThis method has been deprecated for a while with a warning in v1.x releases. It's fully removed in v2. Please use Formik's `setStatus(status)` instead. It works identically. Note: this is/was not `setErrors` (plural) which is still around.\n\n### `validate`\n\nAs you may know, you can return a Promise of a validation error from `validate`. In 1.x, it didn't matter if this promise is resolved or rejected as in both cases the payload of the promise was interpreted as the validation error. In 2.x, rejection will be interpreted as an actual exception and it won't update the form error state. Any validation function that returns a rejected promise of errors needs to be adjusted to return a resolved promise of errors instead.\n\n### `ref`\n\nCurrently, you can't attach a ref to Formik using the `ref` prop. However, you still can get around this issue using the prop `innerRef`. We have some WIP [#2208](https://github.com/jaredpalmer/formik/issues/2208) to instead use `React.forwardRef`.\n\n### `isValid`\n\nThis property does not take the value of `dirty` into account anymore. This means that if you want to disable a submit button when the form is not `dirty` (i.e. on first render and when values are unchanged), you have to explicitly check for it.\n\n```tsx\n<button disabled={!isValid || !dirty} type=\"submit\">\n  Submit\n</button>\n```\n\n### Typescript changes\n\n#### `FormikActions`\n\n**`FormikActions` has been renamed to `FormikHelpers`** It should be a straightforward change to import or alias the type\n\n**v1**\n\n```tsx\nimport { FormikActions } from 'formik';\n```\n\n**v2**\n\n```tsx\nimport { FormikHelpers as FormikActions } from 'formik';\n```\n\n#### `FieldProps`\n\n**`FieldProps` now accepts two generic type parameters.** Both parameters are optional, but `FormValues` has been moved from the first to the second parameter.\n\n**v1**\n\n```tsx\ntype Props = FieldProps<FormValues>;\n```\n\n**v2**\n\n```tsx\ntype Props = FieldProps<FieldValue, FormValues>;\n```\n\n## What's New?\n\n### Checkboxes and Select multiple\n\nSimilarly to Angular, Vue, or Svelte, Formik 2 \"fixes\" React checkboxes and multi-selects with built-in array binding and boolean behavior. This was one of the most confusing things for people in Formik 1.x.\n\n```jsx\nimport React from 'react';\nimport { Formik, Field, Form } from 'formik';\nimport { Debug } from './Debug';\n\nconst sleep = ms => new Promise(resolve => setTimeout(resolve, ms));\n\nconst CheckboxExample = () => (\n  <div>\n    <h1>Checkboxes</h1>\n    <p>\n      This example demonstrates how to properly create checkboxes with Formik.\n    </p>\n    <Formik\n      initialValues={{\n        isAwesome: false,\n        terms: false,\n        newsletter: false,\n        jobType: ['designer'],\n        location: [],\n      }}\n      onSubmit={async values => {\n        await sleep(1000);\n        alert(JSON.stringify(values, null, 2));\n      }}\n    >\n      {({ isSubmitting, getFieldProps, handleChange, handleBlur, values }) => (\n        <Form>\n          {/* \n            This first checkbox will result in a boolean value being stored.\n          */}\n          <div className=\"label\">Basic Info</div>\n          <label>\n            <Field type=\"checkbox\" name=\"isAwesome\" />\n            Are you awesome?\n          </label>\n          {/* \n            Multiple checkboxes with the same name attribute, but different\n            value attributes will be considered a \"checkbox group\". Formik will automagically\n            bind the checked values to a single array for your benefit. All the add and remove\n            logic will be taken care of for you.\n          */}\n          <div className=\"label\">\n            What best describes you? (check all that apply)\n          </div>\n          <label>\n            <Field type=\"checkbox\" name=\"jobType\" value=\"designer\" />\n            Designer\n          </label>\n          <label>\n            <Field type=\"checkbox\" name=\"jobType\" value=\"developer\" />\n            Developer\n          </label>\n          <label>\n            <Field type=\"checkbox\" name=\"jobType\" value=\"product\" />\n            Product Manager\n          </label>\n          {/*\n           You do not _need_ to use <Field>/useField to get this behavior, \n           using handleChange, handleBlur, and values works as well. \n          */}\n          <label>\n            <input\n              type=\"checkbox\"\n              name=\"jobType\"\n              value=\"founder\"\n              checked={values.jobType.includes('founder')}\n              onChange={handleChange}\n              onBlur={handleBlur}\n            />\n            CEO / Founder\n          </label>\n\n          {/* \n           The <select> element will also behave the same way if \n           you pass `multiple` prop to it. \n          */}\n          <label htmlFor=\"location\">Where do you work?</label>\n          <Field\n            component=\"select\"\n            id=\"location\"\n            name=\"location\"\n            multiple={true}\n          >\n            <option value=\"NY\">New York</option>\n            <option value=\"SF\">San Francisco</option>\n            <option value=\"CH\">Chicago</option>\n            <option value=\"OTHER\">Other</option>\n          </Field>\n          <label>\n            <Field type=\"checkbox\" name=\"terms\" />I accept the terms and\n            conditions.\n          </label>\n          {/* Here's how you can use a checkbox to show / hide another field */}\n          {!!values.terms ? (\n            <div>\n              <label>\n                <Field type=\"checkbox\" name=\"newsletter\" />\n                Send me the newsletter <em style={{ color: 'rebeccapurple' }}>\n                  (This is only shown if terms = true)\n                </em>\n              </label>\n            </div>\n          ) : null}\n          <button type=\"submit\" disabled={isSubmitting}>\n            Submit\n          </button>\n          <Debug />\n        </Form>\n      )}\n    </Formik>\n  </div>\n);\n\nexport default CheckboxExample;\n```\n\n### `useField()`\n\nJust what you think, it's like `<Field>`, but with a hook. See docs for usage.\n\n### `useFormikContext()`\n\nA hook that is equivalent to `connect()`.\n\n### `<Field as>`\n\n`<Field/>` now accepts a prop called `as` which will inject `onChange`, `onBlur`, `value` etc. directly through to the component or string. This is useful for folks using Emotion or Styled components as they no longer need to clean up `component`'s render props in a wrapped function.\n\n```jsx\n// <input className=\"form-input\" placeholder=\"Jane\"  />\n<Field name=\"firstName\" className=\"form-input\" placeholder=\"Jane\" />\n\n// <textarea className=\"form-textarea\"/></textarea>\n<Field name=\"message\" as=\"textarea\"  className=\"form-textarea\"/>\n\n// <select className=\"my-select\"/>\n<Field name=\"colors\" as=\"select\" className=\"my-select\">\n  <option value=\"red\">Red</option>\n  <option value=\"green\">Green</option>\n  <option value=\"blue\">Blue</option>\n</Field>\n\n// with styled-components/emotion\nconst MyStyledInput = styled.input`\n  padding: .5em;\n  border: 1px solid #eee;\n  /* ... */\n`\nconst MyStyledTextarea = MyStyledInput.withComponent('textarea');\n\n// <input className=\"czx_123\" placeholder=\"google.com\"  />\n<Field name=\"website\" as={MyStyledInput} placeholder=\"google.com\"/>\n\n// <textarea placeholder=\"Post a message...\" rows={5}></textarea>\n<Field name=\"message\" as={MyStyledTextArea} placeholder=\"Post a message..\" rows={4}/>\n```\n\n### `getFieldProps(nameOrProps)`\n\nThere are two useful additions to `FormikProps`, `getFieldProps` and `getFieldMeta`. These are Kent C. Dodds-esque prop getters that can be useful if you love prop drilling, are _not_ using the context-based API's, or if you are building a custom `useField`.\n\n```tsx\nexport interface FieldInputProps<Value> {\n  /** Value of the field */\n  value: Value;\n  /** Name of the field */\n  name: string;\n  /** Multiple select? */\n  multiple?: boolean;\n  /** Is the field checked? */\n  checked?: boolean;\n  /** Change event handler */\n  onChange: FormikHandlers['handleChange'];\n  /** Blur event handler */\n  onBlur: FormikHandlers['handleBlur'];\n}\n```\n\n### `getFieldMeta(name)`\n\nGiven a name it will return an object:\n\n```tsx\nexport interface FieldMetaProps<Value> {\n  /** Value of the field */\n  value: Value;\n  /** Error message of the field */\n  error?: string;\n  /** Has the field been visited? */\n  touched: boolean;\n  /** Initial value of the field */\n  initialValue?: Value;\n  /** Initial touched state of the field */\n  initialTouched: boolean;\n  /** Initial error message of the field */\n  initialError?: string;\n}\n```\n\n### Misc\n\n- `FormikContext` is now exported\n- `validateOnMount?: boolean = false`\n- `initialErrors`, `initialTouched`, `initialStatus` have been added\n\n## Deprecation Warnings\n\n### All `render` props have been deprecated with a console warning.\n\nFor `<Field>`, `<FastField>`, `<Formik>`,`<FieldArray>`, the `render` prop has been deprecated with a warning as it will be removed in future versions. Instead, use a child callback function. This deprecation is meant to parallel React Context Consumer's usage.\n\n```diff\n- <Field name=\"firstName\" render={props => ....} />\n+ <Field name=\"firstName\">{props => ... }</Field>\n```\n"
  },
  {
    "path": "docs/overview.md",
    "content": "---\nid: overview\ntitle: Overview\ndescription: Formik documentation, tutorial, guides, and examples\n---\n\nLet's face it, forms are really verbose in\n[React](https://github.com/facebook/react). To make matters worse, most form\nhelpers do wayyyy too much magic and often have a significant performance cost\nassociated with them. Formik is a small library that helps you with the 3 most\nannoying parts:\n\n1.  Getting values in and out of form state\n2.  Validation and error messages\n3.  Handling form submission\n\nBy colocating all of the above in one place, Formik will keep things\norganized--making testing, refactoring, and reasoning about your forms a breeze.\n\n## Motivation\n\nI ([@jaredpalmer](https://twitter.com/jaredpalmer)) wrote Formik while building a large internal administrative dashboard with\n[@eonwhite](https://twitter.com/eonwhite). With around ~30 unique forms, it\nquickly became obvious that we could benefit by standardizing not just our input\ncomponents but also the way in which data flowed through our forms.\n\n### Why not Redux-Form?\n\nBy now, you might be thinking, \"Why didn't you just use\n[Redux-Form](https://github.com/erikras/redux-form)?\" Good question.\n\n1.  According to our prophet Dan Abramov,\n    [**form state is inherently ephemeral and local**, so tracking it in Redux (or any kind of Flux library) is unnecessary](https://github.com/reactjs/redux/issues/1287#issuecomment-175351978)\n2.  Redux-Form calls your entire top-level Redux reducer multiple times ON EVERY\n    SINGLE KEYSTROKE. This is fine for small apps, but as your Redux app grows,\n    input latency will continue to increase if you use Redux-Form.\n3.  Redux-Form is 22.5 kB minified gzipped (Formik is 12.7 kB)\n\n**My goal with Formik was to create a scalable, performant, form helper with a\nminimal API that does the really really annoying stuff, and leaves the rest up\nto you.**\n\n---\n\nMy talk at React Alicante goes much deeper into Formik's motivation and philosophy, introduces the library (by watching me build a mini version of it), and demos how to build a non-trivial form (with arrays, custom inputs, etc.) using the real thing.\n\n<div className=\"embed-responsive aspect-ratio-16-9\">\n  <iframe className=\"embed-responsive-item\" width=\"600\" height=\"315\" src=\"https://www.youtube.com/embed/oiNtnehlaTo\" frameBorder=\"0\" allow=\"autoplay; encrypted-media\" allowFullScreen title=\"Taming Forms in React - Jared Palmer\"></iframe>\n</div>\n\n## Influences\n\nFormik started by expanding on\n[this little higher order component](https://github.com/jxnblk/rebass-recomposed/blob/master/src/withForm.js)\nby [Brent Jackson](https://github.com/jxnblk), some naming conventions from\nRedux-Form, and (most recently) the render props approach popularized by\n[React-Motion](https://github.com/chenglou/react-motion) and\n[React-Router 4](https://github.com/ReactTraining/react-router). Whether you\nhave used any of the above or not, Formik only takes a few minutes to get\nstarted with.\n\n## Installation\n\nYou can install Formik with [NPM](https://npmjs.com),\n[Yarn](https://yarnpkg.com), or a good ol' `<script>` via\n[unpkg.com](https://unpkg.com).\n\n### NPM\n\n```sh\nnpm install formik --save\n```\n\nor\n\n```sh\nyarn add formik\n```\n\nFormik is compatible with React v15+ and works with ReactDOM and React Native.\n\nYou can also try before you buy with this\n**[demo of Formik on CodeSandbox.io](https://codesandbox.io/s/zKrK5YLDZ)**\n\n### In-browser Playgrounds\n\nYou can play with Formik in your web browser with these live online playgrounds.\n\n- [CodeSandbox (ReactDOM)](https://codesandbox.io/s/zKrK5YLDZ)\n- [Snack (React Native)](https://snack.expo.io/?dependencies=yup%2Cformik%2Creact-native-paper%2Cexpo-constants&sourceUrl=https%3A%2F%2Fgist.githubusercontent.com%2Fbrentvatne%2F700e1dbf9c3e88a11aef8e557627ce3f%2Fraw%2Feeee57721c9890c1212ac34a4c37707f6354f469%2FApp.js)\n\n## The Gist\n\nFormik keeps track of your form's state and then exposes it plus a few reusable\nmethods and event handlers (`handleChange`, `handleBlur`, and `handleSubmit`) to\nyour form via `props`. `handleChange` and `handleBlur` work exactly as\nexpected--they use a `name` or `id` attribute to figure out which field to\nupdate.\n\n```jsx\nimport React from 'react';\nimport { Formik } from 'formik';\n\nconst Basic = () => (\n  <div>\n    <h1>Anywhere in your app!</h1>\n    <Formik\n      initialValues={{ email: '', password: '' }}\n      validate={values => {\n        const errors = {};\n        if (!values.email) {\n          errors.email = 'Required';\n        } else if (\n          !/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}$/i.test(values.email)\n        ) {\n          errors.email = 'Invalid email address';\n        }\n        return errors;\n      }}\n      onSubmit={(values, { setSubmitting }) => {\n        setTimeout(() => {\n          alert(JSON.stringify(values, null, 2));\n          setSubmitting(false);\n        }, 400);\n      }}\n    >\n      {({\n        values,\n        errors,\n        touched,\n        handleChange,\n        handleBlur,\n        handleSubmit,\n        isSubmitting,\n        /* and other goodies */\n      }) => (\n        <form onSubmit={handleSubmit}>\n          <input\n            type=\"email\"\n            name=\"email\"\n            onChange={handleChange}\n            onBlur={handleBlur}\n            value={values.email}\n          />\n          {errors.email && touched.email && errors.email}\n          <input\n            type=\"password\"\n            name=\"password\"\n            onChange={handleChange}\n            onBlur={handleBlur}\n            value={values.password}\n          />\n          {errors.password && touched.password && errors.password}\n          <button type=\"submit\" disabled={isSubmitting}>\n            Submit\n          </button>\n        </form>\n      )}\n    </Formik>\n  </div>\n);\n\nexport default Basic;\n```\n\n### Reducing boilerplate\n\nThe code above is very explicit about exactly what Formik is doing. `onChange` -> `handleChange`, `onBlur` -> `handleBlur`, and so on. However, to save you time, Formik comes with a few extra components to make life easier and less verbose: `<Form />`, `<Field />`, and `<ErrorMessage />`. They use React context to hook into the parent `<Formik />` state/methods.\n\n```jsx\n// Render Prop\nimport React from 'react';\nimport { Formik, Form, Field, ErrorMessage } from 'formik';\n\nconst Basic = () => (\n  <div>\n    <h1>Any place in your app!</h1>\n    <Formik\n      initialValues={{ email: '', password: '' }}\n      validate={values => {\n        const errors = {};\n        if (!values.email) {\n          errors.email = 'Required';\n        } else if (\n          !/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}$/i.test(values.email)\n        ) {\n          errors.email = 'Invalid email address';\n        }\n        return errors;\n      }}\n      onSubmit={(values, { setSubmitting }) => {\n        setTimeout(() => {\n          alert(JSON.stringify(values, null, 2));\n          setSubmitting(false);\n        }, 400);\n      }}\n    >\n      {({ isSubmitting }) => (\n        <Form>\n          <Field type=\"email\" name=\"email\" />\n          <ErrorMessage name=\"email\" component=\"div\" />\n          <Field type=\"password\" name=\"password\" />\n          <ErrorMessage name=\"password\" component=\"div\" />\n          <button type=\"submit\" disabled={isSubmitting}>\n            Submit\n          </button>\n        </Form>\n      )}\n    </Formik>\n  </div>\n);\n\nexport default Basic;\n```\n\nRead below for more information...\n\n### Complementary Packages\n\nAs you can see above, validation is left up to you. Feel free to write your own\nvalidators or use a 3rd party library. Personally, I use\n[Yup](https://github.com/jquense/yup) for object schema validation. It has an\nAPI that's pretty similar to [Joi](https://github.com/hapijs/joi) /\n[React PropTypes](https://github.com/facebook/prop-types) but is small enough\nfor the browser and fast enough for runtime usage. Because I ❤️ Yup sooo\nmuch, Formik has a special config option / prop for Yup called\n[`validationSchema`](./api/formik.md#validationschema-schema----schema) which will\nautomatically transform Yup's validation errors into a pretty object whose keys\nmatch [`values`](./api/formik.md#values-field-string-any) and\n[`touched`](./api/formik.md#touched-field-string-boolean). Anyways, you can\ninstall Yup from npm...\n\n```\nnpm install yup --save\n```\n\nor\n\n```\nyarn add yup\n```\n"
  },
  {
    "path": "docs/resources.md",
    "content": "---\nid: resources\ntitle: Resources\ndescription: Formik conference talks, courses, videos, blog posts, learning resources.\n---\n\n## Conference Talks\n\n- [Taming Forms in React](https://jaredpalmer.com/blog/formik-taming-forms-in-react) by\n  [Jared Palmer](https://twitter.com/jaredpalmer) @ React Alicante - Sep 15, 2018\n- [An Introduction to Formik](https://youtu.be/-tDy7ds0dag?t=33s) by\n  [Jared Palmer](https://twitter.com/jaredpalmer) @ Spotify NYC - Aug 15, 2017\n\n## Community Videos\n\n- [Build and Validate Forms in React Native with Formik & Yup](https://www.reactnativeschool.com/build-and-validate-forms-with-formik-and-yup) (Series) by [Spencer Carli](https://twitter.com/spencer_carli) - December 14, 2018\n- [Form handling in React-Native with Formik and Yup](https://www.youtube.com/watch?v=EO08ydCCsOQ) by [Emanuel Quimper](https://twitter.com/QuimperEmanuel) - May 23, 2018\n- Building an Airbnb Clone Series by [Ben Awad](https://twitter.com/benawad)\n  - [Coding React Form with Formik and Ant Design - Part 3](https://www.youtube.com/watch?v=pbCrDBQFU_A&index=5&list=PLN3n1USn4xlnfJIQBa6bBjjiECnk6zL6s)\n  - [Form Validation in Formik with Yup - Part 4](https://www.youtube.com/watch?v=2CBnRDJ--aM&index=6&list=PLN3n1USn4xlnfJIQBa6bBjjiECnk6zL6s)\n  - [Simplifying a React form with the Formik Field Component - Part 6](https://www.youtube.com/watch?v=eMjju1nQ1F8)\n  - [How to use Formik with React Native - Part 17](https://www.youtube.com/watch?v=sBWtPEinWGA)\n  - [Multi Step Form in React with Formik - Part 36](https://www.youtube.com/watch?v=kKpoAhugjUc)\n  - [Custom Formik Fields and Fix Typescript Imports - Part 37](https://www.youtube.com/watch?v=Xwjg8meOglI)\n  - [Update Listing Form - Part 67](https://www.youtube.com/watch?v=PWgGkWwwHiE&index=69&list=PLN3n1USn4xlnfJIQBa6bBjjiECnk6zL6s)\n- [Better React Forms with Formik](https://www.youtube.com/watch?v=yNiJkjEwmpw) by [Andrew Mead](https://twitter.com/andrew_j_mead) - Nov 28, 2017\n- [Simple React Form with Formik](https://youtu.be/MuwQdUoNKzg) by [Ben Awad](https://twitter.com/benawad) - Nov 3, 2017\n- [Building an Add Channel Form with Formik](https://www.youtube.com/watch?v=anwo_i0wgNo) by [Ben Awad](https://twitter.com/benawad) - Oct 27, 2017\n\n## Community Articles / Tutorials\n\n- [Managing list of form fields with formik by creating Todo App](https://dev.to/mrmuhammadali/managing-list-of-form-fields-with-formik-through-example-7o5) by [Muhammad Ali](https://twitter.com/muhammadali_io) - Dec 31, 2019\n- [Accessible Formik forms](https://dev.to/ptrin/accessible-formik-forms-2gld) by [Perry Trinier](https://twitter.com/ptrin) - Oct 16, 2019\n- [Building dynamic forms with Formik with React and TypeScript](https://scottdj92.ghost.io/building-dynamic-forms-with-formik-with-react-and-typescript/) by [Scott Jones](https://twitter.com/sdj2964) - Sep 1, 2018\n- [Simple React form validation with Formik, Yup and/or Spected](https://itnext.io/simple-react-form-validation-with-formik-yup-and-or-spected-206ebe9e7dcc) by [Jakub Kočí](https://github.com/jakubkoci) - May 21, 2018\n- [ Formik —Handling files and reCaptcha](https://hackernoon.com/formik-handling-files-and-recaptcha-209cbeae10bc) by [João Miguel Cunha](https://twitter.com/lokuzt) - Dec 18, 2017\n- [Better React Forms with Formik](https://mead.io/formik/?utm_source=github&utm_campaign=formikrepo) by [Andrew Mead](https://twitter.com/andrew_j_mead) - Nov 28, 2017\n- [The Joy of Forms with React and Formik](https://keyholesoftware.com/2017/10/23/the-joy-of-forms-with-react-and-formik/) by [Mat Warger](https://twitter.com/mwarger) - Oct 23, 2017\n- [Painless React Forms with Formik](https://hackernoon.com/painless-react-forms-with-formik-e61b70473c60) by [João Miguel Cunha](https://twitter.com/lokuzt) - Sep 8, 2017\n- [Using Formik to Handle Forms in React](https://css-tricks.com/using-formik-to-handle-forms-in-react) by [Adebiyi Adedotun](https://twitter.com/AdebiyiAL) - Apr 28, 2020\n"
  },
  {
    "path": "docs/tutorial.md",
    "content": "---\nid: tutorial\ntitle: Tutorial\ndescription: Learn how to build forms in React with Formik.\n---\n\n## Before we start\n\nWelcome to the Formik tutorial. This will teach you everything you need to know to build simple and complex forms in React.\n\nIf you’re impatient and just want to start hacking on your machine locally, check out [the 60-second quickstart](./overview#installation).\n\n### What are we building?\n\nIn this tutorial, we’ll build a complex newsletter signup form with React and Formik.\n\nYou can see what we’ll be building here: [Final Result](https://codesandbox.io/s/formik-v2-tutorial-final-ge1pt). If the code doesn’t make sense to you, don’t worry! The goal of this tutorial is to help you understand Formik.\n\n### Prerequisites\n\nYou’ll need to have familiarity with HTML, CSS, [modern JavaScript](https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript), and [React](https://reactjs.org) (and [React Hooks](https://reactjs.org/docs/hooks-intro.html)) to fully understand Formik and how it works. In this tutorial, we’re using [arrow functions](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions), [let](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let), [const](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/const), [spread syntax](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax), [destructuring](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment), [computed property names](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer#Computed_property_names), and [async/await](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function) . You can use the [Babel REPL](https://babeljs.io/repl/#?presets=react&code_lz=MYewdgzgLgBApgGzgWzmWBeGAeAFgRgD4AJRBEAGhgHcQAnBAEwEJsB6AwgbgChRJY_KAEMAlmDh0YWRiGABXVOgB0AczhQAokiVQAQgE8AkowAUAcjogQUcwEpeAJTjDgUACIB5ALLK6aRklTRBQ0KCohMQk6Bx4gA) to check what ES6 code compiles to.\n\n## Setup for the Tutorial\n\nThere are two ways to complete this tutorial: you can either write the code in your browser, or you can set up a local development environment on your computer.\n\n### Setup Option 1: Write Code in the Browser\n\nThis is the quickest way to get started!\n\nFirst, open this [Starter Code](https://codesandbox.io/s/formik-v2-tutorial-start-s04yr) in a new tab. The new tab should display an email address input, a submit button, and some React code. We’ll be editing the React code in this tutorial.\n\nSkip the second setup option, and go to the [Overview](#overview-what-is-formik) section to get an overview of Formik.\n\n### Setup Option 2: Local Development Environment\n\nThis is completely optional and not required for this tutorial!\n\n<details>\n\n<summary><b>Optional: Instructions for following along locally using your preferred text editor</b></summary>\n\nThis setup requires more work, but allows you to complete the tutorial using an editor of your choice. Here are the steps to follow:\n\n1. Make sure you have a recent version of [Node.js](https://nodejs.org/en/) installed.\n1. Follow the [installation instructions for Create React App](https://create-react-app.dev) to make a new project.\n\n```bash\nnpx create-react-app my-app\n```\n\n1. Install Formik\n\n```bash\nnpm i formik\n```\n\nOr\n\n```bash\nyarn add formik\n```\n\n1. Delete all files in the `src/` folder of the new project\n\n> Note:\n>\n> **Don’t delete the entire `src` folder, just the original source files inside it.** We’ll replace the default source files with examples for this project in the next step.\n\n```bash\ncd my-app\ncd src\n\n# If you’re using a Mac or Linux:\nrm -f *\n\n# Or, if you’re on Windows:\ndel *\n\n# Then, switch back to the project folder\ncd ..\n```\n\n5. Add a file named `styles.css` in the `src/` folder with [this CSS code](https://codesandbox.io/s/formik-v2-tutorial-start-s04yr?file=/src/styles.css).\n\n6. Add a file named `index.js` in the `src/` folder with [this JS code](https://codesandbox.io/s/formik-v2-tutorial-start-s04yr?file=/src/index.js:0-759).\n\nNow run `npm start` in the project folder and open `http://localhost:3000` in the browser. You should see an email input and a submit button.\n\nWe recommend following [these instructions](https://babeljs.io/docs/editors/) to configure syntax highlighting for your editor.\n\n</details>\n\n### Help, I’m Stuck!\n\nIf you get stuck, check out Formik’s [GitHub Discussions](https://github.com/formik/formik/discussions). In addition, the [Formium Community Discord Server](https://discord.gg/pJSg287) is a great way to get help quickly too. If you don’t receive an answer, or if you remain stuck, please file an issue, and we’ll help you out.\n\n## Overview: What is Formik?\n\nFormik is a small group of React components and hooks for building forms in React and React Native. It helps with the three most annoying parts:\n\n1.  Getting values in and out of form state\n2.  Validation and error messages\n3.  Handling form submission\n\nBy colocating all of the above in one place, Formik keeps things\norganized--making testing, refactoring, and reasoning about your forms a breeze.\n\n## The Basics\n\nWe’re going to start with the _most verbose_ way of using Formik. While this may seem a bit long-winded, it’s important to see how Formik builds on itself so you have a full grasp of what’s possible and a complete mental model of how it works.\n\n### A simple newsletter signup form\n\nImagine we want to add a newsletter signup form for a blog. To start, our form will have just one field named `email`. With Formik, this is just a few lines of code.\n\n```jsx\nimport React from 'react';\nimport { useFormik } from 'formik';\n\nconst SignupForm = () => {\n  // Pass the useFormik() hook initial form values and a submit function that will\n  // be called when the form is submitted\n  const formik = useFormik({\n    initialValues: {\n      email: '',\n    },\n    onSubmit: values => {\n      alert(JSON.stringify(values, null, 2));\n    },\n  });\n  return (\n    <form onSubmit={formik.handleSubmit}>\n      <label htmlFor=\"email\">Email Address</label>\n      <input\n        id=\"email\"\n        name=\"email\"\n        type=\"email\"\n        onChange={formik.handleChange}\n        value={formik.values.email}\n      />\n\n      <button type=\"submit\">Submit</button>\n    </form>\n  );\n};\n```\n\nWe pass our form’s `initialValues` and a submission function (`onSubmit`) to the `useFormik()` hook. The hook then returns to us a goodie bag of form state and helper methods in a variable we call `formik`. For now, the only helper methods we care about are as follows:\n\n- `handleSubmit`: A submission handler\n- `handleChange`: A change handler to pass to each `<input>`, `<select>`, or `<textarea>`\n- `values`: Our form’s current values\n\nAs you can see above, we pass each of these to their respective props...and that’s it! We can now have a working form powered by Formik. Instead of managing our form’s values on our own and writing our own custom event handlers for every single input, we can just use `useFormik()`.\n\nThis is pretty neat, but with just one single input, the benefits of using `useFormik()` are unclear. So let’s add two more inputs: one for the user’s first and last name, which we’ll store as `firstName` and `lastName` in the form.\n\n```jsx\nimport React from 'react';\nimport { useFormik } from 'formik';\n\nconst SignupForm = () => {\n  // Note that we have to initialize ALL of fields with values. These\n  // could come from props, but since we don’t want to prefill this form,\n  // we just use an empty string. If we don’t do this, React will yell\n  // at us.\n  const formik = useFormik({\n    initialValues: {\n      firstName: '',\n      lastName: '',\n      email: '',\n    },\n    onSubmit: values => {\n      alert(JSON.stringify(values, null, 2));\n    },\n  });\n  return (\n    <form onSubmit={formik.handleSubmit}>\n      <label htmlFor=\"firstName\">First Name</label>\n      <input\n        id=\"firstName\"\n        name=\"firstName\"\n        type=\"text\"\n        onChange={formik.handleChange}\n        value={formik.values.firstName}\n      />\n\n      <label htmlFor=\"lastName\">Last Name</label>\n      <input\n        id=\"lastName\"\n        name=\"lastName\"\n        type=\"text\"\n        onChange={formik.handleChange}\n        value={formik.values.lastName}\n      />\n\n      <label htmlFor=\"email\">Email Address</label>\n      <input\n        id=\"email\"\n        name=\"email\"\n        type=\"email\"\n        onChange={formik.handleChange}\n        value={formik.values.email}\n      />\n\n      <button type=\"submit\">Submit</button>\n    </form>\n  );\n};\n```\n\nIf you look carefully at our new code, you’ll notice some patterns and symmetry _forming_.\n\n1. We reuse the same exact change handler function `handleChange` for each HTML input\n2. We pass an `id` and `name` HTML attribute that _matches_ the property we defined in `initialValues`\n3. We access the field’s value using the same name (`email` -> `formik.values.email`)\n\nIf you’re familiar with building forms with plain React, you can think of Formik’s `handleChange` as working like this:\n\n```jsx\nconst [values, setValues] = React.useState({});\n\nconst handleChange = event => {\n  setValues(prevValues => ({\n    ...prevValues,\n    // we use the name to tell Formik which key of `values` to update\n    [event.target.name]: event.target.value\n  });\n}\n```\n\n## Validation\n\nWhile our contact form works, it’s not quite feature-complete; users can submit it, but it doesn’t tell them which (if any) fields are required.\n\nIf we’re okay with using the browser’s built-in HTML input validation, we could add a `required` prop to each of our inputs, specify minimum/maximum lengths (`maxlength` and `minlength`), and/or add a `pattern` prop for regex validation for each of these inputs. These are great if we can get away with them. However, HTML validation has its limitations. First, it only works in the browser! So this clearly is not viable for React Native. Second, it’s hard/impossible to show custom error messages to our user. Third, it’s very janky.\n\nAs mentioned earlier, Formik keeps track of not only your form’s `values`, but also its validation and error messages. To add validation with JS, let’s specify a custom validation function and pass it as `validate` to the `useFormik()` hook. If an error exists, this custom validation function should produce an `error` object with a matching shape to our `values`/`initialValues`. Again..._symmetry_...yes...\n\n```jsx\nimport React from 'react';\nimport { useFormik } from 'formik';\n\n// A custom validation function. This must return an object\n// which keys are symmetrical to our values/initialValues\nconst validate = values => {\n  const errors = {};\n  if (!values.firstName) {\n    errors.firstName = 'Required';\n  } else if (values.firstName.length > 15) {\n    errors.firstName = 'Must be 15 characters or less';\n  }\n\n  if (!values.lastName) {\n    errors.lastName = 'Required';\n  } else if (values.lastName.length > 20) {\n    errors.lastName = 'Must be 20 characters or less';\n  }\n\n  if (!values.email) {\n    errors.email = 'Required';\n  } else if (!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$/i.test(values.email)) {\n    errors.email = 'Invalid email address';\n  }\n\n  return errors;\n};\n\nconst SignupForm = () => {\n  // Pass the useFormik() hook initial form values, a validate function that will be called when\n  // form values change or fields are blurred, and a submit function that will\n  // be called when the form is submitted\n  const formik = useFormik({\n    initialValues: {\n      firstName: '',\n      lastName: '',\n      email: '',\n    },\n    validate,\n    onSubmit: values => {\n      alert(JSON.stringify(values, null, 2));\n    },\n  });\n  return (\n    <form onSubmit={formik.handleSubmit}>\n      <label htmlFor=\"firstName\">First Name</label>\n      <input\n        id=\"firstName\"\n        name=\"firstName\"\n        type=\"text\"\n        onChange={formik.handleChange}\n        value={formik.values.firstName}\n      />\n      {formik.errors.firstName ? <div>{formik.errors.firstName}</div> : null}\n\n      <label htmlFor=\"lastName\">Last Name</label>\n      <input\n        id=\"lastName\"\n        name=\"lastName\"\n        type=\"text\"\n        onChange={formik.handleChange}\n        value={formik.values.lastName}\n      />\n      {formik.errors.lastName ? <div>{formik.errors.lastName}</div> : null}\n\n      <label htmlFor=\"email\">Email Address</label>\n      <input\n        id=\"email\"\n        name=\"email\"\n        type=\"email\"\n        onChange={formik.handleChange}\n        value={formik.values.email}\n      />\n      {formik.errors.email ? <div>{formik.errors.email}</div> : null}\n\n      <button type=\"submit\">Submit</button>\n    </form>\n  );\n};\n```\n\n`formik.errors` is populated via the custom validation function. By default, Formik will validate after each keystroke (change event), each input’s [blur event](https://developer.mozilla.org/en-US/docs/Web/API/Element/blur_event), as well as prior to submission. The `onSubmit` function we passed to `useFormik()` will be executed only if there are no errors (i.e. if our `validate` function returns `{}`).\n\n## Visited fields\n\nWhile our form works, and our users see each error, it’s not a great user experience for them. Since our validation function runs on each keystroke against the _entire_ form’s `values`, our `errors` object contains _all_ validation errors at any given moment. In our component, we’re just checking if an error exists and then immediately showing it to the user. This is awkward since we’re going to show error messages for fields that the user hasn’t even visited yet. Most of the time, we only want to show a field’s error message _after_ our user is done typing in that field.\n\nLike `errors` and `values`, Formik keeps track of which fields have been visited. It stores this information in an object called `touched` that also mirrors the shape of `values`/`initialValues`. The keys of `touched` are the field names, and the values of `touched` are booleans `true`/`false`.\n\nTo take advantage of `touched`, we pass `formik.handleBlur` to each input’s `onBlur` prop. This function works similarly to `formik.handleChange` in that it uses the `name` attribute to figure out which field to update.\n\n```jsx\nimport React from 'react';\nimport { useFormik } from 'formik';\n\nconst validate = values => {\n  const errors = {};\n\n  if (!values.firstName) {\n    errors.firstName = 'Required';\n  } else if (values.firstName.length > 15) {\n    errors.firstName = 'Must be 15 characters or less';\n  }\n\n  if (!values.lastName) {\n    errors.lastName = 'Required';\n  } else if (values.lastName.length > 20) {\n    errors.lastName = 'Must be 20 characters or less';\n  }\n\n  if (!values.email) {\n    errors.email = 'Required';\n  } else if (!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$/i.test(values.email)) {\n    errors.email = 'Invalid email address';\n  }\n\n  return errors;\n};\n\nconst SignupForm = () => {\n  const formik = useFormik({\n    initialValues: {\n      firstName: '',\n      lastName: '',\n      email: '',\n    },\n    validate,\n    onSubmit: values => {\n      alert(JSON.stringify(values, null, 2));\n    },\n  });\n  return (\n    <form onSubmit={formik.handleSubmit}>\n      <label htmlFor=\"firstName\">First Name</label>\n      <input\n        id=\"firstName\"\n        name=\"firstName\"\n        type=\"text\"\n        onChange={formik.handleChange}\n        onBlur={formik.handleBlur}\n        value={formik.values.firstName}\n      />\n      {formik.errors.firstName ? <div>{formik.errors.firstName}</div> : null}\n\n      <label htmlFor=\"lastName\">Last Name</label>\n      <input\n        id=\"lastName\"\n        name=\"lastName\"\n        type=\"text\"\n        onChange={formik.handleChange}\n        onBlur={formik.handleBlur}\n        value={formik.values.lastName}\n      />\n      {formik.errors.lastName ? <div>{formik.errors.lastName}</div> : null}\n\n      <label htmlFor=\"email\">Email Address</label>\n      <input\n        id=\"email\"\n        name=\"email\"\n        type=\"email\"\n        onChange={formik.handleChange}\n        onBlur={formik.handleBlur}\n        value={formik.values.email}\n      />\n      {formik.errors.email ? <div>{formik.errors.email}</div> : null}\n\n      <button type=\"submit\">Submit</button>\n    </form>\n  );\n};\n```\n\nAlmost there! Now that we’re tracking `touched`, we can now change our error message render logic to _only_ show a given field’s error message if it exists _and_ if our user has visited that field.\n\n```jsx\nimport React from 'react';\nimport { useFormik } from 'formik';\n\nconst validate = values => {\n  const errors = {};\n\n  if (!values.firstName) {\n    errors.firstName = 'Required';\n  } else if (values.firstName.length > 15) {\n    errors.firstName = 'Must be 15 characters or less';\n  }\n\n  if (!values.lastName) {\n    errors.lastName = 'Required';\n  } else if (values.lastName.length > 20) {\n    errors.lastName = 'Must be 20 characters or less';\n  }\n\n  if (!values.email) {\n    errors.email = 'Required';\n  } else if (!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$/i.test(values.email)) {\n    errors.email = 'Invalid email address';\n  }\n\n  return errors;\n};\n\nconst SignupForm = () => {\n  const formik = useFormik({\n    initialValues: {\n      firstName: '',\n      lastName: '',\n      email: '',\n    },\n    validate,\n    onSubmit: values => {\n      alert(JSON.stringify(values, null, 2));\n    },\n  });\n  return (\n    <form onSubmit={formik.handleSubmit}>\n      <label htmlFor=\"firstName\">First Name</label>\n      <input\n        id=\"firstName\"\n        name=\"firstName\"\n        type=\"text\"\n        onChange={formik.handleChange}\n        onBlur={formik.handleBlur}\n        value={formik.values.firstName}\n      />\n      {formik.touched.firstName && formik.errors.firstName ? (\n        <div>{formik.errors.firstName}</div>\n      ) : null}\n\n      <label htmlFor=\"lastName\">Last Name</label>\n      <input\n        id=\"lastName\"\n        name=\"lastName\"\n        type=\"text\"\n        onChange={formik.handleChange}\n        onBlur={formik.handleBlur}\n        value={formik.values.lastName}\n      />\n      {formik.touched.lastName && formik.errors.lastName ? (\n        <div>{formik.errors.lastName}</div>\n      ) : null}\n\n      <label htmlFor=\"email\">Email Address</label>\n      <input\n        id=\"email\"\n        name=\"email\"\n        type=\"email\"\n        onChange={formik.handleChange}\n        onBlur={formik.handleBlur}\n        value={formik.values.email}\n      />\n      {formik.touched.email && formik.errors.email ? (\n        <div>{formik.errors.email}</div>\n      ) : null}\n\n      <button type=\"submit\">Submit</button>\n    </form>\n  );\n};\n```\n\n### Schema Validation with Yup\n\nAs you can see above, validation is left up to you. Feel free to write your own validators or use a 3rd-party helper library. Formik’s authors/a large portion of its users use [Jason Quense](https://github.com/jquense)’s library [Yup](https://github.com/jquense/yup) for object schema validation. Yup has an API that’s similar to [Joi](https://github.com/hapijs/joi) and [React PropTypes](https://github.com/facebook/prop-types), but is also small enough for the browser and fast enough for runtime usage. You can try it out here with this [REPL](https://runkit.com/jquense/yup).\n\nSince Formik authors/users _love_ Yup so much, Formik has a special configuration prop for Yup called `validationSchema` which will automatically transform Yup’s validation errors messages into a pretty object whose keys match `values`/`initialValues`/`touched` (just like any custom validation function would have to). Anyways, you can install Yup from NPM/yarn like so...\n\n```bash\nnpm install yup --save\n\n# or via yarn\n\nyarn add yup\n```\n\nTo see how Yup works, let’s get rid of our custom validation function `validate` and re-write our validation with Yup and `validationSchema`:\n\n```jsx\nimport React from 'react';\nimport { useFormik } from 'formik';\nimport * as Yup from 'yup';\n\nconst SignupForm = () => {\n  const formik = useFormik({\n    initialValues: {\n      firstName: '',\n      lastName: '',\n      email: '',\n    },\n    validationSchema: Yup.object({\n      firstName: Yup.string()\n        .max(15, 'Must be 15 characters or less')\n        .required('Required'),\n      lastName: Yup.string()\n        .max(20, 'Must be 20 characters or less')\n        .required('Required'),\n      email: Yup.string().email('Invalid email address').required('Required'),\n    }),\n    onSubmit: values => {\n      alert(JSON.stringify(values, null, 2));\n    },\n  });\n  return (\n    <form onSubmit={formik.handleSubmit}>\n      <label htmlFor=\"firstName\">First Name</label>\n      <input\n        id=\"firstName\"\n        name=\"firstName\"\n        type=\"text\"\n        onChange={formik.handleChange}\n        onBlur={formik.handleBlur}\n        value={formik.values.firstName}\n      />\n      {formik.touched.firstName && formik.errors.firstName ? (\n        <div>{formik.errors.firstName}</div>\n      ) : null}\n\n      <label htmlFor=\"lastName\">Last Name</label>\n      <input\n        id=\"lastName\"\n        name=\"lastName\"\n        type=\"text\"\n        onChange={formik.handleChange}\n        onBlur={formik.handleBlur}\n        value={formik.values.lastName}\n      />\n      {formik.touched.lastName && formik.errors.lastName ? (\n        <div>{formik.errors.lastName}</div>\n      ) : null}\n\n      <label htmlFor=\"email\">Email Address</label>\n      <input\n        id=\"email\"\n        name=\"email\"\n        type=\"email\"\n        onChange={formik.handleChange}\n        onBlur={formik.handleBlur}\n        value={formik.values.email}\n      />\n      {formik.touched.email && formik.errors.email ? (\n        <div>{formik.errors.email}</div>\n      ) : null}\n\n      <button type=\"submit\">Submit</button>\n    </form>\n  );\n};\n```\n\nAgain, Yup is 100% optional. However, we suggest giving it a try. As you can see above, we expressed the exact same validation function with just 10 lines of code instead of 30. One of Formik’s core design principles is to help you stay organized. Yup definitely helps a lot with this--schemas are extremely expressive, intuitive (since they mirror your values), and reusable. Whether or not you use Yup, we highly recommended you share commonly used validation methods across your application. This will ensure that common fields (e.g. email, street addresses, usernames, phone numbers, etc.) are validated consistently and result in a better user experience.\n\n## Reducing Boilerplate\n\n### `getFieldProps()`\n\nThe code above is very explicit about exactly what Formik is doing. `onChange` -> `handleChange`, `onBlur` -> `handleBlur`, and so on. However, to save you time, `useFormik()` returns a helper method called `formik.getFieldProps()` to make it faster to wire up inputs. Given some field-level info, it returns to you the exact group of `onChange`, `onBlur`, `value`, `checked` for a given field. You can then spread that on an `input`, `select`, or `textarea`.\n\n```jsx\nimport React from 'react';\nimport { useFormik } from 'formik';\nimport * as Yup from 'yup';\n\nconst SignupForm = () => {\n  const formik = useFormik({\n    initialValues: {\n      firstName: '',\n      lastName: '',\n      email: '',\n    },\n    validationSchema: Yup.object({\n      firstName: Yup.string()\n        .max(15, 'Must be 15 characters or less')\n        .required('Required'),\n      lastName: Yup.string()\n        .max(20, 'Must be 20 characters or less')\n        .required('Required'),\n      email: Yup.string().email('Invalid email address').required('Required'),\n    }),\n    onSubmit: values => {\n      alert(JSON.stringify(values, null, 2));\n    },\n  });\n  return (\n    <form onSubmit={formik.handleSubmit}>\n      <label htmlFor=\"firstName\">First Name</label>\n      <input\n        id=\"firstName\"\n        type=\"text\"\n        {...formik.getFieldProps('firstName')}\n      />\n      {formik.touched.firstName && formik.errors.firstName ? (\n        <div>{formik.errors.firstName}</div>\n      ) : null}\n\n      <label htmlFor=\"lastName\">Last Name</label>\n      <input id=\"lastName\" type=\"text\" {...formik.getFieldProps('lastName')} />\n      {formik.touched.lastName && formik.errors.lastName ? (\n        <div>{formik.errors.lastName}</div>\n      ) : null}\n\n      <label htmlFor=\"email\">Email Address</label>\n      <input id=\"email\" type=\"email\" {...formik.getFieldProps('email')} />\n      {formik.touched.email && formik.errors.email ? (\n        <div>{formik.errors.email}</div>\n      ) : null}\n\n      <button type=\"submit\">Submit</button>\n    </form>\n  );\n};\n```\n\n### Leveraging React Context\n\nOur code above is again very explicit about exactly what Formik is doing. `onChange` -> `handleChange`, `onBlur` -> `handleBlur`, and so on. However, we still have to manually pass each input this \"prop getter\" `getFieldProps()`. To save you even more time, Formik comes with [React Context](https://reactjs.org/docs/context.html)-powered API/components to make life easier and code less verbose: `<Formik />`, `<Form />`, `<Field />`, and `<ErrorMessage />`. More explicitly, they use React Context implicitly to connect with the parent `<Formik />` state/methods.\n\nSince these components use React Context, we need to render a [React Context Provider](https://reactjs.org/docs/context.html#contextprovider) that holds our form state and helpers in our tree. If you did this yourself, it would look like:\n\n```jsx\nimport React from 'react';\nimport { useFormik } from 'formik';\n\n// Create empty context\nconst FormikContext = React.createContext({});\n\n// Place all of what’s returned by useFormik into context\nexport const Formik = ({ children, ...props }) => {\n  const formikStateAndHelpers = useFormik(props);\n  return (\n    <FormikContext.Provider value={formikStateAndHelpers}>\n      {typeof children === 'function'\n        ? children(formikStateAndHelpers)\n        : children}\n    </FormikContext.Provider>\n  );\n};\n```\n\nLuckily, we’ve done this for you in a `<Formik>` component that works just like this.\n\nLet’s now swap out the `useFormik()` hook for Formik’s `<Formik>` component/render-prop. Since it’s a component, we’ll convert the object passed to `useFormik()` to JSX, with each key becoming a prop.\n\n```jsx\nimport React from 'react';\nimport { Formik } from 'formik';\nimport * as Yup from 'yup';\n\nconst SignupForm = () => {\n  return (\n    <Formik\n      initialValues={{ firstName: '', lastName: '', email: '' }}\n      validationSchema={Yup.object({\n        firstName: Yup.string()\n          .max(15, 'Must be 15 characters or less')\n          .required('Required'),\n        lastName: Yup.string()\n          .max(20, 'Must be 20 characters or less')\n          .required('Required'),\n        email: Yup.string().email('Invalid email address').required('Required'),\n      })}\n      onSubmit={(values, { setSubmitting }) => {\n        setTimeout(() => {\n          alert(JSON.stringify(values, null, 2));\n          setSubmitting(false);\n        }, 400);\n      }}\n    >\n      {formik => (\n        <form onSubmit={formik.handleSubmit}>\n          <label htmlFor=\"firstName\">First Name</label>\n          <input\n            id=\"firstName\"\n            type=\"text\"\n            {...formik.getFieldProps('firstName')}\n          />\n          {formik.touched.firstName && formik.errors.firstName ? (\n            <div>{formik.errors.firstName}</div>\n          ) : null}\n\n          <label htmlFor=\"lastName\">Last Name</label>\n          <input\n            id=\"lastName\"\n            type=\"text\"\n            {...formik.getFieldProps('lastName')}\n          />\n          {formik.touched.lastName && formik.errors.lastName ? (\n            <div>{formik.errors.lastName}</div>\n          ) : null}\n\n          <label htmlFor=\"email\">Email Address</label>\n          <input id=\"email\" type=\"email\" {...formik.getFieldProps('email')} />\n          {formik.touched.email && formik.errors.email ? (\n            <div>{formik.errors.email}</div>\n          ) : null}\n\n          <button type=\"submit\">Submit</button>\n        </form>\n      )}\n    </Formik>\n  );\n};\n```\n\nAs you can see above, we swapped out `useFormik()` hook and replaced it with the `<Formik>` component. The `<Formik>` component accepts a function as its children (a.k.a. a [render prop](https://reactjs.org/docs/render-props.html)). Its argument is the _exact_ same object returned by `useFormik()` (in fact, `<Formik>` calls `useFormik()` internally!). Thus, our form works the same as before, except now we can use new components to express ourselves in a more concise manner.\n\n```jsx\nimport React from 'react';\nimport { Formik, Field, Form, ErrorMessage } from 'formik';\nimport * as Yup from 'yup';\n\nconst SignupForm = () => {\n  return (\n    <Formik\n      initialValues={{ firstName: '', lastName: '', email: '' }}\n      validationSchema={Yup.object({\n        firstName: Yup.string()\n          .max(15, 'Must be 15 characters or less')\n          .required('Required'),\n        lastName: Yup.string()\n          .max(20, 'Must be 20 characters or less')\n          .required('Required'),\n        email: Yup.string().email('Invalid email address').required('Required'),\n      })}\n      onSubmit={(values, { setSubmitting }) => {\n        setTimeout(() => {\n          alert(JSON.stringify(values, null, 2));\n          setSubmitting(false);\n        }, 400);\n      }}\n    >\n      <Form>\n        <label htmlFor=\"firstName\">First Name</label>\n        <Field name=\"firstName\" type=\"text\" />\n        <ErrorMessage name=\"firstName\" />\n\n        <label htmlFor=\"lastName\">Last Name</label>\n        <Field name=\"lastName\" type=\"text\" />\n        <ErrorMessage name=\"lastName\" />\n\n        <label htmlFor=\"email\">Email Address</label>\n        <Field name=\"email\" type=\"email\" />\n        <ErrorMessage name=\"email\" />\n\n        <button type=\"submit\">Submit</button>\n      </Form>\n    </Formik>\n  );\n};\n```\n\nThe `<Field>` component by default will render an `<input>` component that, given a `name` prop, will implicitly grab the respective `onChange`, `onBlur`, `value` props and pass them to the element as well as any props you pass to it. However, since not everything is an input, `<Field>` also accepts a few other props to let you render whatever you want. Some examples..\n\n```jsx\n// <input className=\"form-input\" placeHolder=\"Jane\"  />\n<Field name=\"firstName\" className=\"form-input\" placeholder=\"Jane\" />\n\n// <textarea className=\"form-textarea\"/></textarea>\n<Field name=\"message\" as=\"textarea\" className=\"form-textarea\" />\n\n// <select className=\"my-select\"/>\n<Field name=\"colors\" as=\"select\" className=\"my-select\">\n  <option value=\"red\">Red</option>\n  <option value=\"green\">Green</option>\n  <option value=\"blue\">Blue</option>\n</Field>\n```\n\nReact is all about composition, and while we’ve cut down on a lot of the [prop-drilling](https://kentcdodds.com/blog/prop-drilling), we’re still repeating ourselves with a `label`, `<Field>`, and `<ErrorMessage>` for each of our inputs. We can do better with an abstraction! With Formik, you can and should build reusable input primitive components that you can share around your application. Turns out our `<Field>` render-prop component has a sister and her name is `useField` that’s going to do the same thing, but via React Hooks! Check this out...\n\n```jsx\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Formik, Form, useField } from 'formik';\nimport * as Yup from 'yup';\n\nconst MyTextInput = ({ label, ...props }) => {\n  // useField() returns [formik.getFieldProps(), formik.getFieldMeta()]\n  // which we can spread on <input>. We can use field meta to show an error\n  // message if the field is invalid and it has been touched (i.e. visited)\n  const [field, meta] = useField(props);\n  return (\n    <>\n      <label htmlFor={props.id || props.name}>{label}</label>\n      <input className=\"text-input\" {...field} {...props} />\n      {meta.touched && meta.error ? (\n        <div className=\"error\">{meta.error}</div>\n      ) : null}\n    </>\n  );\n};\n\nconst MyCheckbox = ({ children, ...props }) => {\n  // React treats radios and checkbox inputs differently from other input types: select and textarea.\n  // Formik does this too! When you specify `type` to useField(), it will\n  // return the correct bag of props for you -- a `checked` prop will be included\n  // in `field` alongside `name`, `value`, `onChange`, and `onBlur`\n  const [field, meta] = useField({ ...props, type: 'checkbox' });\n  return (\n    <div>\n      <label className=\"checkbox-input\">\n        <input type=\"checkbox\" {...field} {...props} />\n        {children}\n      </label>\n      {meta.touched && meta.error ? (\n        <div className=\"error\">{meta.error}</div>\n      ) : null}\n    </div>\n  );\n};\n\nconst MySelect = ({children, label, ...props }) => {\n  const [field, meta] = useField(props);\n  return (\n    <div>\n      <label htmlFor={props.id || props.name}>{label}</label>\n      <select {...field} {...props} />\n      {children}\n      {meta.touched && meta.error ? (\n        <div className=\"error\">{meta.error}</div>\n      ) : null}\n    </div>\n  );\n};\n\n// And now we can use these\nconst SignupForm = () => {\n  return (\n    <>\n      <h1>Subscribe!</h1>\n      <Formik\n        initialValues={{\n          firstName: '',\n          lastName: '',\n          email: '',\n          acceptedTerms: false, // added for our checkbox\n          jobType: '', // added for our select\n        }}\n        validationSchema={Yup.object({\n          firstName: Yup.string()\n            .max(15, 'Must be 15 characters or less')\n            .required('Required'),\n          lastName: Yup.string()\n            .max(20, 'Must be 20 characters or less')\n            .required('Required'),\n          email: Yup.string()\n            .email('Invalid email address')\n            .required('Required'),\n          acceptedTerms: Yup.boolean()\n            .required('Required')\n            .oneOf([true], 'You must accept the terms and conditions.'),\n          jobType: Yup.string()\n            .oneOf(\n              ['designer', 'development', 'product', 'other'],\n              'Invalid Job Type'\n            )\n            .required('Required'),\n        })}\n        onSubmit={(values, { setSubmitting }) => {\n          setTimeout(() => {\n            alert(JSON.stringify(values, null, 2));\n            setSubmitting(false);\n          }, 400);\n        }}\n      >\n        <Form>\n          <MyTextInput\n            label=\"First Name\"\n            name=\"firstName\"\n            type=\"text\"\n            placeholder=\"Jane\"\n          />\n\n          <MyTextInput\n            label=\"Last Name\"\n            name=\"lastName\"\n            type=\"text\"\n            placeholder=\"Doe\"\n          />\n\n          <MyTextInput\n            label=\"Email Address\"\n            name=\"email\"\n            type=\"email\"\n            placeholder=\"jane@formik.com\"\n          />\n\n          <MySelect label=\"Job Type\" name=\"jobType\">\n            <option value=\"\">Select a job type</option>\n            <option value=\"designer\">Designer</option>\n            <option value=\"development\">Developer</option>\n            <option value=\"product\">Product Manager</option>\n            <option value=\"other\">Other</option>\n          </MySelect>\n\n          <MyCheckbox name=\"acceptedTerms\">\n            I accept the terms and conditions\n          </MyCheckbox>\n\n          <button type=\"submit\">Submit</button>\n        </Form>\n      </Formik>\n    </>\n  );\n};\n```\n\nAs you can see above, `useField()` gives us the ability to connect any kind input of React component to Formik as if it were a `<Field>` + `<ErrorMessage>`. We can use it to build a group of reusable inputs that fit our needs.\n\n## Wrapping Up\n\nCongratulations! You’ve created a signup form with Formik that:\n\n- Has complex validation logic and rich error messages\n- Properly displays errors messages to the user at the correct time (after they have blurred a field)\n- Leverages your own custom input components you can use on other forms in your app\n\nNice work! We hope you now feel like you have a decent grasp on how Formik works.\n\nCheck out the final result here: [Final Result](https://codesandbox.io/s/formik-v2-tutorial-final-ge1pt).\n\nIf you have extra time or want to practice your new Formik skills, here are some ideas for improvements that you could make to the signup form which are listed in order of increasing difficulty:\n\n- Disable the submit button while the user has attempted to submit (hint: `formik.isSubmitting`)\n- Add a reset button with `formik.handleReset` or `<button type=\"reset\">`.\n- Pre-populate `initialValues` based on URL query string or props passed to `<SignupForm>`.\n- Change the input border color to red when a field has an error and isn’t focused\n- Add a shake animation to each field when it displays an error and has been visited\n- Persist form state to the browser’s [sessionStorage](https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage) so that form progress is kept in between page refreshes\n\nThroughout this tutorial, we touched on Formik concepts including form state, fields, validation, hooks, render props, and React context. For a more detailed explanation of each of these topics, check out the rest of the [documentation](./overview). To learn more about defining the components and hooks in the tutorial, check out the [API reference](./api/formik).\n"
  },
  {
    "path": "e2e/basic.test.ts",
    "content": "import { test, expect } from '@playwright/test';\n\ntest('should validate before submit', async ({ page }) => {\n  await page.goto('/basic');\n\n  // Submit the form\n  await page.click('button[type=submit]');\n\n  // Check that all fields are touched and error messages work\n  expect(await page.textContent('input[name=\"firstName\"] + p')).toContain(\n    'Required'\n  );\n  expect(await page.textContent('input[name=\"lastName\"] + p')).toContain(\n    'Required'\n  );\n  expect(await page.textContent('input[name=\"email\"] + p')).toContain(\n    'Required'\n  );\n\n  expect(await page.textContent('#renderCounter')).toContain('0');\n});\n\ntest('should validate show errors on change and blur', async ({ page }) => {\n  await page.goto('/sign-in');\n\n  await page.fill('input[name=\"username\"]', 'john');\n  await page.locator('input[name=\"username\"]').blur();\n  expect(\n    await page.locator('input[name=\"username\"] + p').textContent.length\n  ).toEqual(1);\n\n  await page.fill('input[name=\"password\"]', '123');\n  await page.locator('input[name=\"password\"]').blur();\n  expect(\n    await page.locator('input[name=\"password\"] + p').textContent.length\n  ).toEqual(1);\n\n  expect(await page.textContent('#error-log')).toContain('[]');\n});\n\ntest('should validate show errors on blur only', async ({ page }) => {\n  await page.goto('/sign-in?validateOnMount=false&validateOnChange=false');\n\n  await page.fill('input[name=\"username\"]', 'john');\n  await page.locator('input[name=\"username\"]').blur();\n  expect(\n    await page.locator('input[name=\"username\"] + p').textContent.length\n  ).toEqual(1);\n\n  await page.fill('input[name=\"password\"]', '123');\n  await page.locator('input[name=\"password\"]').blur();\n  expect(\n    await page.locator('input[name=\"password\"] + p').textContent.length\n  ).toEqual(1);\n\n  expect(await page.textContent('#error-log')).toContain(\n    JSON.stringify(\n      [\n        // It will quickly flash after `password` blur because `yup` schema\n        // validation is async.\n        { name: 'password', value: '123', error: 'Required' },\n      ],\n      null,\n      2\n    )\n  );\n});\n\ntest('should validate autofill', async ({ page }) => {\n  // React overrides `input.value` setters, so we have to call\n  // native input setter\n  // See: https://stackoverflow.com/a/46012210/1709679\n  const setInputValue = async (selector, value) => {\n    await page.$eval(selector, (el, value) => (el.value = value), value);\n    await page.dispatchEvent(selector, 'change');\n  };\n\n  await page.goto('/sign-in');\n\n  await setInputValue('input[name=\"username\"]', '123');\n  await setInputValue('input[name=\"password\"]', '123');\n\n  const buttonIsDisabled = await page.$eval(\n    'button',\n    button => button.disabled\n  );\n  expect(buttonIsDisabled).toBe(false);\n});\n"
  },
  {
    "path": "examples/AsyncValidation.js",
    "content": "import React from 'react';\nimport { Formik, Field, Form, ErrorMessage } from 'formik';\nimport { Debug } from './Debug';\n\n// Async Validation\nconst sleep = ms => new Promise(resolve => setTimeout(resolve, ms));\n\nconst validate = values => {\n  return sleep(300).then(() => {\n    const errors = {};\n\n    if (['admin', 'null', 'god'].includes(values.username)) {\n      errors.username = 'Nice try';\n    }\n\n    if (!values.username) {\n      errors.username = 'Required';\n    }\n\n    if (Object.keys(errors).length) {\n      throw errors;\n    }\n  });\n};\n\nconst Username = () => (\n  <div>\n    <h1>Pick a username</h1>\n    <Formik\n      initialValues={{\n        username: '',\n      }}\n      validate={validate}\n      onSubmit={values => {\n        sleep(500).then(() => {\n          alert(JSON.stringify(values, null, 2));\n        });\n      }}\n      render={({ errors, touched }) => (\n        <Form>\n          <label htmlFor=\"username\">Username</label>\n          <Field name=\"username\" type=\"text\" />\n          <ErrorMessage name=\"username\" />\n          <button type=\"submit\">Submit</button>\n          <Debug />\n        </Form>\n      )}\n    />\n  </div>\n);\n\nexport default Username;\n"
  },
  {
    "path": "examples/CombinedValidations.js",
    "content": "import React from 'react';\nimport { Formik, Field, Form, ErrorMessage } from 'formik';\nimport * as Yup from 'yup';\nimport { Debug } from './Debug';\n\nconst Schema = Yup.object().shape({\n  email: Yup.string().required('This field is required'),\n});\n\n// Async Validation\nconst sleep = ms => new Promise(resolve => setTimeout(resolve, ms));\n\nconst validate = values =>\n  sleep(300).then(() => {\n    return {\n      zip: 'This field is required',\n    };\n  });\n\nconst isRequired = message => value => (!!value ? undefined : message);\n\nconst FieldLevelValidation = () => (\n  <div>\n    <h1>Pick a username</h1>\n    <Formik\n      validationSchema={Schema}\n      validate={validate}\n      initialValues={{\n        username: '',\n        email: '',\n        zip: '',\n      }}\n      onSubmit={values => {\n        sleep(500).then(() => {\n          alert(JSON.stringify(values, null, 2));\n        });\n      }}\n      render={({\n        errors,\n        touched,\n        setFieldValue,\n        setFieldTouched,\n        validateField,\n        validateForm,\n      }) => (\n        <Form>\n          <label htmlFor=\"username\">Username</label>\n          <div>\n            <Field\n              name=\"username\"\n              validate={isRequired('This field is required')}\n              type=\"text\"\n              placeholder=\"username\"\n            />\n            <ErrorMessage name=\"username\" />\n          </div>\n          <br />\n          <div>\n            <Field\n              name=\"email\"\n              validate={isRequired('This field is required')}\n              type=\"text\"\n              placeholder=\"email\"\n            />\n            <ErrorMessage name=\"email\" />\n          </div>\n          <br />\n          <div>\n            <Field\n              name=\"zip\"\n              validate={isRequired('This field is required')}\n              type=\"text\"\n              placeholder=\"zip\"\n            />\n            <ErrorMessage name=\"zip\" />\n          </div>\n          <br />\n          <button type=\"submit\">Submit</button>\n          <Debug />\n        </Form>\n      )}\n    />\n  </div>\n);\n\nexport default FieldLevelValidation;\n"
  },
  {
    "path": "examples/CustomInputs.js",
    "content": "import React from 'react';\nimport { Formik, Field, Form, ErrorMessage } from 'formik';\nimport * as Yup from 'yup';\nimport { Debug } from './Debug';\n\n// By combining a vanilla <label> plus Formik's <Field> and <ErrorMessage>,\n// we can abstract a generic \"Fieldset\" component for most of our inputs.\nconst Fieldset = ({ name, label, ...rest }) => (\n  <React.Fragment>\n    <label htmlFor={name}>{label}</label>\n    <Field id={name} name={name} {...rest} />\n    <ErrorMessage name={name} />\n  </React.Fragment>\n);\n\nconst SignUp = () => (\n  <div>\n    <h1>Sign Up</h1>\n    <Formik\n      initialValues={{\n        email: '',\n        color: '',\n        animal: '',\n        website: '',\n      }}\n      validationSchema={Yup.object().shape({\n        email: Yup.string().email('Invalid email address').required('Required'),\n        color: Yup.string().required('Required'),\n        website: Yup.string().url('Invalid URL').required('Required'),\n        animal: Yup.string().required('Required'),\n      })}\n      onSubmit={values => {\n        setTimeout(() => {\n          alert(JSON.stringify(values, null, 2));\n        }, 500);\n      }}\n      render={({ isSubmitting, handleReset }) => (\n        <Form>\n          <Fieldset\n            name=\"email\"\n            type=\"email\"\n            label=\"Email\"\n            placeholder=\"jane@acme.com\"\n          />\n          <Fieldset name=\"color\" label=\"Favorite Color\" as=\"select\">\n            <option value=\"\">Select a Color</option>\n            <option value=\"red\">Red</option>\n            <option value=\"green\">Green</option>\n            <option value=\"blue\">Blue</option>\n          </Fieldset>\n\n          <Fieldset\n            name=\"website\"\n            type=\"url\"\n            label=\"Website\"\n            placeholder=\"https://example.com\"\n          />\n\n          <Fieldset name=\"animal\" as=\"select\" label=\"Favorite Animal\">\n            <option value=\"\">Select an animal</option>\n            <option value=\"tiger\">Tiger</option>\n            <option value=\"bear\">Bear</option>\n            <option value=\"shark\">Shark</option>\n          </Fieldset>\n\n          <button\n            type=\"reset\"\n            className=\"secondary\"\n            disabled={isSubmitting}\n            onClick={handleReset}\n          >\n            Reset\n          </button>\n\n          <button type=\"submit\">Submit</button>\n          <Debug />\n        </Form>\n      )}\n    />\n  </div>\n);\n\nexport default SignUp;\n"
  },
  {
    "path": "examples/DebouncedAutoSave.js",
    "content": "import React from 'react';\nimport { useFormikContext, Formik, Field, Form } from 'formik';\nimport { Debug } from './Debug';\nimport debounce from 'just-debounce-it';\n\nconst AutoSave = ({ debounceMs }) => {\n  const formik = useFormikContext();\n  const [lastSaved, setLastSaved] = React.useState(null);\n  const debouncedSubmit = React.useCallback(\n    debounce(\n      () =>\n        formik.submitForm().then(() => setLastSaved(new Date().toISOString())),\n      debounceMs\n    ),\n    [debounceMs, formik.submitForm]\n  );\n\n  React.useEffect(() => {\n    debouncedSubmit();\n  }, [debouncedSubmit, formik.values]);\n\n  return (\n    <>\n      {!!formik.isSubmitting\n        ? 'saving...'\n        : lastSaved !== null\n        ? `Last Saved: ${lastSaved}`\n        : null}\n    </>\n  );\n};\n\nconst AutoSavingForm = () => (\n  <div>\n    <Formik\n      initialValues={{\n        firstName: '',\n        lastName: '',\n        email: '',\n      }}\n      onSubmit={(values, { setSubmitting }) => {\n        return new Promise(resolve =>\n          setTimeout(() => {\n            console.log('submitted', JSON.stringify(values, null, 2));\n            setSubmitting(false);\n            resolve();\n          }, 1000)\n        );\n      }}\n      render={() => (\n        <Form>\n          <h1>\n            AutoSavingForm{' '}\n            <small style={{ color: 'gray', fontSize: 11 }}>\n              <AutoSave debounceMs={300} />\n            </small>\n          </h1>\n\n          <label htmlFor=\"firstName\">First Name</label>\n          <Field name=\"firstName\" placeholder=\"Jane\" />\n\n          <label htmlFor=\"lastName\">Last Name</label>\n          <Field name=\"lastName\" placeholder=\"Doe\" />\n\n          <label htmlFor=\"email\">Email</label>\n          <Field name=\"email\" placeholder=\"jane@acme.com\" type=\"email\" />\n          <button type=\"submit\">Submit</button>\n\n          <Debug />\n        </Form>\n      )}\n    />\n  </div>\n);\n\nexport default AutoSavingForm;\n"
  },
  {
    "path": "examples/Debug.js",
    "content": "import React from 'react';\nimport { FormikConsumer } from 'formik';\n\nexport const Debug = () => (\n  <div\n    style={{\n      margin: '3rem 1rem',\n      borderRadius: 4,\n      background: '#f6f8fa',\n      boxShadow: '0 0 1px  #eee inset',\n    }}\n  >\n    <div\n      style={{\n        textTransform: 'uppercase',\n        fontSize: 11,\n        borderTopLeftRadius: 4,\n        borderTopRightRadius: 4,\n        fontWeight: 500,\n        padding: '.5rem',\n        background: '#555',\n        color: '#fff',\n        letterSpacing: '1px',\n      }}\n    >\n      Formik State\n    </div>\n    <FormikConsumer>\n      {({ validationSchema, validate, onSubmit, ...rest }) => (\n        <pre\n          style={{\n            fontSize: '.85rem',\n            padding: '.25rem .5rem',\n            overflowX: 'scroll',\n          }}\n        >\n          {JSON.stringify(rest, null, 2)}\n        </pre>\n      )}\n    </FormikConsumer>\n  </div>\n);\n"
  },
  {
    "path": "examples/ErrorMessage.js",
    "content": "import React from 'react';\nimport { Formik, Field, Form, ErrorMessage } from 'formik';\nimport * as Yup from 'yup';\nimport { Debug } from './Debug';\n\n// While you can use any validation library (or write you own), Formik\n// comes with special support for Yup by @jquense. It has a builder API like\n// React PropTypes / Hapi.js's Joi. You can define these inline or, you may want\n// to keep them separate so you can reuse schemas (e.g. address) across your application.\nconst SignUpSchema = Yup.object().shape({\n  email: Yup.string().email('Invalid email address').required('Required'),\n  firstName: Yup.string()\n    .min(2, 'Must be longer than 2 characters')\n    .max(20, 'Nice try, nobody has a first name that long')\n    .required('Required'),\n  lastName: Yup.string()\n    .min(2, 'Must be longer than 2 characters')\n    .max(20, 'Nice try, nobody has a last name that long')\n    .required('Required'),\n});\n\n// <ErrorMessage /> will ONLY render when a field has an error and has been touched.\nconst SignUp = () => (\n  <div>\n    <h1>Sign up</h1>\n    <Formik\n      initialValues={{\n        email: '',\n        firstName: '',\n        lastName: '',\n      }}\n      validationSchema={SignUpSchema}\n      onSubmit={values => {\n        setTimeout(() => {\n          alert(JSON.stringify(values, null, 2));\n        }, 500);\n      }}\n      render={({ errors, touched }) => (\n        <Form>\n          <label htmlFor=\"firstName\">First Name</label>\n          <Field name=\"firstName\" placeholder=\"Jane\" type=\"text\" />\n          <ErrorMessage\n            name=\"firstName\"\n            component=\"div\"\n            className=\"field-error\"\n          />\n\n          <label htmlFor=\"lastName\">Last Name</label>\n          <Field name=\"lastName\" placeholder=\"Doe\" type=\"text\" />\n          <ErrorMessage name=\"firstName\">\n            {(msg /** this is the same as the above */) => (\n              <div className=\"field-error\">{msg}</div>\n            )}\n          </ErrorMessage>\n\n          <label htmlFor=\"email\">Email</label>\n          <Field name=\"email\" placeholder=\"jane@acme.com\" type=\"email\" />\n          {/* This will render a string */}\n          <ErrorMessage name=\"email\" className=\"field-error\" />\n\n          <button type=\"submit\">Submit</button>\n          <Debug />\n        </Form>\n      )}\n    />\n  </div>\n);\n\nexport default SignUp;\n"
  },
  {
    "path": "examples/FastField.js",
    "content": "import React from 'react';\nimport { Formik, FastField, Form } from 'formik';\nimport { Debug } from './Debug';\n\nclass Input extends React.Component {\n  renders = 0;\n  render() {\n    return (\n      <div>\n        <input {...this.props} />\n        <p># of renders: {this.renders++}</p>\n      </div>\n    );\n  }\n}\n\nconst Basic = () => (\n  <div>\n    <h1>Sign Up</h1>\n    <Formik\n      initialValues={{\n        firstName: '',\n        lastName: '',\n        email: '',\n      }}\n      onSubmit={(values, { setSubmitting }) => {\n        setTimeout(() => {\n          setSubmitting(false);\n\n          alert(JSON.stringify(values, null, 2));\n        }, 500);\n      }}\n      render={({ isSubmitting }) => (\n        <Form>\n          <label htmlFor=\"firstName\">First Name</label>\n          <FastField\n            name=\"firstName\"\n            placeholder=\"Jane\"\n            as={Input}\n            disabled={isSubmitting}\n          />\n\n          <label htmlFor=\"lastName\">Last Name</label>\n          <FastField\n            name=\"lastName\"\n            placeholder=\"Doe\"\n            as={Input}\n            disabled={isSubmitting}\n          />\n\n          <label htmlFor=\"email\">Email</label>\n          <FastField\n            name=\"email\"\n            placeholder=\"jane@acme.com\"\n            type=\"email\"\n            as={Input}\n            disabled={isSubmitting}\n          />\n\n          <button type=\"submit\">Submit</button>\n          <Debug />\n        </Form>\n      )}\n    />\n  </div>\n);\n\nexport default Basic;\n"
  },
  {
    "path": "examples/MultistepWizard.js",
    "content": "import React, { useState } from 'react';\nimport { ErrorMessage, Field, Form, Formik } from 'formik';\nimport * as Yup from 'yup';\nimport { Debug } from './Debug';\n\nconst sleep = ms => new Promise(resolve => setTimeout(resolve, ms));\n\n// Wizard is a single Formik instance whose children are each page of the\n// multi-step form. The form is submitted on each forward transition (can only\n// progress with valid input), whereas a backwards step is allowed with\n// incomplete data. A snapshot of form state is used as initialValues after each\n// transition. Each page has an optional submit handler, and the top-level\n// submit is called when the final page is submitted.\nconst Wizard = ({ children, initialValues, onSubmit }) => {\n  const [stepNumber, setStepNumber] = useState(0);\n  const steps = React.Children.toArray(children);\n  const [snapshot, setSnapshot] = useState(initialValues);\n\n  const step = steps[stepNumber];\n  const totalSteps = steps.length;\n  const isLastStep = stepNumber === totalSteps - 1;\n\n  const next = values => {\n    setSnapshot(values);\n    setStepNumber(Math.min(stepNumber + 1, totalSteps - 1));\n  };\n\n  const previous = values => {\n    setSnapshot(values);\n    setStepNumber(Math.max(stepNumber - 1, 0));\n  };\n\n  const handleSubmit = async (values, bag) => {\n    if (step.props.onSubmit) {\n      await step.props.onSubmit(values, bag);\n    }\n    if (isLastStep) {\n      return onSubmit(values, bag);\n    } else {\n      bag.setTouched({});\n      next(values);\n    }\n  };\n\n  return (\n    <Formik\n      initialValues={snapshot}\n      onSubmit={handleSubmit}\n      validationSchema={step.props.validationSchema}\n    >\n      {formik => (\n        <Form>\n          <p>\n            Step {stepNumber + 1} of {totalSteps}\n          </p>\n          {step}\n          <div style={{ display: 'flex' }}>\n            {stepNumber > 0 && (\n              <button onClick={() => previous(formik.values)} type=\"button\">\n                Back\n              </button>\n            )}\n            <div>\n              <button disabled={formik.isSubmitting} type=\"submit\">\n                {isLastStep ? 'Submit' : 'Next'}\n              </button>\n            </div>\n          </div>\n          <Debug />\n        </Form>\n      )}\n    </Formik>\n  );\n};\n\nconst WizardStep = ({ children }) => children;\n\nconst App = () => (\n  <div>\n    <h1>Formik Multistep Wizard</h1>\n    <Wizard\n      initialValues={{\n        email: '',\n        firstName: '',\n        lastName: '',\n      }}\n      onSubmit={async values =>\n        sleep(300).then(() => console.log('Wizard submit', values))\n      }\n    >\n      <WizardStep\n        onSubmit={() => console.log('Step1 onSubmit')}\n        validationSchema={Yup.object({\n          firstName: Yup.string().required('required'),\n          lastName: Yup.string().required('required'),\n        })}\n      >\n        <div>\n          <label htmlFor=\"firstName\">First Name</label>\n          <Field\n            autoComplete=\"given-name\"\n            component=\"input\"\n            id=\"firstName\"\n            name=\"firstName\"\n            placeholder=\"First Name\"\n            type=\"text\"\n          />\n          <ErrorMessage className=\"error\" component=\"div\" name=\"firstName\" />\n        </div>\n        <div>\n          <label htmlFor=\"lastName\">Last Name</label>\n          <Field\n            autoComplete=\"family-name\"\n            component=\"input\"\n            id=\"lastName\"\n            name=\"lastName\"\n            placeholder=\"Last Name\"\n            type=\"text\"\n          />\n          <ErrorMessage className=\"error\" component=\"div\" name=\"lastName\" />\n        </div>\n      </WizardStep>\n      <WizardStep\n        onSubmit={() => console.log('Step2 onSubmit')}\n        validationSchema={Yup.object({\n          email: Yup.string()\n            .email('Invalid email address')\n            .required('required'),\n        })}\n      >\n        <div>\n          <label htmlFor=\"email\">Email</label>\n          <Field\n            autoComplete=\"email\"\n            component=\"input\"\n            id=\"email\"\n            name=\"email\"\n            placeholder=\"Email\"\n            type=\"text\"\n          />\n          <ErrorMessage className=\"error\" component=\"div\" name=\"email\" />\n        </div>\n      </WizardStep>\n    </Wizard>\n  </div>\n);\n\nexport default App;\n"
  },
  {
    "path": "examples/RoutedMultistepWizard.js",
    "content": "import React from 'react';\nimport { BrowserRouter as Router, Route, withRouter } from 'react-router-dom';\nimport { Formik, Field, ErrorMessage } from 'formik';\nimport { Debug } from './Debug';\n\n// the root path. locations should extend from this\nconst formRootPath = '/step';\n\n// the specific path for each page\nconst locations = ['/step/1', '/step/2'];\n\nconst sleep = ms => new Promise(resolve => setTimeout(resolve, ms));\n\nconst required = value => (value ? undefined : 'Required');\n\nclass WizardBase extends React.Component {\n  static Page = ({ children }) => children;\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      values: props.initialValues,\n    };\n  }\n\n  next = values => {\n    const { location, history } = this.props;\n    this.setState(() => ({ values }));\n\n    // withRouter provides current location and history.push() to go to next page\n    const nextPath = locations.indexOf(location.pathname) + 1;\n    history.push(locations[nextPath]);\n  };\n\n  previous = () => {\n    const { location, history } = this.props;\n\n    const prevPath = locations.indexOf(location.pathname) - 1;\n    history.push(locations[prevPath]);\n  };\n\n  validate = values => {\n    const { location, children } = this.props;\n\n    const page = locations.indexOf(location.pathname);\n    const activePage = React.Children.toArray(children)[page];\n    return activePage.props.validate ? activePage.props.validate(values) : {};\n  };\n\n  handleSubmit = (values, bag) => {\n    const { children, onSubmit, location } = this.props;\n    const page = locations.indexOf(location.pathname);\n    const isLastPage = page === React.Children.count(children) - 1;\n    if (isLastPage) {\n      return onSubmit(values, bag);\n    }\n    // otherwise update values from page\n    bag.setTouched({});\n    bag.setSubmitting(false);\n    this.next(values);\n  };\n\n  render() {\n    const { children, location } = this.props;\n    const { values } = this.state;\n    // current page is determined by matching path in locations\n    const page = locations.indexOf(location.pathname);\n\n    const activePage = React.Children.toArray(children)[page];\n    const isLastPage = page === React.Children.count(children) - 1;\n    return (\n      <Formik\n        initialValues={values}\n        enableReinitialize={false}\n        validate={this.validate}\n        onSubmit={this.handleSubmit}\n        render={({ values, handleSubmit, isSubmitting, handleReset }) => (\n          <form onSubmit={handleSubmit}>\n            {activePage}\n            <div className=\"buttons\">\n              {page > 0 && (\n                <button\n                  type=\"button\"\n                  className=\"secondary\"\n                  onClick={this.previous}\n                >\n                  « Previous\n                </button>\n              )}\n\n              {!isLastPage && <button type=\"submit\">Next »</button>}\n              {isLastPage && (\n                <button type=\"submit\" disabled={isSubmitting}>\n                  Submit\n                </button>\n              )}\n            </div>\n\n            <Debug />\n          </form>\n        )}\n      />\n    );\n  }\n}\n\nconst Wizard = withRouter(WizardBase);\n\nconst App = () => (\n  <Router>\n    <div className=\"App\">\n      <h1>Multistep / Form Wizard </h1>\n      <Route\n        path={formRootPath}\n        render={routeProps => (\n          <Wizard\n            {...routeProps}\n            initialValues={{\n              firstName: '',\n              lastName: '',\n              email: '',\n              favoriteColor: '',\n            }}\n            onSubmit={(values, actions) => {\n              sleep(300).then(() => {\n                window.alert(JSON.stringify(values, null, 2));\n                actions.setSubmitting(false);\n              });\n            }}\n          >\n            <Wizard.Page>\n              <div>\n                <label>First Name</label>\n                <Field\n                  name=\"firstName\"\n                  component=\"input\"\n                  type=\"text\"\n                  placeholder=\"First Name\"\n                  validate={required}\n                />\n                <ErrorMessage\n                  name=\"firstName\"\n                  component=\"div\"\n                  className=\"field-error\"\n                />\n              </div>\n              <div>\n                <label>Last Name</label>\n                <Field\n                  name=\"lastName\"\n                  component=\"input\"\n                  type=\"text\"\n                  placeholder=\"Last Name\"\n                  validate={required}\n                />\n                <ErrorMessage\n                  name=\"lastName\"\n                  component=\"div\"\n                  className=\"field-error\"\n                />\n              </div>\n            </Wizard.Page>\n            <Wizard.Page\n              validate={values => {\n                const errors = {};\n                if (!values.email) {\n                  errors.email = 'Required';\n                }\n                if (!values.favoriteColor) {\n                  errors.favoriteColor = 'Required';\n                }\n                return errors;\n              }}\n            >\n              <div>\n                <label>Email</label>\n                <Field\n                  name=\"email\"\n                  component=\"input\"\n                  type=\"email\"\n                  placeholder=\"Email\"\n                />\n                <ErrorMessage\n                  name=\"email\"\n                  component=\"div\"\n                  className=\"field-error\"\n                />\n              </div>\n              <div>\n                <label>Favorite Color</label>\n                <Field name=\"favoriteColor\" component=\"select\">\n                  <option value=\"\">Select a Color</option>\n                  <option value=\"#ff0000\">❤️ Red</option>\n                  <option value=\"#00ff00\">💚 Green</option>\n                  <option value=\"#0000ff\">💙 Blue</option>\n                </Field>\n                <ErrorMessage\n                  name=\"favoriteColor\"\n                  component=\"div\"\n                  className=\"field-error\"\n                />\n              </div>\n            </Wizard.Page>\n          </Wizard>\n        )}\n      />\n    </div>\n  </Router>\n);\n\nexport default App;\n"
  },
  {
    "path": "examples/RoutedMultistepWizard2.js",
    "content": "/* eslint-disable jsx-a11y/accessible-emoji */\nimport React, { Fragment } from 'react';\nimport {\n  BrowserRouter as Router,\n  Route,\n  Switch,\n  Link,\n  Redirect,\n} from 'react-router-dom';\nimport { Field, ErrorMessage, withFormik } from 'formik';\nimport { Debug } from './Debug';\n\nconst required = value => (value ? undefined : 'Required');\n\nconst Page1 = () => (\n  <Fragment>\n    <div>\n      <label>First Name</label>\n      <Field\n        name=\"firstName\"\n        component=\"input\"\n        type=\"text\"\n        placeholder=\"First Name\"\n        validate={required}\n      />\n      <ErrorMessage name=\"firstName\" component=\"div\" className=\"field-error\" />\n    </div>\n    <div>\n      <label>Last Name</label>\n      <Field\n        name=\"lastName\"\n        component=\"input\"\n        type=\"text\"\n        placeholder=\"Last Name\"\n        validate={required}\n      />\n      <ErrorMessage name=\"lastName\" component=\"div\" className=\"field-error\" />\n    </div>\n    <Link to=\"/step2\">\n      <button type=\"button\">Next »</button>\n    </Link>\n  </Fragment>\n);\n\nconst Page2 = () => (\n  <Fragment>\n    <div>\n      <label>Email</label>\n      <Field name=\"email\" component=\"input\" type=\"email\" placeholder=\"Email\" />\n      <ErrorMessage name=\"email\" component=\"div\" className=\"field-error\" />\n    </div>\n    <div>\n      <label>Favorite Color</label>\n      <Field name=\"favoriteColor\" component=\"select\">\n        <option value=\"\">Select a Color</option>\n        <option value=\"#ff0000\">❤️ Red</option>\n        <option value=\"#00ff00\">💚 Green</option>\n        <option value=\"#0000ff\">💙 Blue</option>\n      </Field>\n      <ErrorMessage\n        name=\"favoriteColor\"\n        component=\"div\"\n        className=\"field-error\"\n      />\n    </div>\n    <Link to=\"/step1\">\n      <button type=\"button\">Previous</button>\n    </Link>\n    <button type=\"submit\">Submit</button>\n  </Fragment>\n);\n\nconst BaseForm = ({ values, handleSubmit }) => (\n  <Router>\n    <div className=\"App\">\n      <h1>Multistep / Form Wizard </h1>\n      <form onSubmit={handleSubmit}>\n        <Switch>\n          <Route\n            path=\"/step1\"\n            render={routeProps => <Page1 {...routeProps} />}\n          />\n          <Route\n            path=\"/step2\"\n            render={routeProps => <Page2 {...routeProps} />}\n          />\n          <Redirect to=\"/step1\" />\n        </Switch>\n\n        <Debug />\n      </form>\n    </div>\n  </Router>\n);\n\nexport const EnhancedForm = withFormik({\n  /* setup initial values */\n  mapPropsToValues: () => ({\n    firstName: '',\n    lastName: '',\n    email: '',\n    favoriteColor: '',\n  }),\n\n  validate: (values, props) => {\n    console.log('props', props);\n    const errors = {};\n\n    if (!values.email) {\n      errors.email = 'Required';\n    }\n\n    return errors;\n  },\n\n  handleSubmit: (values, { setSubmitting }) => {\n    setTimeout(() => {\n      alert(JSON.stringify(values, null, 2));\n      setSubmitting(false);\n    }, 1000);\n  },\n\n  displayName: 'BaseForm',\n})(BaseForm);\n"
  },
  {
    "path": "examples/SchemaValidation.js",
    "content": "import React from 'react';\nimport { Formik, Field, Form, ErrorMessage } from 'formik';\nimport * as Yup from 'yup';\nimport { Debug } from './Debug';\n\n// While you can use any validation library (or write you own), Formik\n// comes with special support for Yup by @jquense. It has a builder API like\n// React PropTypes / Hapi.js's Joi. You can define these inline or, you may want\n// to keep them separate so you can reuse schemas (e.g. address) across your application.\nconst SignUpSchema = Yup.object().shape({\n  email: Yup.string().email('Invalid email address').required('Required'),\n  firstName: Yup.string()\n    .min(2, 'Must be longer than 2 characters')\n    .max(20, 'Nice try, nobody has a first name that long')\n    .required('Required'),\n  lastName: Yup.string()\n    .min(2, 'Must be longer than 2 characters')\n    .max(20, 'Nice try, nobody has a last name that long')\n    .required('Required'),\n});\n\nconst SignUp = () => (\n  <div>\n    <h1>Sign up</h1>\n    <Formik\n      initialValues={{\n        email: '',\n        firstName: '',\n        lastName: '',\n      }}\n      validationSchema={SignUpSchema}\n      onSubmit={values => {\n        setTimeout(() => {\n          alert(JSON.stringify(values, null, 2));\n        }, 500);\n      }}\n      render={({ errors, touched }) => (\n        <Form>\n          <label htmlFor=\"firstName\">First Name</label>\n          <Field name=\"firstName\" placeholder=\"Jane\" type=\"text\" />\n\n          <ErrorMessage\n            name=\"firstName\"\n            component=\"div\"\n            className=\"field-error\"\n          />\n\n          <label htmlFor=\"lastName\">Last Name</label>\n          <Field name=\"lastName\" placeholder=\"Doe\" type=\"text\" />\n          <ErrorMessage\n            name=\"lastName\"\n            component=\"div\"\n            className=\"field-error\"\n          />\n\n          <label htmlFor=\"email\">Email</label>\n          <Field name=\"email\" placeholder=\"jane@acme.com\" type=\"email\" />\n          <ErrorMessage name=\"email\" component=\"div\" className=\"field-error\" />\n\n          <button type=\"submit\">Submit</button>\n          <Debug />\n        </Form>\n      )}\n    />\n  </div>\n);\n\nexport default SignUp;\n"
  },
  {
    "path": "examples/SyncValidation.js",
    "content": "import React from 'react';\nimport { Formik, Field, Form, ErrorMessage } from 'formik';\nimport { Debug } from './Debug';\n\nconst validate = values => {\n  const errors = {};\n  if (!values.email) {\n    errors.email = 'Required';\n  } else if (!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$/i.test(values.email)) {\n    errors.email = 'Invalid email address';\n  }\n  return errors;\n};\n\nconst SignIn = () => (\n  <div>\n    <h1>Sign In</h1>\n    <Formik\n      initialValues={{\n        email: '',\n        password: '',\n      }}\n      validate={validate}\n      onSubmit={values => {\n        setTimeout(() => {\n          alert(JSON.stringify(values, null, 2));\n        }, 500);\n      }}\n      render={({ errors, touched }) => (\n        <Form>\n          <label htmlFor=\"email\">Email</label>\n          <Field name=\"email\" placeholder=\"john@acme.com\" type=\"email\" />\n          <div className=\"field-error\">\n            <ErrorMessage name=\"email\" />\n          </div>\n          <label htmlFor=\"password\">Password</label>\n          <Field name=\"password\" type=\"password\" />\n          <button type=\"submit\">Sign In</button>\n          <Debug />\n        </Form>\n      )}\n    />\n  </div>\n);\n\nexport default SignIn;\n"
  },
  {
    "path": "examples/ValidateFieldWithSchema.js",
    "content": "import React from 'react';\nimport { Formik, Field, Form, ErrorMessage } from 'formik';\nimport { object, string } from 'yup';\nimport { Debug } from './Debug';\n\nconst validationSchema = object().shape({\n  email: string().email('Invalid email').required('Field is required'),\n  username: string()\n    .min(4, 'Must be at least 4 characters')\n    .required('Field is required'),\n});\n\nconst ValidateFieldWithSchema = () => (\n  <div>\n    <h1>Pick a username</h1>\n    <Formik\n      initialValues={{ username: '', email: '' }}\n      validationSchema={validationSchema}\n      onSubmit={values => {\n        alert(JSON.stringify(values, null, 2));\n      }}\n      render={({\n        errors,\n        touched,\n        setFieldValue,\n        setFieldTouched,\n        validateField,\n        validateForm,\n      }) => (\n        <Form>\n          <label htmlFor=\"username\">Username</label>\n          <div>\n            <Field name=\"username\" type=\"text\" placeholder=\"Username\" />\n            <ErrorMessage name=\"username\" />\n          </div>\n          <br />\n          <div>\n            <Field name=\"email\" type=\"text\" placeholder=\"Email\" />\n            <ErrorMessage name=\"email\" />\n          </div>\n\n          <div>\n            <div>username field actions</div>\n            <button\n              type=\"button\"\n              onClick={() => {\n                setFieldTouched('username', true, true);\n              }}\n            >\n              setFieldTouched\n            </button>\n            <button\n              type=\"button\"\n              onClick={() => {\n                setFieldValue('username', '', true);\n              }}\n            >\n              setFieldValue\n            </button>\n            <button\n              type=\"button\"\n              onClick={() => {\n                validateField('username');\n              }}\n            >\n              validateField\n            </button>\n            <br />\n          </div>\n          <br />\n          <div>\n            <div>Form actions</div>\n            <button type=\"button\" onClick={validateForm}>\n              validate form\n            </button>\n            <button type=\"submit\">Submit</button>\n          </div>\n          <Debug />\n        </Form>\n      )}\n    />\n  </div>\n);\n\nexport default ValidateFieldWithSchema;\n"
  },
  {
    "path": "examples/async-submission/README.md",
    "content": "# Formik Async Submission\n\nThis example demonstrates how to use async/await to submit a Formik form.\n\n[![Edit formik-example-async-submission](https://codesandbox.io/static/img/play-codesandbox.svg)](https://codesandbox.io/s/github/jaredpalmer/formik/tree/master/examples/async-submission?fontsize=14&hidenavigation=1&theme=dark)\n"
  },
  {
    "path": "examples/async-submission/index.js",
    "content": "import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Formik, Field, Form } from 'formik';\n\nconst sleep = (ms) => new Promise((r) => setTimeout(r, ms));\n\nconst Example = () => (\n  <div>\n    <h1>Sign Up</h1>\n    <Formik\n      initialValues={{\n        firstName: '',\n        lastName: '',\n        email: '',\n      }}\n      onSubmit={async (values) => {\n        await sleep(500);\n        alert(JSON.stringify(values, null, 2));\n      }}\n    >\n      {({ isSubmitting }) => (\n        <Form>\n          <label htmlFor=\"firstName\">First Name</label>\n          <Field name=\"firstName\" placeholder=\"Jane\" />\n\n          <label htmlFor=\"lastName\">Last Name</label>\n          <Field name=\"lastName\" placeholder=\"Doe\" />\n\n          <label htmlFor=\"email\">Email</label>\n          <Field name=\"email\" placeholder=\"jane@acme.com\" type=\"email\" />\n\n          <button type=\"submit\" disabled={isSubmitting}>\n            Submit\n          </button>\n        </Form>\n      )}\n    </Formik>\n  </div>\n);\n\nReactDOM.render(<Example />, document.getElementById('root'));\n"
  },
  {
    "path": "examples/async-submission/package.json",
    "content": "{\n  \"name\": \"formik-example-async-submission\",\n  \"version\": \"0.1.0\",\n  \"description\": \"This example demonstrates how to use async/await to submit a Formik form\",\n  \"main\": \"index.js\",\n  \"dependencies\": {\n    \"react\": \"^16.12.0\",\n    \"react-dom\": \"^16.12.0\",\n    \"react-scripts\": \"3.4.1\",\n    \"formik\": \"latest\"\n  },\n  \"prettier\": {\n    \"trailingComma\": \"es5\",\n    \"singleQuote\": true,\n    \"semi\": true\n  }\n}\n"
  },
  {
    "path": "examples/basic/README.md",
    "content": "# Formik Basic Example\n\nThis example demonstrates how to use Formik in its most basic way.\n\n[![Edit formik-example-basic](https://codesandbox.io/static/img/play-codesandbox.svg)](https://codesandbox.io/s/github/jaredpalmer/formik/tree/master/examples/basic?fontsize=14&hidenavigation=1&theme=dark)\n"
  },
  {
    "path": "examples/basic/index.js",
    "content": "import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Formik, Field, Form } from 'formik';\n\nconst Basic = () => (\n  <div>\n    <h1>Sign Up</h1>\n    <Formik\n      initialValues={{\n        firstName: '',\n        lastName: '',\n        email: '',\n      }}\n      onSubmit={async (values) => {\n        await new Promise((r) => setTimeout(r, 500));\n        alert(JSON.stringify(values, null, 2));\n      }}\n    >\n      <Form>\n        <label htmlFor=\"firstName\">First Name</label>\n        <Field id=\"firstName\" name=\"firstName\" placeholder=\"Jane\" />\n\n        <label htmlFor=\"lastName\">Last Name</label>\n        <Field id=\"lastName\" name=\"lastName\" placeholder=\"Doe\" />\n\n        <label htmlFor=\"email\">Email</label>\n        <Field\n          id=\"email\"\n          name=\"email\"\n          placeholder=\"jane@acme.com\"\n          type=\"email\"\n        />\n        <button type=\"submit\">Submit</button>\n      </Form>\n    </Formik>\n  </div>\n);\n\nReactDOM.render(<Basic />, document.getElementById('root'));\n"
  },
  {
    "path": "examples/basic/package.json",
    "content": "{\n  \"name\": \"formik-example-basic\",\n  \"version\": \"0.1.0\",\n  \"description\": \"This example demonstrates how to use Formik in it's most basic way\",\n  \"main\": \"index.js\",\n  \"dependencies\": {\n    \"react\": \"^16.12.0\",\n    \"react-dom\": \"^16.12.0\",\n    \"react-scripts\": \"3.4.1\",\n    \"formik\": \"latest\"\n  },\n  \"prettier\": {\n    \"trailingComma\": \"es5\",\n    \"singleQuote\": true,\n    \"semi\": true\n  }\n}\n"
  },
  {
    "path": "examples/basic-typescript/README.md",
    "content": "# Formik TypeScript Example\n\nThis example demonstrates how to get started with Formik and [TypeScript](https://typescriptlang.org)\n\n[![Edit formik-example-basic-typescript](https://codesandbox.io/static/img/play-codesandbox.svg)](https://codesandbox.io/s/github/jaredpalmer/formik/tree/master/examples/basic-typescript?fontsize=14&hidenavigation=1&theme=dark)\n"
  },
  {
    "path": "examples/basic-typescript/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\" />\n    <title>Playground</title>\n  </head>\n\n  <body>\n    <div id=\"root\"></div>\n    <script src=\"./index.tsx\"></script>\n  </body>\n</html>\n"
  },
  {
    "path": "examples/basic-typescript/index.tsx",
    "content": "import 'react-app-polyfill/ie11';\nimport * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { Formik, Field, Form, FormikHelpers } from 'formik';\n\ninterface Values {\n  firstName: string;\n  lastName: string;\n  email: string;\n}\n\nconst App = () => {\n  return (\n    <div>\n      <h1>Signup</h1>\n      <Formik\n        initialValues={{\n          firstName: '',\n          lastName: '',\n          email: '',\n        }}\n        onSubmit={(\n          values: Values,\n          { setSubmitting }: FormikHelpers<Values>\n        ) => {\n          setTimeout(() => {\n            alert(JSON.stringify(values, null, 2));\n            setSubmitting(false);\n          }, 500);\n        }}\n      >\n        <Form>\n          <label htmlFor=\"firstName\">First Name</label>\n          <Field id=\"firstName\" name=\"firstName\" placeholder=\"John\" />\n\n          <label htmlFor=\"lastName\">Last Name</label>\n          <Field id=\"lastName\" name=\"lastName\" placeholder=\"Doe\" />\n\n          <label htmlFor=\"email\">Email</label>\n          <Field\n            id=\"email\"\n            name=\"email\"\n            placeholder=\"john@acme.com\"\n            type=\"email\"\n          />\n\n          <button type=\"submit\">Submit</button>\n        </Form>\n      </Formik>\n    </div>\n  );\n};\n\nReactDOM.render(<App />, document.getElementById('root'));\n"
  },
  {
    "path": "examples/basic-typescript/package.json",
    "content": "{\n  \"name\": \"formik-basic-typescript-example\",\n  \"version\": \"0.1.0\",\n  \"description\": \"This example demonstrates how to use Formik with TypeScript\",\n  \"main\": \"index.tsx\",\n  \"dependencies\": {\n    \"@types/react-dom\": \"^16.8.4\",\n    \"@types/react\": \"^16.9.11\",\n    \"formik\": \"latest\",\n    \"parcel\": \"latest\",\n    \"react-app-polyfill\": \"^1.0.5\",\n    \"react-dom\": \"latest\",\n    \"react\": \"latest\",\n    \"typescript\": \"latest\"\n  },\n  \"prettier\": {\n    \"trailingComma\": \"es5\",\n    \"singleQuote\": true,\n    \"semi\": true\n  }\n}\n"
  },
  {
    "path": "examples/basic-typescript/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"allowSyntheticDefaultImports\": false,\n    \"target\": \"es5\",\n    \"module\": \"commonjs\",\n    \"jsx\": \"react\",\n    \"moduleResolution\": \"node\",\n    \"noImplicitAny\": false,\n    \"noUnusedLocals\": false,\n    \"noUnusedParameters\": false,\n    \"removeComments\": true,\n    \"strictNullChecks\": true,\n    \"preserveConstEnums\": true,\n    \"sourceMap\": true,\n    \"lib\": [\"es2015\", \"es2016\", \"dom\"],\n    \"baseUrl\": \".\",\n    \"types\": [\"node\"]\n  }\n}\n"
  },
  {
    "path": "examples/checkboxes/README.md",
    "content": "# Formik Checkboxes\n\nThis example demonstrates how to use Formik with a checkbox group.\n\n[![Edit formik-example-checkboxes](https://codesandbox.io/static/img/play-codesandbox.svg)](https://codesandbox.io/s/github/jaredpalmer/formik/tree/master/examples/checkboxes?fontsize=14&hidenavigation=1&theme=dark)\n"
  },
  {
    "path": "examples/checkboxes/index.js",
    "content": "import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Formik, Field, Form } from 'formik';\n\nconst sleep = (ms) => new Promise((r) => setTimeout(r, ms));\n\nconst Basic = () => (\n  <div>\n    <h1>Sign Up</h1>\n    <Formik\n      initialValues={{\n        toggle: false,\n        checked: [],\n      }}\n      onSubmit={async (values) => {\n        await sleep(500);\n        alert(JSON.stringify(values, null, 2));\n      }}\n    >\n      {({ values }) => (\n        <Form>\n          {/* \n            This first checkbox will result in a boolean value being stored. Note that the `value` prop\n            on the <Field/> is omitted\n          */}\n          <label>\n            <Field type=\"checkbox\" name=\"toggle\" />\n            {`${values.toggle}`}\n          </label>\n\n          {/* \n            Multiple checkboxes with the same name attribute, but different\n            value attributes will be considered a \"checkbox group\". Formik will automagically\n            bind the checked values to a single array for your benefit. All the add and remove\n            logic will be taken care of for you.\n          */}\n          <div id=\"checkbox-group\">Checked</div>\n          <div role=\"group\" aria-labelledby=\"checkbox-group\">\n            <label>\n              <Field type=\"checkbox\" name=\"checked\" value=\"One\" />\n              One\n            </label>\n            <label>\n              <Field type=\"checkbox\" name=\"checked\" value=\"Two\" />\n              Two\n            </label>\n            <label>\n              <Field type=\"checkbox\" name=\"checked\" value=\"Three\" />\n              Three\n            </label>\n          </div>\n\n          <button type=\"submit\">Submit</button>\n        </Form>\n      )}\n    </Formik>\n  </div>\n);\n\nReactDOM.render(<Basic />, document.getElementById('root'));\n"
  },
  {
    "path": "examples/checkboxes/package.json",
    "content": "{\n  \"name\": \"formik-example-checkboxes\",\n  \"version\": \"0.1.0\",\n  \"description\": \"This example demonstrates how to use Formik with a checkbox group\",\n  \"main\": \"index.js\",\n  \"dependencies\": {\n    \"react\": \"^16.12.0\",\n    \"react-dom\": \"^16.12.0\",\n    \"react-scripts\": \"3.4.1\",\n    \"formik\": \"latest\"\n  },\n  \"prettier\": {\n    \"trailingComma\": \"es5\",\n    \"singleQuote\": true,\n    \"semi\": true\n  }\n}\n"
  },
  {
    "path": "examples/dependent-fields/README.md",
    "content": "# Formik Dependent Fields Example\n\nThis is an example of how to set the value of one field based on the current values of other fields in Formik v2.\n\n[![Edit formik-example-dependent-fields](https://codesandbox.io/static/img/play-codesandbox.svg)](https://codesandbox.io/s/github/jaredpalmer/formik/tree/master/examples/dependent-fields?fontsize=14&hidenavigation=1&theme=dark)\n"
  },
  {
    "path": "examples/dependent-fields/index.js",
    "content": "import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Formik, Field, Form, useField, useFormikContext } from 'formik';\nimport './styles.css';\n\nconst MyField = (props) => {\n  const {\n    values: { textA, textB },\n    touched,\n    setFieldValue,\n  } = useFormikContext();\n  const [field, meta] = useField(props);\n\n  React.useEffect(() => {\n    // set the value of textC, based on textA and textB\n    if (\n      textA.trim() !== '' &&\n      textB.trim() !== '' &&\n      touched.textA &&\n      touched.textB\n    ) {\n      setFieldValue(props.name, `textA: ${textA}, textB: ${textB}`);\n    }\n  }, [textB, textA, touched.textA, touched.textB, setFieldValue, props.name]);\n\n  return (\n    <>\n      <input {...props} {...field} />\n      {!!meta.touched && !!meta.error && <div>{meta.error}</div>}\n    </>\n  );\n};\n\nfunction App() {\n  // Note that we provide initalValues all 3 fields.\n  const initialValues = { textA: '', textB: '', textC: '' };\n  return (\n    <div className=\"App\">\n      <Formik\n        initialValues={initialValues}\n        onSubmit={async (values) => alert(JSON.stringify(values, null, 2))}\n      >\n        <div className=\"section\">\n          <h1>Dependent Formik Field Example</h1>\n          <p style={{ color: '#555' }}>\n            This is an example of how to set the value of one field based on the\n            current values of other fields in Formik v2. In form below, textC's\n            value is set based on the current values of fields textA and textB.\n          </p>\n          <div>\n            <small>\n              <em>\n                Instructions: enter values for textA, and textB, and then watch\n                textC.\n              </em>\n            </small>\n          </div>\n          <Form>\n            <label>\n              textA\n              <Field name=\"textA\" />\n            </label>\n            <label>\n              textB\n              <Field name=\"textB\" />\n            </label>\n            <label>\n              textC\n              <MyField name=\"textC\" />\n            </label>\n            <button type=\"submit\">Submit</button>\n          </Form>\n        </div>\n      </Formik>\n      <div style={{ marginTop: 16 }}>\n        Notice the following:\n        <ul>\n          <li>\n            textC's value is set after fields textA and textB have been touched\n            and if they are not empty.\n          </li>\n          <li>\n            textC is <i>still</i> editable after being set programmatically.\n            However, the value will be overwritten if/whenever there are (new)\n            changes to textA and textB. This is because of the dependency array\n            in our custom field's React.useEffect; it only runs when textA or\n            textB change or have been touched. Since Formik's `setFieldValue` is\n            equivalent between renders and so is the field's name prop, this\n            works as expected. You could alter this overrwriting behavior by\n            keeping track of whether textC was been updated by field.onChange or\n            useEffect. This might be very useful if you want to alert the end\n            user that their changes to textC will be lost.\n          </li>\n        </ul>\n      </div>\n    </div>\n  );\n}\n\nconst rootElement = document.getElementById('root');\nReactDOM.render(<App />, rootElement);\n"
  },
  {
    "path": "examples/dependent-fields/package.json",
    "content": "{\n  \"name\": \"formik-example-dependent-fields\",\n  \"version\": \"0.1.0\",\n  \"description\": \"This is an example of how to set the value of one field based on the current values of other fields in Formik v2\",\n  \"main\": \"index.js\",\n  \"dependencies\": {\n    \"react\": \"^16.12.0\",\n    \"react-dom\": \"^16.12.0\",\n    \"react-scripts\": \"3.4.1\",\n    \"formik\": \"latest\"\n  },\n  \"prettier\": {\n    \"trailingComma\": \"es5\",\n    \"singleQuote\": true,\n    \"semi\": true\n  }\n}\n"
  },
  {
    "path": "examples/dependent-fields/styles.css",
    "content": ".App {\n  font-family: sans-serif;\n  max-width: 500px;\n}\n\n.section {\n  padding: 10px;\n  border: 1px solid purple;\n  border-radius: 4px;\n  margin-bottom: 20px;\n}\n\nlabel,\ninput {\n  display: block;\n}\nlabel,\nbutton {\n  margin-top: 1rem;\n}\n"
  },
  {
    "path": "examples/dependent-fields-async-api-request/README.md",
    "content": "# Dependent Formik fields with Async API Request\n\nThis is an example of a complex dependent field in Formik v2. In this example, one field's value is set by making an asynchronous API request based on the current values of other fields.\n\n[![Edit formik-example-dependent-fields-async-api-request](https://codesandbox.io/static/img/play-codesandbox.svg)](https://codesandbox.io/s/github/jaredpalmer/formik/tree/master/examples/dependent-fields-async-api-request?fontsize=14&hidenavigation=1&theme=dark)\n"
  },
  {
    "path": "examples/dependent-fields-async-api-request/index.js",
    "content": "import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Formik, Field, Form, useField, useFormikContext } from 'formik';\nimport './styles.css';\n\nasync function fetchNewTextC(a, b) {\n  await new Promise((r) => setTimeout(r, 500));\n  return `textA: ${a}, textB: ${b}`;\n}\n\nconst MyField = (props) => {\n  const {\n    values: { textA, textB },\n    setFieldValue,\n  } = useFormikContext();\n  const [field, meta] = useField(props);\n\n  React.useEffect(() => {\n    let isCurrent = true;\n    // your business logic around when to fetch goes here.\n    if (textA.trim() !== '' && textB.trim() !== '') {\n      fetchNewTextC(textA, textB).then((textC) => {\n        if (!!isCurrent) {\n          // prevent setting old values\n          setFieldValue(props.name, textC);\n        }\n      });\n    }\n    return () => {\n      isCurrent = false;\n    };\n  }, [textB, textA, setFieldValue, props.name]);\n\n  return (\n    <>\n      <input {...props} {...field} />\n      {!!meta.touched && !!meta.error && <div>{meta.error}</div>}\n    </>\n  );\n};\nfunction App() {\n  const initialValues = { textA: '', textB: '', textC: '' };\n\n  return (\n    <div className=\"App\">\n      <Formik\n        initialValues={initialValues}\n        onSubmit={async (values) => alert(JSON.stringify(values, null, 2))}\n      >\n        <div className=\"section\">\n          <h1>Dependent Formik fields with Async Request</h1>\n          <p style={{ color: '#555' }}>\n            This is an example of a complex dependent field in Formik v2. In\n            this example, textC's value is set by making an async API request\n            based on the current values of fields textA and textB.\n          </p>\n          <div>\n            <small>\n              <em>\n                Instructions: enter values for textA, and textB, and then watch\n                textC\n              </em>\n            </small>\n          </div>\n          <Form>\n            <label>\n              textA\n              <Field name=\"textA\" />\n            </label>\n            <label>\n              textB\n              <Field name=\"textB\" />\n            </label>\n            <label>\n              textC\n              <MyField name=\"textC\" />\n              <small>\n                (the result of <code>fetchNewTextC(textA, textB))</code>\n              </small>\n            </label>\n            <button type=\"submit\">Submit</button>\n          </Form>\n        </div>\n      </Formik>\n    </div>\n  );\n}\n\nconst rootElement = document.getElementById('root');\nReactDOM.render(<App />, rootElement);\n"
  },
  {
    "path": "examples/dependent-fields-async-api-request/package.json",
    "content": "{\n  \"name\": \"formik-example-dependent-fields-async-api-request\",\n  \"version\": \"0.1.0\",\n  \"description\": \"This is an example of how to set the value of one field based on an async API request that uses the current values of other fields in Formik v2\",\n  \"main\": \"index.js\",\n  \"dependencies\": {\n    \"react\": \"^16.12.0\",\n    \"react-dom\": \"^16.12.0\",\n    \"react-scripts\": \"3.4.1\",\n    \"formik\": \"latest\"\n  },\n  \"prettier\": {\n    \"trailingComma\": \"es5\",\n    \"singleQuote\": true,\n    \"semi\": true\n  }\n}\n"
  },
  {
    "path": "examples/dependent-fields-async-api-request/styles.css",
    "content": ".App {\n  font-family: sans-serif;\n  max-width: 500px;\n}\n\n.section {\n  padding: 10px;\n  border: 1px solid purple;\n  border-radius: 4px;\n  margin-bottom: 20px;\n}\n\nlabel,\ninput {\n  display: block;\n}\nlabel,\nbutton {\n  margin-top: 1rem;\n}\n"
  },
  {
    "path": "examples/field-arrays/README.md",
    "content": "# Formik Arrays Example\n\nThis example demonstrates how to work with array fields in Formik.\n\n[![Edit formik-example-field-arrays](https://codesandbox.io/static/img/play-codesandbox.svg)](https://codesandbox.io/s/github/jaredpalmer/formik/tree/master/examples/field-arrays?fontsize=14&hidenavigation=1&theme=dark)\n"
  },
  {
    "path": "examples/field-arrays/index.js",
    "content": "import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Formik, Field, Form, ErrorMessage, FieldArray } from 'formik';\n\nconst initialValues = {\n  friends: [\n    {\n      name: '',\n      email: '',\n    },\n  ],\n};\n\nconst InviteFriends = () => (\n  <div>\n    <h1>Invite friends</h1>\n    <Formik\n      initialValues={initialValues}\n      onSubmit={async (values) => {\n        await new Promise((r) => setTimeout(r, 500));\n        alert(JSON.stringify(values, null, 2));\n      }}\n    >\n      {({ values }) => (\n        <Form>\n          <FieldArray name=\"friends\">\n            {({ insert, remove, push }) => (\n              <div>\n                {values.friends.length > 0 &&\n                  values.friends.map((friend, index) => (\n                    <div className=\"row\" key={index}>\n                      <div className=\"col\">\n                        <label htmlFor={`friends.${index}.name`}>Name</label>\n                        <Field\n                          name={`friends.${index}.name`}\n                          placeholder=\"Jane Doe\"\n                          type=\"text\"\n                        />\n                        <ErrorMessage\n                          name={`friends.${index}.name`}\n                          component=\"div\"\n                          className=\"field-error\"\n                        />\n                      </div>\n                      <div className=\"col\">\n                        <label htmlFor={`friends.${index}.email`}>Email</label>\n                        <Field\n                          name={`friends.${index}.email`}\n                          placeholder=\"jane@acme.com\"\n                          type=\"email\"\n                        />\n                        <ErrorMessage\n                          name={`friends.${index}.name`}\n                          component=\"div\"\n                          className=\"field-error\"\n                        />\n                      </div>\n                      <div className=\"col\">\n                        <button\n                          type=\"button\"\n                          className=\"secondary\"\n                          onClick={() => remove(index)}\n                        >\n                          X\n                        </button>\n                      </div>\n                    </div>\n                  ))}\n                <button\n                  type=\"button\"\n                  className=\"secondary\"\n                  onClick={() => push({ name: '', email: '' })}\n                >\n                  Add Friend\n                </button>\n              </div>\n            )}\n          </FieldArray>\n          <button type=\"submit\">Invite</button>\n        </Form>\n      )}\n    </Formik>\n  </div>\n);\n\nReactDOM.render(<InviteFriends />, document.getElementById('root'));\n"
  },
  {
    "path": "examples/field-arrays/package.json",
    "content": "{\n  \"name\": \"formik-example-field-arrays\",\n  \"version\": \"0.1.0\",\n  \"description\": \"This example demonstrates how to work with array fields in Formik\",\n  \"main\": \"index.js\",\n  \"dependencies\": {\n    \"react\": \"^16.12.0\",\n    \"react-dom\": \"^16.12.0\",\n    \"react-scripts\": \"3.4.1\",\n    \"formik\": \"latest\"\n  },\n  \"prettier\": {\n    \"trailingComma\": \"es5\",\n    \"singleQuote\": true,\n    \"semi\": true\n  }\n}\n"
  },
  {
    "path": "examples/field-level-validation/README.md",
    "content": "# Formik Field-Level Validation Example via `<Field />`\n\nThis example demonstrates how to use field-level validation with Formik and `<Field />`.\n\n[![Edit formik-example-radio-group](https://codesandbox.io/static/img/play-codesandbox.svg)](https://codesandbox.io/s/github/jaredpalmer/formik/tree/master/examples/radio-group?fontsize=14&hidenavigation=1&theme=dark)\n"
  },
  {
    "path": "examples/field-level-validation/index.js",
    "content": "import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Formik, Field, Form, ErrorMessage, useFormikContext } from 'formik';\n\nconst isRequired = (message) => (value) => (!!value ? undefined : message);\n\nconst Example = () => (\n  <div>\n    <h1>Pick a username</h1>\n    <Formik\n      initialValues={{ username: '', email: '' }}\n      onSubmit={async (values) => {\n        await new Promise((r) => setTimeout(r, 500));\n        alert(JSON.stringify(values, null, 2));\n      }}\n    >\n      <Form>\n        <label htmlFor=\"username\">Username</label>\n        <div>\n          <Field\n            name=\"username\"\n            validate={isRequired('This field is required')}\n            type=\"text\"\n            placeholder=\"Username\"\n          />\n          <ErrorMessage name=\"username\" />\n        </div>\n        <br />\n        <div>\n          <Field\n            name=\"email\"\n            validate={isRequired('This field is required')}\n            type=\"text\"\n            placeholder=\"Email\"\n          />\n          <ErrorMessage name=\"email\" />\n        </div>\n        <button type=\"submit\">Submit</button>\n        <hr />\n        <Playground />\n      </Form>\n    </Formik>\n  </div>\n);\n\nconst Playground = () => {\n  const {\n    errors,\n    touched,\n    setFieldValue,\n    setFieldTouched,\n    validateField,\n    validateForm,\n  } = useFormikContext();\n  return (\n    <>\n      <div>\n        <div>\n          <code>username</code> field actions\n        </div>\n        <button\n          type=\"button\"\n          onClick={() => {\n            setFieldTouched('username', true, true);\n          }}\n        >\n          setFieldTouched\n        </button>\n        <button\n          type=\"button\"\n          onClick={() => {\n            setFieldValue('username', '', true);\n          }}\n        >\n          setFieldValue\n        </button>\n        <button\n          type=\"button\"\n          onClick={() => {\n            validateField('username');\n          }}\n        >\n          validateField\n        </button>\n        <br />\n      </div>\n      <br />\n      <div>\n        <div>Form actions</div>\n        <button type=\"button\" onClick={validateForm}>\n          validate form\n        </button>\n      </div>\n    </>\n  );\n};\n\nReactDOM.render(<Example />, document.getElementById('root'));\n"
  },
  {
    "path": "examples/field-level-validation/package.json",
    "content": "{\n  \"name\": \"formik-example-radio-group\",\n  \"version\": \"0.1.0\",\n  \"description\": \"This example demonstrates how to create a radio group with Formik\",\n  \"main\": \"index.js\",\n  \"dependencies\": {\n    \"react\": \"^16.12.0\",\n    \"react-dom\": \"^16.12.0\",\n    \"react-scripts\": \"3.3.0\",\n    \"formik\": \"latest\"\n  },\n  \"prettier\": {\n    \"trailingComma\": \"es5\",\n    \"singleQuote\": true,\n    \"semi\": true\n  }\n}\n"
  },
  {
    "path": "examples/instant-feedback/README.md",
    "content": "# Formik Accessible Instant Feedback Example\n\nInstant feedback during typing can be extremely helpful in certain situations. For example, checking the validity (or availability) of a username shouldn't require the user to resubmit the form (multiple times). Providing instant feedback while users are typing can allow them to experiment more easily until they find valid input value (like a suitable username). Note: This isn't always optimal, use your judgement.\n\n[![Edit formik-example-instant-feedback](https://codesandbox.io/static/img/play-codesandbox.svg)](https://codesandbox.io/s/github/jaredpalmer/formik/tree/master/examples/instant-feedback?fontsize=14&hidenavigation=1&theme=dark)\n"
  },
  {
    "path": "examples/instant-feedback/index.js",
    "content": "import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { useFormik, FormikProvider, Form, useField } from 'formik';\nimport './styles.css';\nimport * as Yup from 'yup';\n\nconst sleep = (ms) => new Promise((r) => setTimeout(r, ms));\n\nconst TextInputLiveFeedback = ({ label, helpText, ...props }) => {\n  const [field, meta] = useField(props);\n\n  // Show inline feedback if EITHER\n  // - the input is focused AND value is longer than 2 characters\n  // - or, the has been visited (touched === true)\n  const [didFocus, setDidFocus] = React.useState(false);\n  const handleFocus = () => setDidFocus(true);\n  const showFeedback =\n    (!!didFocus && field.value.trim().length > 2) || meta.touched;\n\n  return (\n    <div\n      className={`form-control ${\n        showFeedback ? (meta.error ? 'invalid' : 'valid') : ''\n      }`}\n    >\n      <div className=\"flex items-center space-between\">\n        <label htmlFor={props.id}>{label}</label>{' '}\n        {showFeedback ? (\n          <div\n            id={`${props.id}-feedback`}\n            aria-live=\"polite\"\n            className=\"feedback text-sm\"\n          >\n            {meta.error ? meta.error : '✓'}\n          </div>\n        ) : null}\n      </div>\n      <input\n        {...props}\n        {...field}\n        aria-describedby={`${props.id}-feedback ${props.id}-help`}\n        onFocus={handleFocus}\n      />\n      <div className=\"text-xs\" id={`${props.id}-help`} tabIndex=\"-1\">\n        {helpText}\n      </div>\n    </div>\n  );\n};\n\nconst Example = () => {\n  const formik = useFormik({\n    initialValues: {\n      username: '',\n    },\n    onSubmit: async (values) => {\n      await sleep(500);\n      alert(JSON.stringify(values, null, 2));\n    },\n    validationSchema: Yup.object({\n      username: Yup.string()\n        .min(8, 'Must be at least 8 characters')\n        .max(20, 'Must be less  than 20 characters')\n        .required('Username is required')\n        .matches(\n          /^[a-zA-Z0-9]+$/,\n          'Cannot contain special characters or spaces'\n        ),\n    }),\n  });\n\n  return (\n    <FormikProvider value={formik}>\n      <Form>\n        <TextInputLiveFeedback\n          label=\"Username\"\n          id=\"username\"\n          name=\"username\"\n          helpText=\"Must be 8-20 characters and cannot contain special characters.\"\n          type=\"text\"\n        />\n        <div>\n          <button type=\"submit\">Submit</button>\n          <button type=\"reset\">Reset</button>\n        </div>\n      </Form>\n    </FormikProvider>\n  );\n};\n\nReactDOM.render(\n  <div className=\"app\">\n    <h1 className=\"text-4xl\">Accessible instant feeback with Formik 2</h1>\n    <p className=\"text-lg\">\n      Instant feedback during typing can be extremely helpful in certain\n      situations. For example, checking the validity (or availability) of a\n      username shouldn't require the user to resubmit the form (multiple times).\n      Providing instant feedback while users are typing can allow them to\n      experiment more easily until they find valid input value (like a suitable\n      username). Note: This isn't always optimal, use your judgement.\n    </p>\n    <div className=\"example\">\n      <Example />\n    </div>\n    <p className=\"text-md mt-1\">\n      <strong>Note:</strong> The displayed feedback message in this example is\n      coded using a <code>{`<div>`}</code> element that has an{' '}\n      <code>{`aria-live`}</code> attribute with the value <code>polite</code>.\n      The contents of this so called \"live region\" are conveyed to screen\n      readers and other assistive technology. The value \"polite\" de-emphasizes\n      the importance of the message and does not cause screen readers to\n      interrupt their current tasks to read aloud this message. Thus the message\n      is only read once when the user stops typing rather than on every\n      keystroke that the user makes.\n    </p>\n    <p className=\"text-sm\">\n      <i>\n        Example adapted from{' '}\n        <a\n          href=\"https://www.w3.org/WAI/tutorials/forms/notifications/\"\n          target=\"blank\"\n          rel=\"noopener noreferrer\"\n        >\n          W3C WAI Web Accessibility Tutorials\n        </a>\n      </i>\n    </p>\n  </div>,\n  document.getElementById('root')\n);\n"
  },
  {
    "path": "examples/instant-feedback/package.json",
    "content": "{\n  \"name\": \"accesible-instant-feedback-with-formik\",\n  \"version\": \"0.1.0\",\n  \"description\": \"\",\n  \"main\": \"index.js\",\n  \"dependencies\": {\n    \"formik\": \"latest\",\n    \"react\": \"^16.12.0\",\n    \"react-dom\": \"^16.12.0\",\n    \"react-scripts\": \"3.4.1\",\n    \"yup\": \"0.29.1\"\n  },\n  \"prettier\": {\n    \"trailingComma\": \"es5\",\n    \"singleQuote\": true,\n    \"semi\": true\n  },\n  \"keywords\": []\n}\n"
  },
  {
    "path": "examples/instant-feedback/styles.css",
    "content": "* {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n  text-rendering: optimizeLegibility;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n  -webkit-tap-highlight-color: transparent;\n}\n\nhtml {\n  font-size: 16px;\n  font-family: -apple-system, BlinkMacSystemFont, 'avenir next', avenir,\n    'helvetica neue', helvetica, ubuntu, roboto, noto, 'segoe ui', arial,\n    sans-serif;\n  margin: 0;\n  padding: 0;\n  text-decoration-skip-ink: 'auto';\n}\n\n:root {\n  --gray-900: #111114;\n  --gray-800: #222224;\n  --gray-700: #444444;\n  --gray-600: #666664;\n  --gray-500: #888884;\n  --gray-400: #aaaaa4;\n  --gray-300: #ccccc4;\n  --gray-200: #e2e2e4;\n  --gray-100: #f9f9f9;\n  --white: white;\n  --blue: #4299e1;\n  --red: #f56565;\n  --text-decoration-color: var(--gray-400);\n  --text-color: var(--gray-800);\n  --focus-ring-color: var(--blue);\n  --border-radius: 4px;\n}\n\n::selection,\n::-moz-selection {\n  background: var(--focus-ring-color); /* WebKit/Blink Browsers */\n}\nbody {\n  padding: 0;\n  margin: 0;\n  background-color: white;\n  font-weight: 400;\n  line-height: 1.563;\n  color: var(--text-color);\n  caret-color: var(--text-color);\n}\n\n@media (prefers-color-scheme: dark) {\n  body {\n    color: white;\n    background-color: var(--gray-900);\n    caret-color: white;\n  }\n}\n\n/* Typography\n––––––––––––––––––––––––––––––––– */\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n  margin-bottom: 1rem;\n  margin-top: 1em;\n  font-weight: bold;\n}\n\nh1 {\n  font-size: 3.052rem;\n  letter-spacing: -0.04em;\n  line-height: 1;\n}\n\nh2 {\n  font-size: 2.441rem;\n  letter-spacing: -0.04em;\n  line-height: 1.2;\n}\n\nh3 {\n  font-size: 1.953rem;\n  letter-spacing: -0.03em;\n  line-height: 1.2;\n}\n\nh4 {\n  font-size: 1.563rem;\n  line-height: 1.3;\n}\n\nh5 {\n  font-size: 1.25rem;\n  line-height: 1.4;\n}\n\nh6 {\n  font-size: 1rem;\n  letter-spacing: 0;\n  line-height: 1.5;\n}\n\np {\n  margin-bottom: 1.563rem;\n}\n\np > *:last-child {\n  margin-bottom: 0;\n}\n\na {\n  color: inherit;\n  text-decoration: underline;\n  text-decoration-color: var(--text-decoration-color);\n  -webkit-text-decoration-color: var(--text-decoration-color);\n  border-radius: 5px;\n  text-underline-offset: 2px;\n  text-decoration-thickness: 2px;\n}\n\n@media (hover: hover) {\n  a:hover {\n    text-decoration-color: var(--gray-900);\n  }\n}\n\n@media (hover: hover) and (prefers-color-scheme: dark) {\n  a:hover {\n    text-decoration-color: white;\n  }\n}\n\n@media (prefers-color-scheme: dark) {\n  a {\n    text-decoration-color: var(--gray-600);\n    -webkit-text-decoration-color: var(--gray-600);\n  }\n}\n\na:focus-visible {\n  box-shadow: 0 0 0 2px var(--focus-ring-color);\n  outline: none;\n}\n\nsmall {\n  font-size: 0.888rem;\n}\n\nhr {\n  border: 1px solid var(--gray-700);\n  margin: 3.052rem 0;\n}\n\n/* Form\n––––––––––––––––––––––––––––––––– */\nlabel {\n  font-weight: bold;\n  display: flex;\n}\n\ninput[type='email'],\ninput[type='text'],\ninput[type='number'] {\n  padding: 0.65rem 0.5rem;\n  font-size: 1rem;\n  border: 2px solid var(--gray-200);\n  background-color: var(--gray-100);\n  color: var(--gray-800);\n  border-radius: var(--border-radius);\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-color-scheme: dark) {\n  input[type='email'],\n  input[type='text'],\n  input[type='number'] {\n    background-color: var(--gray-700);\n    border-color: var(--gray-700);\n    color: white;\n  }\n}\n\ninput[type='email']:hover,\ninput[type='text']:hover,\ninput[type='number']:hover,\ntextarea:hover {\n  border: 2px solid var(--gray-300);\n}\n\n@media (prefers-color-scheme: dark) {\n  input[type='email']:hover,\n  input[type='text']:hover,\n  input[type='number']:hover,\n  textarea:hover {\n    border: 2px solid var(--gray-600);\n  }\n}\n\nselect {\n  -webkit-appearance: none;\n  padding: 0.65rem 0.5rem;\n  font-size: 1rem;\n  border: 2px solid var(--gray-200);\n  border-radius: var(--border-radius);\n  color: var(--gray-700);\n  height: 2.5rem;\n  background-color: var(--gray-100);\n  background-image: url('data:image/svg+xml;utf8,<svg class=\"fill-current h-4 w-4\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\"><path d=\"M9.293 12.95l.707.707L15.657 8l-1.414-1.414L10 10.828 5.757 6.586 4.343 8z\"/></svg>');\n  background-repeat: no-repeat;\n  background-size: 1rem;\n  background-position: center right 0.5rem;\n}\n\n@media (prefers-color-scheme: dark) {\n  select {\n    background-color: var(--gray-700);\n    background-image: url('data:image/svg+xml;utf8,<svg class=\"fill-current h-4 w-4\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\"><path d=\"M9.293 12.95l.707.707L15.657 8l-1.414-1.414L10 10.828 5.757 6.586 4.343 8z\"/></svg>');\n    border-color: var(--gray-700);\n    color: white;\n  }\n}\n\nselect[multiple] {\n  height: auto;\n  background-image: none;\n  background-repeat: no-repeat;\n  background-size: auto;\n  background-position: initial;\n}\n\ntextarea {\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  font-size: 1rem;\n  border: 2px solid var(--gray-200);\n  color: var(--gray-700);\n  border-radius: var(--border-radius);\n  resize: vertical;\n  background-color: var(--gray-100);\n  box-sizing: border-box;\n  padding: 0.65rem 0.5rem;\n  font-family: -apple-system, BlinkMacSystemFont, 'avenir next', avenir,\n    'helvetica neue', helvetica, ubuntu, roboto, noto, 'segoe ui', arial,\n    sans-serif;\n}\n\n@media (prefers-color-scheme: dark) {\n  textarea {\n    background-color: var(--gray-700);\n    border-color: var(--gray-700);\n    color: white;\n  }\n}\n\ninput:focus,\nselect:focus,\ntextarea:focus,\ninput:hover:focus,\nselect:hover:focus,\ntextarea:hover:focus {\n  outline: none;\n  border: 2px solid var(--focus-ring-color);\n}\n\ninput:invalid,\nselect:invalid,\ntextarea:invalid {\n  border: 2px solid #ff7d87;\n  box-shadow: none;\n}\n\ninput[type='checkbox'] {\n  display: inline-block;\n  height: 1rem;\n  font-size: 1rem;\n  border-radius: 3px;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  border: 2px solid var(--gray-300);\n  width: 1rem;\n  background-color: white;\n  align-self: center;\n  margin-right: 0.5rem;\n}\n\n@media (prefers-color-scheme: dark) {\n  input[type='checkbox'] {\n    background-color: var(--gray-900);\n    border-color: white;\n  }\n}\n\ninput[type='checkbox']:hover {\n  cursor: pointer;\n  border: 2px solid var(--gray-300);\n}\n\ninput[type='checkbox']:checked {\n  background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"78.369\" height=\"78.369\" viewBox=\"0 0 78.369 78.369\"><path fill=\"white\" d=\"M78.05 19.015l-48.592 48.59c-.428.43-1.12.43-1.548 0L.32 40.016c-.427-.426-.427-1.12 0-1.547l6.704-6.704c.428-.427 1.12-.427 1.548 0l20.113 20.112 41.113-41.113c.43-.427 1.12-.427 1.548 0l6.703 6.704c.427.427.427 1.12 0 1.548z\"/></svg>');\n  background-size: contain;\n  background-color: var(--gray-700);\n  border: 2px solid var(--gray-700);\n}\n\ninput[type='checkbox']:focus-visible,\ninput[type='checkbox']:checked:focus-visible {\n  border-color: var(--focus-ring-color);\n}\n\n@media (prefers-color-scheme: dark) {\n  input[type='checkbox']:checked {\n    background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"78.369\" height=\"78.369\" viewBox=\"0 0 78.369 78.369\"><path fill=\"%23343434\" d=\"M78.05 19.015l-48.592 48.59c-.428.43-1.12.43-1.548 0L.32 40.016c-.427-.426-.427-1.12 0-1.547l6.704-6.704c.428-.427 1.12-.427 1.548 0l20.113 20.112 41.113-41.113c.43-.427 1.12-.427 1.548 0l6.703 6.704c.427.427.427 1.12 0 1.548z\"/></svg>');\n    background-color: white;\n    border: 2px solid white;\n  }\n}\n\ninput[type='radio'] {\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  border-radius: 50%;\n  border: 2px solid var(--gray-300);\n  height: 1rem;\n  width: 1rem;\n  margin-right: 0.5rem;\n  align-self: center;\n  justify-content: center;\n  position: relative;\n  display: flex;\n}\n\n@media (prefers-color-scheme: dark) {\n  input[type='radio'] {\n    border: 2px solid var(--gray-200);\n  }\n}\n\n@media (hover: hover) {\n  input[type='radio']:hover {\n    cursor: pointer;\n  }\n}\n\ninput[type='radio']:checked {\n  border: 2px solid var(--gray-700);\n}\n\ninput[type='radio']:focus-visible,\ninput[type='radio']:checked:focus-visible {\n  border-color: var(--focus-ring-color);\n}\n\n@media (prefers-color-scheme: dark) {\n  input[type='radio']:checked {\n    border: 2px solid white;\n  }\n}\n\ninput[type='radio']:checked::before {\n  content: '';\n  width: calc(100% - 4px);\n  height: calc(100% - 4px);\n  background-color: var(--gray-700);\n  align-self: center;\n  border-radius: 50%;\n}\n\n@media (prefers-color-scheme: dark) {\n  input[type='radio']:checked::before {\n    background-color: white;\n  }\n}\n\ninput[type='submit'],\ninput[type='reset'],\ninput[type='button'],\nbutton[type='submit'],\nbutton[type='reset'] {\n  padding: 0.5rem 1.25rem;\n  font-size: 1rem;\n  border-radius: var(--border-radius);\n  background-color: var(--gray-700);\n  border: 2px solid var(--gray-700);\n  color: white;\n  text-decoration: none;\n  font-weight: bold;\n  margin-bottom: 1rem;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  display: inline-block;\n  line-height: initial;\n  transition: background-color 200ms ease-in-out, border 200ms ease-in-out,\n    transform 200ms ease-in-out;\n  -webkit-touch-callout: none;\n  -webkit-user-select: none;\n  user-select: none;\n}\n\nbutton:hover {\n  cursor: pointer;\n}\ninput[type='submit']:hover,\ninput[type='button']:hover,\nbutton[type='submit']:hover {\n  background: var(--gray-900);\n}\n\n@media (prefers-color-scheme: dark) {\n  input[type='submit'],\n  input[type='button'],\n  button[type='submit'] {\n    background-color: white;\n    border: 2px solid white;\n    color: var(--gray-900);\n  }\n\n  input[type='submit']:hover,\n  input[type='button']:hover,\n  button[type='submit']:hover {\n    background-color: var(--gray-300);\n    border: 2px solid var(--gray-300);\n    cursor: pointer;\n  }\n}\n\nbutton:focus-visible,\ninput[type='submit']:focus-visible,\ninput[type='reset']:focus-visible,\ninput[type='button']:focus-visible {\n  border-color: var(--focus-ring-color);\n  outline: none;\n}\n\n/* Tables\n––––––––––––––––––––––––––––––––– */\ntable {\n  width: 100%;\n  border-spacing: 0;\n  margin-bottom: 1.563rem;\n  font-variant-numeric: tabular-nums;\n}\n\nth,\ntd {\n  padding: 0.5rem 0.5rem 0.5rem 0;\n  margin: 0;\n}\n\nth {\n  font-weight: bold;\n  text-align: left;\n  border-bottom: 2px solid var(--gray-300);\n  color: var(--gray-300);\n}\n\n@media (prefers-color-scheme: dark) {\n  th {\n    border-color: var(--gray-700);\n    color: var(--gray-700);\n  }\n}\n\ntd {\n  border-bottom: 2px solid var(--gray-300);\n}\n\n@media (prefers-color-scheme: dark) {\n  td {\n    border-color: var(--gray-700);\n  }\n}\n\n/* Code\n––––––––––––––––––––––––––––––––– */\ncode {\n  font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier,\n    monospace;\n  font-size: 0.8rem;\n  white-space: nowrap;\n  background: var(--gray-100);\n  padding: 0 0.328rem;\n  display: inline-block;\n  vertical-align: middle;\n  border-radius: var(--border-radius);\n}\n\n@media (prefers-color-scheme: dark) {\n  code {\n    background-color: var(--gray-700);\n  }\n}\n\np > code {\n  white-space: normal;\n}\n\npre > code {\n  line-height: 1.563em;\n  display: block;\n  padding: 1rem;\n  white-space: pre;\n  margin-bottom: 1.563rem;\n  overflow: scroll;\n}\n\n/* Forces a new-line at the end of a code block for layout purposes. */\npre > code::after {\n  content: ' ';\n}\n\n/* Blockquote\n––––––––––––––––––––––––––––––––– */\nblockquote {\n  border-left: 0.25rem solid var(--gray-100);\n  padding: 0 1rem;\n  margin-bottom: 1.563rem;\n}\n\n@media (prefers-color-scheme: dark) {\n  blockquote {\n    border-left: 0.25rem solid var(--gray-700);\n  }\n}\n\n/* List\n––––––––––––––––––––––––––––––––– */\nul {\n  margin: 0;\n  padding: 0 1px;\n  list-style: disc outside;\n  font-variant-numeric: tabular-nums;\n}\n\nol {\n  list-style: decimal outside;\n}\n\nol,\nul {\n  padding-left: 0;\n  margin-top: 0;\n  margin-bottom: 1.563rem;\n}\n\nli {\n  list-style-position: inside;\n}\n\n/* Keyboard\n––––––––––––––––––––––––––––––––– */\nkbd {\n  display: inline-block;\n  padding: 0 0.328rem;\n  font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier,\n    monospace;\n  font-size: 11px;\n  color: var(--gray-700);\n  vertical-align: middle;\n  background-color: var(--gray-100);\n  border: solid 1px var(--gray-300);\n  border-bottom: solid 2px var(--gray-500);\n  border-radius: 5px;\n}\n\n/* Abbreviation\n––––––––––––––––––––––––––––––––– */\nabbr {\n  text-decoration: none;\n  border-bottom: 2px dashed var(--gray-700);\n}\n\n@media (hover: hover) {\n  abbr:hover {\n    cursor: help;\n  }\n}\n\n.input-feedback {\n  color: red;\n  margin-top: 0.25rem;\n}\n\n.error {\n  color: red;\n}\n\n.success {\n  color: green;\n}\n\n.form-control {\n  margin-top: 1rem;\n}\n\n.valid input[type='email'],\n.valid input[type='text'],\n.valid input[type='number'] {\n  border-color: green;\n}\n\n.valid .feedback {\n  color: green;\n}\n\n.invalid input[type='email'],\n.invalid input[type='text'],\n.invalid input[type='number'] {\n  border-color: red;\n}\n\n.invalid .feedback {\n  color: red;\n}\n\nbutton:disabled {\n  opacity: 0.5;\n  cursor: not-allowed !important;\n}\n\nbutton + button {\n  margin-left: 0.5rem;\n}\n\nbutton.outline,\nbutton[type='reset'],\ninput[type='reset'] {\n  background-color: var(--gray-200);\n  border: 2px solid var(--gray-200);\n  color: var(--gray-900);\n}\nbutton.outline:hover,\nbutton[type='reset']:hover,\ninput[type='reset']:hover {\n  background-color: var(--gray-300);\n  border: 2px solid var(--gray-300);\n}\n\n@media (prefers-color-scheme: dark) {\n  button.outline,\n  button[type='reset'],\n  input[type='reset'] {\n    background-color: var(--gray-800);\n    border: 2px solid var(--gray-700);\n    color: var(--gray-100);\n  }\n\n  button.outline:hover,\n  button[type='reset']:hover,\n  input[type='reset']:hover {\n    background-color: var(--gray-900);\n    border: 2px solid var(--gray-700);\n    color: var(--gray-200);\n    cursor: pointer;\n  }\n}\n\ninput[type='email'],\ninput[type='text'],\ninput[type='number'],\ntextarea,\nselect {\n  width: 100%;\n}\n\nlabel.checkbox {\n  font-weight: normal;\n}\n\nbutton[type='submit'],\nbutton[type='reset'] {\n  margin-top: 1rem;\n  margin-bottom: 0;\n}\n\n.app {\n  margin: 0 auto;\n  max-width: 500px;\n  padding: 1rem;\n}\n\n.example {\n  padding: 1rem;\n  border: 1px solid var(--gray-200);\n  border-radius: var(--border-radius);\n}\n\n.example label:first-child,\n.example .form-control:first-child {\n  margin-top: 0;\n}\n\n@media (prefers-color-scheme: dark) {\n  .example {\n    border: 1px solid var(--gray-700);\n  }\n}\n\n.text-xs {\n  font-size: 0.75rem;\n}\n.text-sm {\n  font-size: 0.875rem;\n}\n.text-base {\n  font-size: 1rem;\n}\n.text-lg {\n  font-size: 1.125rem;\n}\n.text-xl {\n  font-size: 1.25rem;\n}\n.text-2xl {\n  font-size: 1.5rem;\n}\n.text-3xl {\n  font-size: 1.875rem;\n}\n.text-4xl {\n  font-size: 2.25rem;\n}\n.text-5xl {\n  font-size: 3rem;\n}\n.text-6xl {\n  font-size: 4rem;\n}\n\n.flex {\n  display: flex;\n}\n\n.space-between {\n  justify-content: space-between;\n}\n\n.items-center {\n  align-items: center;\n}\n\n.mt-1 {\n  margin-top: 1rem;\n}\n"
  },
  {
    "path": "examples/radio-group/README.md",
    "content": "# Formik Radio Group Example\n\nThis example demonstrates how to create a radio group with Formik.\n\n[![Edit formik-example-radio-group](https://codesandbox.io/static/img/play-codesandbox.svg)](https://codesandbox.io/s/github/jaredpalmer/formik/tree/master/examples/radio-group?fontsize=14&hidenavigation=1&theme=dark)\n"
  },
  {
    "path": "examples/radio-group/index.js",
    "content": "import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Formik, Field, Form } from 'formik';\n\nconst Example = () => (\n  <div>\n    <h1>Sign Up</h1>\n    <Formik\n      initialValues={{\n        picked: '',\n      }}\n      onSubmit={async (values) => {\n        await new Promise((r) => setTimeout(r, 500));\n        alert(JSON.stringify(values, null, 2));\n      }}\n    >\n      {({ values }) => (\n        <Form>\n          <div id=\"my-radio-group\">Picked</div>\n          <div role=\"group\" aria-labelledby=\"my-radio-group\">\n            <label>\n              <Field type=\"radio\" name=\"picked\" value=\"One\" />\n              One\n            </label>\n            <label>\n              <Field type=\"radio\" name=\"picked\" value=\"Two\" />\n              Two\n            </label>\n            <div>Picked: {values.picked}</div>\n          </div>\n\n          <button type=\"submit\">Submit</button>\n        </Form>\n      )}\n    </Formik>\n  </div>\n);\n\nReactDOM.render(<Example />, document.getElementById('root'));\n"
  },
  {
    "path": "examples/radio-group/package.json",
    "content": "{\n  \"name\": \"formik-example-radio-group\",\n  \"version\": \"0.1.0\",\n  \"description\": \"This example demonstrates how to create a radio group with Formik\",\n  \"main\": \"index.js\",\n  \"dependencies\": {\n    \"react\": \"^16.12.0\",\n    \"react-dom\": \"^16.12.0\",\n    \"react-scripts\": \"3.3.0\",\n    \"formik\": \"latest\"\n  },\n  \"prettier\": {\n    \"trailingComma\": \"es5\",\n    \"singleQuote\": true,\n    \"semi\": true\n  }\n}\n"
  },
  {
    "path": "examples/with-material-ui/README.md",
    "content": "# Formik with Material UI\n\nThis example demonstrates how to use Formik with Material UI\n\n<!-- TODO add codesandbox link -->\n"
  },
  {
    "path": "examples/with-material-ui/index.js",
    "content": "import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { useFormik } from 'formik';\nimport * as yup from 'yup';\nimport Button from '@material-ui/core/Button';\nimport TextField from '@material-ui/core/TextField';\n\nconst validationSchema = yup.object({\n  email: yup\n    .string('Enter your email')\n    .email('Enter a valid email')\n    .required('Email is required'),\n  password: yup\n    .string('Enter your password')\n    .min(8, 'Password should be of minimum 8 characters length')\n    .required('Password is required'),\n});\n\nconst WithMaterialUI = () => {\n  const formik = useFormik({\n    initialValues: {\n      email: 'foobar@example.com',\n      password: 'foobar',\n    },\n    validationSchema: validationSchema,\n    onSubmit: (values) => {\n      alert(JSON.stringify(values, null, 2));\n    },\n  });\n\n  return (\n    <div>\n      <form onSubmit={formik.handleSubmit}>\n        <TextField\n          fullWidth\n          id=\"email\"\n          name=\"email\"\n          label=\"Email\"\n          value={formik.values.email}\n          onChange={formik.handleChange}\n          onBlur={formik.handleBlur}\n          error={formik.touched.email && Boolean(formik.errors.email)}\n          helperText={formik.touched.email && formik.errors.email}\n        />\n        <TextField\n          fullWidth\n          id=\"password\"\n          name=\"password\"\n          label=\"Password\"\n          type=\"password\"\n          value={formik.values.password}\n          onChange={formik.handleChange}\n          onBlur={formik.handleBlur}\n          error={formik.touched.password && Boolean(formik.errors.password)}\n          helperText={formik.touched.password && formik.errors.password}\n        />\n        <Button color=\"primary\" variant=\"contained\" fullWidth type=\"submit\">\n          Submit\n        </Button>\n      </form>\n    </div>\n  );\n};\n\nReactDOM.render(<WithMaterialUI />, document.getElementById('root'));\n"
  },
  {
    "path": "examples/with-material-ui/package.json",
    "content": "{\n  \"name\": \"formik-example-with-material-ui\",\n  \"version\": \"0.1.0\",\n  \"description\": \"This example demonstrates how to use Formik with Material UI\",\n  \"main\": \"index.js\",\n  \"dependencies\": {\n    \"@material-ui/core\": \"4.11.0\",\n    \"formik\": \"latest\",\n    \"react\": \"17.0.0\",\n    \"react-dom\": \"17.0.0\",\n    \"react-scripts\": \"3.4.3\",\n    \"yup\": \"0.29.3\"\n  },\n  \"prettier\": {\n    \"trailingComma\": \"es5\",\n    \"singleQuote\": true,\n    \"semi\": true\n  }\n}\n"
  },
  {
    "path": "examples/withFormik.js",
    "content": "import React from 'react';\nimport * as Yup from 'yup';\nimport { withFormik, ErrorMessage } from '../src/formik';\nimport { Debug } from './Debug';\n\nconst formikEnhancer = withFormik({\n  mapPropsToValues: props => ({ email: props.user.email }),\n  validationSchema: Yup.object().shape({\n    email: Yup.string()\n      .email('Invalid email address')\n      .required('Email is required!'),\n  }),\n  handleSubmit: (values, { setSubmitting }) => {\n    setTimeout(() => {\n      alert(JSON.stringify(values, null, 2));\n      setSubmitting(false);\n    }, 1000);\n  },\n  displayName: 'MyForm', // helps with React DevTools\n});\n\nconst MyForm = props => {\n  const {\n    values,\n    touched,\n    errors,\n    dirty,\n    isSubmitting,\n    handleChange,\n    handleBlur,\n    handleSubmit,\n    handleReset,\n  } = props;\n  return (\n    <Form>\n      <label htmlFor=\"email\">Email</label>\n      <Field name=\"email\" placeholder=\"jane@acme.com\" type=\"email\" />\n      <div>\n        <ErrorMessage name=\"email\" />\n      </div>\n      <button\n        type=\"button\"\n        className=\"outline\"\n        onClick={handleReset}\n        disabled={!dirty || isSubmitting}\n      >\n        Reset\n      </button>\n      <button type=\"submit\" disabled={isSubmitting}>\n        Submit\n      </button>\n      <Debug />\n    </Form>\n  );\n};\n\nexport default formikEnhancer(MyForm);\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"formik-project\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"packageManager\": \"yarn@1.22.22\",\n  \"resolutions\": {\n    \"shelljs\": \"0.8.5\",\n    \"typescript\": \"^4.0.0\"\n  },\n  \"devDependencies\": {\n    \"@changesets/changelog-github\": \"^0.5.1\",\n    \"@changesets/cli\": \"^2.29.7\",\n    \"@hookform/resolvers\": \"^3.1.1\",\n    \"@playwright/test\": \"^1.34.3\",\n    \"@types/benchmark\": \"^2.1.2\",\n    \"@types/jest\": \"^25.0.0\",\n    \"benchmark\": \"^2.1.4\",\n    \"esm\": \"^3.2.25\",\n    \"husky\": \"^4.3.0\",\n    \"lint-staged\": \"^10.4.0\",\n    \"prettier\": \"^2.1.2\",\n    \"react-hook-form\": \"^7.45.0\",\n    \"tslib\": \"^2.5.3\",\n    \"tsx\": \"^4.19.0\",\n    \"turbo\": \"^2.6.0\"\n  },\n  \"workspaces\": [\n    \"packages/*\",\n    \"website\"\n  ],\n  \"scripts\": {\n    \"dev\": \"turbo run start\",\n    \"test\": \"turbo run test --filter='./packages/*' --\",\n    \"build\": \"turbo run build\",\n    \"build:benchmark\": \"yarn build --filter=formik\",\n    \"build:codesandbox\": \"yarn build --filter='./packages/*'\",\n    \"prepublish\": \"turbo run build --filter='./packages/*'\",\n    \"format\": \"prettier --write 'examples/**/*' 'packages/*/src/**/*' 'website/src/**/*.{ts,tsx,js,jsx,md,mdx}' 'app/pages/**/*'  'packages/*/test/**/*' 'README.md'\",\n    \"changeset\": \"changeset\",\n    \"release\": \"changeset publish\",\n    \"git-reset\": \"git reset --hard HEAD\",\n    \"git-clean\": \"git clean -d -x -e node_modules -e packages -f\",\n    \"e2e\": \"playwright test\",\n    \"precommit\": \"lint-staged\",\n    \"e2e:ui\": \"playwright test --ui\",\n    \"start:app\": \"turbo run build --filter formik... && yarn --cwd packages/formik link && yarn --cwd ./app link formik && yarn --cwd ./app && yarn --cwd ./app run dev\",\n    \"benchmark\": \"tsx scripts/benchmark.tsx | tee output.txt\"\n  },\n  \"lint-staged\": {\n    \"**/*.{ts,tsx,md,mdx,js,jsx}\": [\n      \"npm run format\",\n      \"tsdx lint\"\n    ]\n  }\n}\n"
  },
  {
    "path": "packages/formik/.gitignore",
    "content": "node_modules\ndist\ncompiled\n*.log\ncoverage\n.DS_Store\nnext.d.ts\nlegacy.d.ts\n.idea\n*.orig\n.DS_Store\n\nnode_modules\n\nlib/core/metadata.js\nlib/core/MetadataBlog.js\n\nwebsite/translated_docs\nwebsite/build/\nwebsite/yarn.lock\nwebsite/node_modules\nwebsite/i18n/*\n.rts2_cache_es\n.rts2_cache_esm\n.rts2_cache_cjs\n.rts2_cache_umd"
  },
  {
    "path": "packages/formik/CHANGELOG.md",
    "content": "# formik\n\n## 2.4.9\n\n### Patch Changes\n\n- [#4051](https://github.com/jaredpalmer/formik/pull/4051) [`8f9d04d`](https://github.com/jaredpalmer/formik/commit/8f9d04d206146ca941facf37ddd9ddb459c459dc) Thanks [@Moumouls](https://github.com/Moumouls)! - fix: jsx ref for react 19\n\n## 2.4.8\n\n### Patch Changes\n\n- [#4042](https://github.com/jaredpalmer/formik/pull/4042) [`1de45de`](https://github.com/jaredpalmer/formik/commit/1de45decf8fd70c038fca88dc1a6543aac269553) Thanks [@copilot-swe-agent](https://github.com/apps/copilot-swe-agent)! - Replace JSX.IntrinsicElements with React.JSX.IntrinsicElements for React 19 compatibility. The global JSX namespace was removed in React 19, so we now use React.JSX.IntrinsicElements instead.\n\n## 2.4.7\n\n### Patch Changes\n\n- [`99dbc24`](https://github.com/jaredpalmer/formik/commit/99dbc24ce714387b27425df48abb7676bb8b582c) [#3968](https://github.com/jaredpalmer/formik/pull/3968) Thanks [@ChronicusUA](https://github.com/ChronicusUA)! - Value of setFieldValue can be a function that takes previous field value\n\n## 2.4.6\n\n### Patch Changes\n\n- [`f57ca9b`](https://github.com/jaredpalmer/formik/commit/f57ca9bc5ee3842d50f74f39b3fb36a744b55ae8) [#3949](https://github.com/jaredpalmer/formik/pull/3949) Thanks [@DeveloperRaj](https://github.com/DeveloperRaj)! - Changing the state inside formik was changing reference of initialValues provided via props, deep cloning the initialvalues will fix it.\n\n## 2.4.5\n\n### Patch Changes\n\n- [`d7db9cd`](https://github.com/jaredpalmer/formik/commit/d7db9cddba9008714f2853013d5d4e82c8c94558) [#3860](https://github.com/jaredpalmer/formik/pull/3860) Thanks [@patik](https://github.com/patik)! - Add missing dependency `@types/hoist-non-react-statics`, closes #3837\n\n* [`fe4ed7e`](https://github.com/jaredpalmer/formik/commit/fe4ed7e048b14331a75e40cabf48e4787d9b2b71) [#3501](https://github.com/jaredpalmer/formik/pull/3501) Thanks [@markspolakovs](https://github.com/markspolakovs)! - Mark `formik` as side-effect free in `package.json`\n\n## 2.4.4\n\n### Patch Changes\n\n- [`41720c2`](https://github.com/jaredpalmer/formik/commit/41720c2f69407e41c27b325923bce63436b07f45) [#3862](https://github.com/jaredpalmer/formik/pull/3862) Thanks @yazaldefilimonepinto! - Forward `className` for custom components used with `Field`\n\n- [`da58b29`](https://github.com/jaredpalmer/formik/commit/da58b292c9c0b6029ae21ab4b5edff09dd877c1b) [#3858](https://github.com/jaredpalmer/formik/pull/3858) Thanks @alaanescobedo! - Remove use of deprecated `StatelessComponent` type in favor of `FunctionComponent`\n\n- [`5c01ee7`](https://github.com/jaredpalmer/formik/commit/5c01ee77b312ff6c375d43f841fe9fbe5846ebd9) [#3872](https://github.com/jaredpalmer/formik/pull/3872) Thanks @rajpatelbot! - FIX: Fixed resetForm function dependency issue\n\n## 2.4.3\n\n### Patch Changes\n\n- [`9e0a661`](https://github.com/jaredpalmer/formik/commit/9e0a661513af75d1b848e5be7a4916c53b78760f) [#3843](https://github.com/jaredpalmer/formik/pull/3843) Thanks [@bonimba](https://github.com/bonimba)! - Fix FormikHelper and FieldHelperProps types\n\n## 2.4.2\n\n### Patch Changes\n\n- [`96280d3`](https://github.com/jaredpalmer/formik/commit/96280d388eaa0f2e9fb84e7fd2aa45450de3a949) [#3817](https://github.com/jaredpalmer/formik/pull/3817) Thanks [@quantizor](https://github.com/quantizor)! - Updated internal types to support React 18.\n\n## 2.4.1\n\n### Patch Changes\n\n- [`2b194c2`](https://github.com/jaredpalmer/formik/commit/2b194c287dc281ec2a8ff691d75c6b798ab5f70c) [#3808](https://github.com/jaredpalmer/formik/pull/3808) Thanks [@NagaiKoki](https://github.com/NagaiKoki)! - fix type of setFieldValue function\n\n* [`708bcb2`](https://github.com/jaredpalmer/formik/commit/708bcb24785f1f8fbb5dfd649de3df4fddf7a113) [#3813](https://github.com/jaredpalmer/formik/pull/3813) Thanks [@quantizor](https://github.com/quantizor)! - Revert `FieldArray` \"shouldComponentUpdate\" performance optimization. As it turns out, it's a common use case to have JSX controlled via non-Formik state/props inside of `FieldArray`, so it's not safe to cancel re-renders here.\n\n- [`187e47d`](https://github.com/jaredpalmer/formik/commit/187e47de0c4289cb279e25d69f8172cfa14369d2) [#3815](https://github.com/jaredpalmer/formik/pull/3815) Thanks [@quantizor](https://github.com/quantizor)! - Revert Yup transform support for the time being, this may be re-introduced in a future release under an opt-in prop.\n\n## 2.4.0\n\n### Minor Changes\n\n- [`2f53b70`](https://github.com/jaredpalmer/formik/commit/2f53b70ef9c086a268330fa263390a2edd0164dd) [#3796](https://github.com/jaredpalmer/formik/pull/3796) Thanks [@quantizor](https://github.com/quantizor)! - Add support for Yup [\"transforms\"](https://github.com/jquense/yup#parsing-transforms).\n\n## 2.3.3\n\n### Patch Changes\n\n- [`f075a0c`](https://github.com/jaredpalmer/formik/commit/f075a0cf8228c135ff71c58e139246ad24aae529) [#3798](https://github.com/jaredpalmer/formik/pull/3798) Thanks [@quantizor](https://github.com/quantizor)! - Fixed the use of generics for the `ArrayHelpers` type such that `any[]` is the default array type and for each individual method the array item type can be overridden if necessary.\n\n## 2.3.2\n\n### Patch Changes\n\n- [`f086b5a`](https://github.com/jaredpalmer/formik/commit/f086b5a3bb6a155b4dc4ac3735c88805f9f5c4e4) [#3237](https://github.com/jaredpalmer/formik/pull/3237) Thanks [@pieplu](https://github.com/pieplu)! - Changed `getIn` to return undefined when it can't find a value AND a parent of that value is \"falsy\" ( \"\" / 0 / null / false )\n\n* [`6d8f018`](https://github.com/jaredpalmer/formik/commit/6d8f018d7f52b863405b2e310be4b4195c2ba39c) [#3792](https://github.com/jaredpalmer/formik/pull/3792) Thanks [@quantizor](https://github.com/quantizor)! - Update the type for `setFieldValue` to reflect the returned `Promise` and potential returned error(s).\n\n## 2.3.1\n\n### Patch Changes\n\n- [`290d92b`](https://github.com/jaredpalmer/formik/commit/290d92b34056593f551ad55baf00dc6f8c700bbe) [#3793](https://github.com/jaredpalmer/formik/pull/3793) Thanks [@quantizor](https://github.com/quantizor)! - Fix potential infinite loop scenario when `initialValues` changes but `enableReinitialize` is not truthy.\n\n## 2.3.0\n\n### Minor Changes\n\n- [`73de78d`](https://github.com/jaredpalmer/formik/commit/73de78d169f0bc25bd84dff0beaed3cc7a2cbb11) [#3788](https://github.com/jaredpalmer/formik/pull/3788) Thanks [@quantizor](https://github.com/quantizor)! - Added typescript generics to `ArrayHelpers` interface and its methods so that users who use TypeScript can set the type for their arrays and have type safety on array utils. I have also gone ahead and made supplying a type for the generic optional for the sake of backwards compatibility so any existing TS code that does not give a type for the FieldArray will continue to work as they always have.\n\n* [`39a7bf7`](https://github.com/jaredpalmer/formik/commit/39a7bf7ca31f2ef5b149a8ff02bab64667e19654) [#3786](https://github.com/jaredpalmer/formik/pull/3786) Thanks [@quantizor](https://github.com/quantizor)! - Yup by default only allows for cross-field validation within the\n  same field object. This is not that useful in most scenarios because\n  a sufficiently-complex form will have several `yup.object()` in the\n  schema.\n\n  ```ts\n  const deepNestedSchema = Yup.object({\n    object: Yup.object({\n      nestedField: Yup.number().required(),\n    }),\n    object2: Yup.object({\n      // this doesn't work because `object.nestedField` is outside of `object2`\n      nestedFieldWithRef: Yup.number()\n        .min(0)\n        .max(Yup.ref('object.nestedField')),\n    }),\n  });\n  ```\n\n  However, Yup offers something called `context` which can operate across\n  the entire schema when using a \\$ prefix:\n\n  ```ts\n  const deepNestedSchema = Yup.object({\n    object: Yup.object({\n      nestedField: Yup.number().required(),\n    }),\n    object2: Yup.object({\n      // this works because of the \"context\" feature, enabled by $ prefix\n      nestedFieldWithRef: Yup.number()\n        .min(0)\n        .max(Yup.ref('$object.nestedField')),\n    }),\n  });\n  ```\n\n  With this change, you may now validate against any field in the entire schema,\n  regardless of position when using the \\$ prefix.\n\n## 2.2.10\n\n### Patch Changes\n\n- [`22e236e`](https://github.com/jaredpalmer/formik/commit/22e236ed8035c7c5824232202c8ce52193338d5a) [#3784](https://github.com/jaredpalmer/formik/pull/3784) Thanks [@quantizor](https://github.com/quantizor)! - Improve performance of the `FieldArray` component by adding a `shouldComponentUpdate` check; this should help avoid unnecessary re-renders which may affect the performance of a form.\n\n* [`bc9cb28`](https://github.com/jaredpalmer/formik/commit/bc9cb28df7ad07277a499e8301cfd1bb7b230b86) [#3785](https://github.com/jaredpalmer/formik/pull/3785) Thanks [@quantizor](https://github.com/quantizor)! - Fixed field error state for array fields that have an error and become empty through an API like `arrayHelpers.remove`.\n\n  The prior behavior resolved the field error to `[undefined]`, now it is simply `undefined`.\n\n- [`9cbf150`](https://github.com/jaredpalmer/formik/commit/9cbf150e65d7c5498900f19b4fa1897ca8a2c87f) [#3787](https://github.com/jaredpalmer/formik/pull/3787) Thanks [@quantizor](https://github.com/quantizor)! - Fix infinite loop issue in `Field` when field helpers (`setTouched`, etc) are used as an argument in `React.useEffect`.\n\n* [`9c75a9f`](https://github.com/jaredpalmer/formik/commit/9c75a9f639eb38ad55c351e5e1def8a7e5ebd1f3) [#3780](https://github.com/jaredpalmer/formik/pull/3780) Thanks [@quantizor](https://github.com/quantizor)! - Fixed an issue with array field errors being incorrectly split into an array of individual characters instead of an array of error strings.\n\n- [`35fa4cc`](https://github.com/jaredpalmer/formik/commit/35fa4cc38260d709a5570dd3c9ef82831758a5f5) [#3783](https://github.com/jaredpalmer/formik/pull/3783) Thanks [@quantizor](https://github.com/quantizor)! - Fix validation of deep.dot.path field references when using the `validateField` API.\n\n## 2.2.9\n\n### Patch Changes\n\n- [`ca60ef9`](https://github.com/formium/formik/commit/ca60ef9517fdefdf928b627dd1c0039fe6febd5d) [#3227](https://github.com/formium/formik/pull/3227) Thanks [@johnrom](https://github.com/johnrom)! - Bump lodash and lodash-es to latest versions.\n\n## 2.2.8\n\n### Patch Changes\n\n- [`3a9c707`](https://github.com/formium/formik/commit/3a9c707c8eec200d6eae2955536fb987daf38854) [#3203](https://github.com/formium/formik/pull/3203) Thanks [@hixus](https://github.com/hixus)! - Fixes type of setError value as it is same as setFieldError message\n\n## 2.2.7\n\n### Patch Changes\n\n- [`e50040a`](https://github.com/formium/formik/commit/e50040abe49cf7bb46580ea46af6a2b487539830) [#2881](https://github.com/formium/formik/pull/2881) Thanks [@jinmayamashita](https://github.com/jinmayamashita)! - Prevent calling getSelectedValues when the element has not options\n\n* [`31405ab`](https://github.com/formium/formik/commit/31405abfc9373b2236eecf0f34f630906579e193) [#3201](https://github.com/formium/formik/pull/3201) Thanks [@artola](https://github.com/artola)! - Fixes regression that resulted in error update race condition from when using `validateOnMount`\n\n- [`c2d6926`](https://github.com/formium/formik/commit/c2d692659dc0c1ee43f7e9f60e18c36e0701eefe) [#2995](https://github.com/formium/formik/pull/2995) Thanks [@johnrom](https://github.com/johnrom)! - Allow explicitly setting `<form action>` to empty string (#2981). Note: previous code which passed an empty string would result in a noop (simply appending # to the url), but this will now result in a form submission to the current page.\n\n## 2.2.6\n\n### Patch Changes\n\n- [`d4314a1`](https://github.com/formium/formik/commit/d4314a14cac4bfb0b2c2f1e5cf07a4fc3fb2d2d8) [#2955](https://github.com/formium/formik/pull/2955) Thanks [@jkbktl](https://github.com/jkbktl)! - fix(docs): fix link to docs in console warning\n\n## 2.2.5\n\n### Patch Changes\n\n- [`ebad985`](https://github.com/formium/formik/commit/ebad98569e034c5bd8f52a7926480b7d63127cd4) [#2891](https://github.com/formium/formik/pull/2891) Thanks [@jaredpalmer](https://github.com/jaredpalmer)! - Remove low-priority validation implementation\n\n* [`0dfa23b`](https://github.com/formium/formik/commit/0dfa23b6b312db1f2c3d22019975212f0f901c00) [#2889](https://github.com/formium/formik/pull/2889) Thanks [@jaredpalmer](https://github.com/jaredpalmer)! - Fixed botched typescript builds including scheduler types\n\n## 2.2.4\n\n### Patch Changes\n\n- [`199e77a`](https://github.com/formium/formik/commit/199e77a3f69e9886d88fc7114c37769cd365d9c6) [#2882](https://github.com/formium/formik/pull/2882) Thanks [@umidbekkarimov](https://github.com/umidbekkarimov)! - Validate `setFieldTouched` with high priority\n\n## 2.2.3\n\n### Patch Changes\n\n- [`e0a28e6`](https://github.com/formium/formik/commit/e0a28e6872ebfd06e636aac84829b60d704b0694) [#2867](https://github.com/formium/formik/pull/2867) Thanks [@umidbekkarimov](https://github.com/umidbekkarimov)! - Fix low priority validation for browser password autofill.\n\n* [`958d67c`](https://github.com/formium/formik/commit/958d67ca2c3e006031c31150ea0a42248b28ffc7) [#2874](https://github.com/formium/formik/pull/2874) Thanks [@maddhruv](https://github.com/maddhruv)! - fix FastField initial value when input type is radio or checkbox\n\n## 2.2.2\n\n### Patch Changes\n\n- [`00f95ec`](https://github.com/formium/formik/commit/00f95ec4ec5266eed8ad4e97b76321205c704d51) [#2854](https://github.com/formium/formik/pull/2854) Thanks [@umidbekkarimov](https://github.com/umidbekkarimov)! - Fix low priority validation race condition.\n\n## 2.2.1\n\n### Patch Changes\n\n- [`e04886d`](https://github.com/formium/formik/commit/e04886db15c7e9b96516b4bd5a1b89d0e895bb7d) [#2820](https://github.com/formium/formik/pull/2820) Thanks [@wellyshen](https://github.com/wellyshen)! - Fixed bug with scheduler and `validateFormWithLowPriority` method not be scheduled correctly\n\n## 2.2.0\n\n### Minor Changes\n\n- [`4148181`](https://github.com/formium/formik/commit/41481819f9187de79c4d948aeaa4ca1d33c53ed7) [#2794](https://github.com/formium/formik/pull/2794) Thanks [@jaredpalmer](https://github.com/jaredpalmer)! - `setValue` can now optionally accept a function as a callback, exposing `React.SetStateAction` functionality. Previously, only the entire object was\n  allowed which caused issues with stale props.\n\n  ```tsx\n  setValues(prevValues => ({...prevValues, ... }))\n  ```\n\n## 2.1.7\n\n### Patch Changes\n\n- [`bda9f41`](https://github.com/formium/formik/commit/bda9f41931fac382eec26b4f1283b881b6bbc240) [#2785](https://github.com/formium/formik/pull/2785) Thanks [@jaredpalmer](https://github.com/jaredpalmer)! - Replace all instances of the deprecated React.SFC type with React.FC\n"
  },
  {
    "path": "packages/formik/MIGRATING-v2.md",
    "content": "## Breaking Changes\n\n### Minimum Requirements\n\n- Since Formik 2 is built on top of React Hooks, you must be on React 16.8.x or higher\n- Since Formik 2 uses the `unknown` type, you must be on TypeScript 3.0 or higher (if you use TypeScript)\n\n**There are a few breaking changes in Formik 2.x.** Luckily, these probably won't impact many people:\n\n### `resetForm`\n\nBecause we introduced `initialErrors`, `initialTouched`, `initialStatus` props, `resetForm`'s signature has changed. It now accepts the next initial state of Formik (instead of just the next initial values).\n\n### `setError`\n\nPlease use Formik's `setStatus(status)` instead. It works identically.\n\n### `validate`\n\nAs you may know, you can return a Promise of a validation error from `validate`. In 1.x, it didn't matter if this promise is resolved or rejected as in both cases the payload of the promise was interpreted as the validation error. In 2.x, rejection will be interpreted as an actual exception and it won't update the form error state. Any validation function that returns a rejected promise of errors needs to be adjusted to return a resolved promise of errors instead.\n\n### `ref`\n\nCurrently, you can't attach a ref to Formik using the `ref` prop. However, you still can get around this issue using the prop `innerRef`. We have some WIP [#2208](https://github.com/jaredpalmer/formik/issues/2208) to instead use `React.forwardRef`.\n\n**v1**\n\n```tsx\nresetForm(nextValues);\n```\n\n**v2**\n\n```tsx\nresetForm({ values: nextValues /* errors, touched, etc ... */ });\n```\n\n### Typescript changes\n\n#### `FormikActions`\n\n**`FormikActions` has been renamed to `FormikHelpers`** It should be a straightforward change to import or alias the type\n\n**v1**\n\n```tsx\nimport { FormikActions } from 'formik';\n```\n\n**v2**\n\n```tsx\nimport { FormikHelpers as FormikActions } from 'formik';\n```\n\n#### `FieldProps`\n\n**`FieldProps` now accepts two generic type parameters.** Both parameters are optional, but `FormValues` has been moved from the first to the second parameter.\n\n**v1**\n\n```tsx\ntype Props = FieldProps<FormValues>;\n```\n\n**v2**\n\n```tsx\ntype Props = FieldProps<FieldValue, FormValues>;\n```\n\n## What's New?\n\n### Checkboxes and Select multiple\n\nSimilarly to Angular, Vue, or Svelte, Formik 2 \"fixes\" React checkboxes and multi-selects with built-in array binding and boolean behavior. This was one of the most confusing things for people in Formik 1.x.\n\n```jsx\nimport React from 'react';\nimport { Formik, Field, Form } from 'formik';\nimport { Debug } from './Debug';\n\nconst sleep = ms => new Promise(resolve => setTimeout(resolve, ms));\n\nconst CheckboxExample = () => (\n  <div>\n    <h1>Checkboxes</h1>\n    <p>\n      This example demonstrates how to properly create checkboxes with Formik.\n    </p>\n    <Formik\n      initialValues={{\n        isAwesome: false,\n        terms: false,\n        newsletter: false,\n        jobType: ['designer'],\n        location: [],\n      }}\n      onSubmit={async values => {\n        await sleep(1000);\n        alert(JSON.stringify(values, null, 2));\n      }}\n    >\n      {({ isSubmitting, getFieldProps, handleChange, handleBlur, values }) => (\n        <Form>\n          {/* \n            This first checkbox will result in a boolean value being stored.\n          */}\n          <div className=\"label\">Basic Info</div>\n          <label>\n            <Field type=\"checkbox\" name=\"isAwesome\" />\n            Are you awesome?\n          </label>\n          {/* \n            Multiple checkboxes with the same name attribute, but different\n            value attributes will be considered a \"checkbox group\". Formik will automagically\n            bind the checked values to a single array for your benefit. All the add and remove\n            logic will be taken care of for you.\n          */}\n          <div className=\"label\">\n            What best describes you? (check all that apply)\n          </div>\n          <label>\n            <Field type=\"checkbox\" name=\"jobType\" value=\"designer\" />\n            Designer\n          </label>\n          <label>\n            <Field type=\"checkbox\" name=\"jobType\" value=\"developer\" />\n            Developer\n          </label>\n          <label>\n            <Field type=\"checkbox\" name=\"jobType\" value=\"product\" />\n            Product Manager\n          </label>\n          {/*\n           You do not _need_ to use <Field>/useField to get this behavior, \n           using handleChange, handleBlur, and values works as well. \n          */}\n          <label>\n            <input\n              type=\"checkbox\"\n              name=\"jobType\"\n              value=\"founder\"\n              checked={values.jobType.includes('founder')}\n              onChange={handleChange}\n              onBlur={handleBlur}\n            />\n            CEO / Founder\n          </label>\n\n          {/* \n           The <select> element will also behave the same way if \n           you pass `multiple` prop to it. \n          */}\n          <label htmlFor=\"location\">Where do you work?</label>\n          <Field\n            component=\"select\"\n            id=\"location\"\n            name=\"location\"\n            multiple={true}\n          >\n            <option value=\"NY\">New York</option>\n            <option value=\"SF\">San Francisco</option>\n            <option value=\"CH\">Chicago</option>\n            <option value=\"OTHER\">Other</option>\n          </Field>\n          <label>\n            <Field type=\"checkbox\" name=\"terms\" />I accept the terms and\n            conditions.\n          </label>\n          {/* Here's how you can use a checkbox to show / hide another field */}\n          {!!values.terms ? (\n            <div>\n              <label>\n                <Field type=\"checkbox\" name=\"newsletter\" />\n                Send me the newsletter <em style={{ color: 'rebeccapurple' }}>\n                  (This is only shown if terms = true)\n                </em>\n              </label>\n            </div>\n          ) : null}\n          <button type=\"submit\" disabled={isSubmitting}>\n            Submit\n          </button>\n          <Debug />\n        </Form>\n      )}\n    </Formik>\n  </div>\n);\n\nexport default CheckboxExample;\n```\n\n### `useField()`\n\nJust what you think, it's like `<Field>`, but with a hook. See docs for usage.\n\n### `useFormikContext()`\n\nA hook that is equivalent to `connect()`.\n\n### `<Field as>`\n\n`<Field/>` now accepts a prop called `as` which will inject `onChange`, `onBlur`, `value` etc. directly through to the component or string. This is useful for folks using Emotion or Styled components as they no longer need to clean up `component`'s render props in a wrapped function.\n\n### Misc\n\n- `FormikContext` is now exported\n- `validateOnMount?: boolean = false`\n- `initialErrors`, `initialTouched`, `initialStatus` have been added\n\n```jsx\n// <input className=\"form-input\" placeholder=\"Jane\"  />\n<Field name=\"firstName\" className=\"form-input\" placeholder=\"Jane\" />\n\n// <textarea className=\"form-textarea\"/></textarea>\n<Field name=\"message\" as=\"textarea\"  className=\"form-textarea\"/>\n\n// <select className=\"my-select\"/>\n<Field name=\"colors\" as=\"select\" className=\"my-select\">\n  <option value=\"red\">Red</option>\n  <option value=\"green\">Green</option>\n  <option value=\"blue\">Blue</option>\n</Field>\n\n// with styled-components/emotion\nconst MyStyledInput = styled.input`\n  padding: .5em;\n  border: 1px solid #eee;\n  /* ... */\n`\nconst MyStyledTextarea = MyStyledInput.withComponent('textarea');\n\n// <input className=\"czx_123\" placeholder=\"google.com\"  />\n<Field name=\"website\" as={MyStyledInput} placeholder=\"google.com\"/>\n\n// <textarea placeholder=\"Post a message...\" rows={5}></textarea>\n<Field name=\"message\" as={MyStyledTextArea} placeholder=\"Post a message..\" rows={4}/>\n```\n\n### `getFieldProps(nameOrProps)`\n\nThere are two useful additions to `FormikProps`, `getFieldProps` and `getFieldMeta`. These are Kent C. Dodds-esque prop getters that can be useful if you love prop drilling, are _not_ using the context-based API's, or if you are building a custom `useField`.\n\n```tsx\nexport interface FieldInputProps<Value> {\n  /** Value of the field */\n  value: Value;\n  /** Name of the field */\n  name: string;\n  /** Multiple select? */\n  multiple?: boolean;\n  /** Is the field checked? */\n  checked?: boolean;\n  /** Change event handler */\n  onChange: FormikHandlers['handleChange'];\n  /** Blur event handler */\n  onBlur: FormikHandlers['handleBlur'];\n}\n```\n\n### `getFieldMeta(name)`\n\nGiven a name it will return an object:\n\n```tsx\nexport interface FieldMetaProps<Value> {\n  /** Value of the field */\n  value: Value;\n  /** Error message of the field */\n  error?: string;\n  /** Has the field been visited? */\n  touched: boolean;\n  /** Initial value of the field */\n  initialValue?: Value;\n  /** Initial touched state of the field */\n  initialTouched: boolean;\n  /** Initial error message of the field */\n  initialError?: string;\n}\n```\n\n## Deprecation Warnings\n\n### All `render` props have been deprecated with a console warning.\n\nFor `<Field>`, `<FastField>`, `<Formik>`,`<FieldArray>`, the `render` prop has been deprecated with a warning as it will be removed in future versions. Instead, use a child callback function. This deprecation is meant to parallel React Context Consumer's usage.\n\n```diff\n- <Field name=\"firstName\" render={props => ....} />\n+ <Field name=\"firstName\">{props => ... }</Field>\n```\n"
  },
  {
    "path": "packages/formik/README.md",
    "content": "<p align=\"center\">\n  <img src=\"https://user-images.githubusercontent.com/4060187/61057426-4e5a4600-a3c3-11e9-9114-630743e05814.png\" width=\"211\" height=\"182\" alt=\"Formik.js\" />\n</p>\n\n<h3 align=\"center\">\n  Build forms in React, without the tears.\n</h3>\n\n<br>\n\n[![Stable Release](https://img.shields.io/npm/v/formik.svg)](https://npm.im/formik)\n[![Blazing Fast](https://badgen.now.sh/badge/speed/blazing%20%F0%9F%94%A5/green)](https://npm.im/formik)\n[![gzip size](http://img.badgesize.io/https://unpkg.com/formik@latest/dist/formik.esm.js?compression=gzip)](https://unpkg.com/formik@latest/dist/formik.esm.js)\n[![license](https://badgen.now.sh/badge/license/Apache-2.0)](./LICENSE)\n[![Discord](https://img.shields.io/discord/769256827007139912.svg?style=flat-square)](https://discord.gg/pJSg287)\n\n**Visit [https://formik.org](https://formik.org) to get started with Formik.**\n\n## Organizations and projects using Formik\n\n[List of organizations and projects using Formik](https://github.com/jaredpalmer/formik/issues/87)\n\n## Authors\n\n- Jared Palmer [@jaredpalmer](https://twitter.com/jaredpalmer)\n- Ian White [@eonwhite](https://twitter.com/eonwhite)\n\n## Contributing\n\nThis monorepo uses `yarn`, so to start you'll need the package manager installed.\n\nTo run E2E tests you'll also need Playwright set up, which can be done locally via `npx playwright install`. Afterward, run `yarn start:app` and in a separate tab run `yarn e2e:ui` to boot up the test runner.\n\nWhen you're done with your changes, we use [changesets](https://github.com/changesets/changesets) to manage release notes. Run `yarn changeset` to autogenerate notes to be appended to your pull request.\n\nThank you!\n\n## Contributors\n\nFormik is made with <3 thanks to these wonderful people\n([emoji key](https://github.com/kentcdodds/all-contributors#emoji-key)):\n\n<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n<!-- prettier-ignore -->\n| [<img src=\"https://avatars2.githubusercontent.com/u/4060187?v=4\" width=\"100px;\"/><br /><sub><b>Jared Palmer</b></sub>](http://jaredpalmer.com)<br />[💬](#question-jaredpalmer \"Answering Questions\") [💻](https://github.com/jaredpalmer/formik/commits?author=jaredpalmer \"Code\") [🎨](#design-jaredpalmer \"Design\") [📖](https://github.com/jaredpalmer/formik/commits?author=jaredpalmer \"Documentation\") [💡](#example-jaredpalmer \"Examples\") [🤔](#ideas-jaredpalmer \"Ideas, Planning, & Feedback\") [👀](#review-jaredpalmer \"Reviewed Pull Requests\") [⚠️](https://github.com/jaredpalmer/formik/commits?author=jaredpalmer \"Tests\") | [<img src=\"https://avatars0.githubusercontent.com/u/109324?v=4\" width=\"100px;\"/><br /><sub><b>Ian White</b></sub>](https://www.stardog.io)<br />[💬](#question-eonwhite \"Answering Questions\") [🐛](https://github.com/jaredpalmer/formik/issues?q=author%3Aeonwhite \"Bug reports\") [💻](https://github.com/jaredpalmer/formik/commits?author=eonwhite \"Code\") [📖](https://github.com/jaredpalmer/formik/commits?author=eonwhite \"Documentation\") [🤔](#ideas-eonwhite \"Ideas, Planning, & Feedback\") [👀](#review-eonwhite \"Reviewed Pull Requests\") | [<img src=\"https://avatars0.githubusercontent.com/u/829963?v=4\" width=\"100px;\"/><br /><sub><b>Andrej Badin</b></sub>](http://andrejbadin.com)<br />[💬](#question-Andreyco \"Answering Questions\") [🐛](https://github.com/jaredpalmer/formik/issues?q=author%3AAndreyco \"Bug reports\") [📖](https://github.com/jaredpalmer/formik/commits?author=Andreyco \"Documentation\") | [<img src=\"https://avatars2.githubusercontent.com/u/91115?v=4\" width=\"100px;\"/><br /><sub><b>Adam Howard</b></sub>](http://adz.co.de)<br />[💬](#question-skattyadz \"Answering Questions\") [🐛](https://github.com/jaredpalmer/formik/issues?q=author%3Askattyadz \"Bug reports\") [🤔](#ideas-skattyadz \"Ideas, Planning, & Feedback\") [👀](#review-skattyadz \"Reviewed Pull Requests\") | [<img src=\"https://avatars1.githubusercontent.com/u/6711845?v=4\" width=\"100px;\"/><br /><sub><b>Vlad Shcherbin</b></sub>](https://github.com/VladShcherbin)<br />[💬](#question-VladShcherbin \"Answering Questions\") [🐛](https://github.com/jaredpalmer/formik/issues?q=author%3AVladShcherbin \"Bug reports\") [🤔](#ideas-VladShcherbin \"Ideas, Planning, & Feedback\") | [<img src=\"https://avatars3.githubusercontent.com/u/383212?v=4\" width=\"100px;\"/><br /><sub><b>Brikou CARRE</b></sub>](https://github.com/brikou)<br />[🐛](https://github.com/jaredpalmer/formik/issues?q=author%3Abrikou \"Bug reports\") [📖](https://github.com/jaredpalmer/formik/commits?author=brikou \"Documentation\") | [<img src=\"https://avatars0.githubusercontent.com/u/5314713?v=4\" width=\"100px;\"/><br /><sub><b>Sam Kvale</b></sub>](http://skvale.github.io)<br />[🐛](https://github.com/jaredpalmer/formik/issues?q=author%3Askvale \"Bug reports\") [💻](https://github.com/jaredpalmer/formik/commits?author=skvale \"Code\") [⚠️](https://github.com/jaredpalmer/formik/commits?author=skvale \"Tests\") |\n| :---: | :---: | :---: | :---: | :---: | :---: | :---: |\n| [<img src=\"https://avatars0.githubusercontent.com/u/13765558?v=4\" width=\"100px;\"/><br /><sub><b>Jon Tansey</b></sub>](http://jon.tansey.info)<br />[🐛](https://github.com/jaredpalmer/formik/issues?q=author%3Ajontansey \"Bug reports\") [💻](https://github.com/jaredpalmer/formik/commits?author=jontansey \"Code\") | [<img src=\"https://avatars0.githubusercontent.com/u/6819171?v=4\" width=\"100px;\"/><br /><sub><b>Tyler Martinez</b></sub>](http://slightlytyler.com)<br />[🐛](https://github.com/jaredpalmer/formik/issues?q=author%3Aslightlytyler \"Bug reports\") [📖](https://github.com/jaredpalmer/formik/commits?author=slightlytyler \"Documentation\") | [<img src=\"https://avatars0.githubusercontent.com/u/1285032?v=4\" width=\"100px;\"/><br /><sub><b>Tobias Lohse</b></sub>](http://MrLoh.se)<br />[🐛](https://github.com/jaredpalmer/formik/issues?q=author%3AMrLoh \"Bug reports\") [💻](https://github.com/jaredpalmer/formik/commits?author=MrLoh \"Code\") |\n\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n\nThis project follows the\n[all-contributors](https://github.com/kentcdodds/all-contributors)\nspecification. Contributions of any kind welcome!\n\n## Related\n\n- [TSDX](https://github.com/jaredpalmer/tsdx) - Zero-config CLI for TypeScript used by this repo. (Formik's Rollup configuration as a CLI)\n\n---\n\n[Apache 2.0 License.](https://github.com/jaredpalmer/formik/blob/master/LICENSE)\n"
  },
  {
    "path": "packages/formik/package.json",
    "content": "{\n  \"name\": \"formik\",\n  \"description\": \"Build forms in React, without the tears\",\n  \"version\": \"2.4.9\",\n  \"license\": \"Apache-2.0\",\n  \"author\": \"Jared Palmer <jared@palmer.net> (https://jaredpalmer.com)\",\n  \"contributors\": [\n    \"Evan Jacobs <probablyup@gmail.com> (https://quantizor.dev)\"\n  ],\n  \"repository\": \"jaredpalmer/formik\",\n  \"homepage\": \"https://formik.org\",\n  \"keywords\": [\n    \"formik\",\n    \"form\",\n    \"forms\",\n    \"react\",\n    \"react-dom\",\n    \"hooks\",\n    \"react hooks\",\n    \"validation\",\n    \"render props\",\n    \"validation\",\n    \"higher order component\",\n    \"hoc\"\n  ],\n  \"funding\": [\n    {\n      \"type\": \"individual\",\n      \"url\": \"https://opencollective.com/formik\"\n    }\n  ],\n  \"main\": \"dist/index.js\",\n  \"umd:main\": \"dist/formik.umd.production.js\",\n  \"module\": \"dist/formik.esm.js\",\n  \"typings\": \"dist/index.d.ts\",\n  \"files\": [\n    \"dist\"\n  ],\n  \"peerDependencies\": {\n    \"react\": \">=16.8.0\"\n  },\n  \"sideEffects\": false,\n  \"scripts\": {\n    \"test\": \"tsdx test --env=jsdom\",\n    \"test:watch\": \"npm run test -- --watchAll\",\n    \"start\": \"tsdx watch --tsconfig tsconfig.build.json --verbose --noClean\",\n    \"build\": \"tsdx build --tsconfig tsconfig.build.json\",\n    \"lint\": \"tsdx lint\"\n  },\n  \"dependencies\": {\n    \"@types/hoist-non-react-statics\": \"^3.3.1\",\n    \"deepmerge\": \"^2.1.1\",\n    \"hoist-non-react-statics\": \"^3.3.0\",\n    \"lodash\": \"^4.17.21\",\n    \"lodash-es\": \"^4.17.21\",\n    \"react-fast-compare\": \"^2.0.1\",\n    \"tiny-warning\": \"^1.0.2\",\n    \"tslib\": \"^2.0.0\"\n  },\n  \"devDependencies\": {\n    \"@testing-library/react\": \"^14.0.0\",\n    \"@types/lodash\": \"^4.14.119\",\n    \"@types/react\": \"^18.2.7\",\n    \"@types/react-dom\": \"^18.2.4\",\n    \"@types/warning\": \"^3.0.0\",\n    \"just-debounce-it\": \"^1.1.0\",\n    \"react\": \"^18.2.0\",\n    \"react-dom\": \"^18.2.0\",\n    \"tsdx\": \"^0.14.1\",\n    \"typescript\": \"^4.0.3\",\n    \"yup\": \"^0.32.0\"\n  },\n  \"jest\": {\n    \"globals\": {\n      \"__DEV__\": \"boolean\"\n    },\n    \"collectCoverageFrom\": [\n      \"src/**/*.{ts,tsx}\"\n    ],\n    \"setupFilesAfterEnv\": [\n      \"<rootDir>/test/setupTests.ts\"\n    ]\n  }\n}\n"
  },
  {
    "path": "packages/formik/src/ErrorMessage.tsx",
    "content": "import * as React from 'react';\nimport { FormikContextType } from './types';\nimport { getIn, isFunction } from './utils';\nimport { connect } from './connect';\n\nexport interface ErrorMessageProps {\n  id?: string;\n  name: string;\n  className?: string;\n  component?: string | React.ComponentType;\n  children?: (errorMessage: string) => React.ReactNode;\n  render?: (errorMessage: string) => React.ReactNode;\n}\n\nclass ErrorMessageImpl extends React.Component<\n  ErrorMessageProps & { formik: FormikContextType<any> }\n> {\n  shouldComponentUpdate(\n    props: ErrorMessageProps & { formik: FormikContextType<any> }\n  ) {\n    if (\n      getIn(this.props.formik.errors, this.props.name) !==\n        getIn(props.formik.errors, this.props.name) ||\n      getIn(this.props.formik.touched, this.props.name) !==\n        getIn(props.formik.touched, this.props.name) ||\n      Object.keys(this.props).length !== Object.keys(props).length\n    ) {\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  render() {\n    let { component, formik, render, children, name, ...rest } = this.props;\n\n    const touch = getIn(formik.touched, name);\n    const error = getIn(formik.errors, name);\n\n    return !!touch && !!error\n      ? render\n        ? isFunction(render)\n          ? render(error)\n          : null\n        : children\n        ? isFunction(children)\n          ? children(error)\n          : null\n        : component\n        ? React.createElement(component, rest as any, error)\n        : error\n      : null;\n  }\n}\n\nexport const ErrorMessage = connect<\n  ErrorMessageProps,\n  ErrorMessageProps & { formik: FormikContextType<any> }\n>(ErrorMessageImpl);\n"
  },
  {
    "path": "packages/formik/src/FastField.tsx",
    "content": "import * as React from 'react';\n\nimport {\n  FormikProps,\n  GenericFieldHTMLAttributes,\n  FormikContextType,\n  FieldMetaProps,\n  FieldInputProps,\n} from './types';\nimport invariant from 'tiny-warning';\nimport { getIn, isEmptyChildren, isFunction } from './utils';\nimport { FieldConfig } from './Field';\nimport { connect } from './connect';\n\ntype $FixMe = any;\n\nexport interface FastFieldProps<V = any> {\n  field: FieldInputProps<V>;\n  meta: FieldMetaProps<V>;\n  form: FormikProps<V>; // if ppl want to restrict this for a given form, let them.\n}\n\nexport type FastFieldConfig<T> = FieldConfig & {\n  /** Override FastField's default shouldComponentUpdate */\n  shouldUpdate?: (\n    nextProps: T & GenericFieldHTMLAttributes,\n    props: {}\n  ) => boolean;\n};\n\nexport type FastFieldAttributes<T> = GenericFieldHTMLAttributes &\n  FastFieldConfig<T> &\n  T;\n\ntype FastFieldInnerProps<Values = {}, Props = {}> = FastFieldAttributes<\n  Props\n> & { formik: FormikContextType<Values> };\n\n/**\n * Custom Field component for quickly hooking into Formik\n * context and wiring up forms.\n */\nclass FastFieldInner<Values = {}, Props = {}> extends React.Component<\n  FastFieldInnerProps<Values, Props>,\n  {}\n> {\n  constructor(props: FastFieldInnerProps<Values, Props>) {\n    super(props);\n    const { render, children, component, as: is, name } = props;\n    invariant(\n      !render,\n      `<FastField render> has been deprecated. Please use a child callback function instead: <FastField name={${name}}>{props => ...}</FastField> instead.`\n    );\n    invariant(\n      !(component && render),\n      'You should not use <FastField component> and <FastField render> in the same <FastField> component; <FastField component> will be ignored'\n    );\n\n    invariant(\n      !(is && children && isFunction(children)),\n      'You should not use <FastField as> and <FastField children> as a function in the same <FastField> component; <FastField as> will be ignored.'\n    );\n\n    invariant(\n      !(component && children && isFunction(children)),\n      'You should not use <FastField component> and <FastField children> as a function in the same <FastField> component; <FastField component> will be ignored.'\n    );\n\n    invariant(\n      !(render && children && !isEmptyChildren(children)),\n      'You should not use <FastField render> and <FastField children> in the same <FastField> component; <FastField children> will be ignored'\n    );\n  }\n\n  shouldComponentUpdate(props: FastFieldInnerProps<Values, Props>) {\n    if (this.props.shouldUpdate) {\n      return this.props.shouldUpdate(props, this.props);\n    } else if (\n      props.name !== this.props.name ||\n      getIn(props.formik.values, this.props.name) !==\n        getIn(this.props.formik.values, this.props.name) ||\n      getIn(props.formik.errors, this.props.name) !==\n        getIn(this.props.formik.errors, this.props.name) ||\n      getIn(props.formik.touched, this.props.name) !==\n        getIn(this.props.formik.touched, this.props.name) ||\n      Object.keys(this.props).length !== Object.keys(props).length ||\n      props.formik.isSubmitting !== this.props.formik.isSubmitting\n    ) {\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  componentDidMount() {\n    // Register the Field with the parent Formik. Parent will cycle through\n    // registered Field's validate fns right prior to submit\n    this.props.formik.registerField(this.props.name, {\n      validate: this.props.validate,\n    });\n  }\n\n  componentDidUpdate(prevProps: FastFieldAttributes<Props>) {\n    if (this.props.name !== prevProps.name) {\n      this.props.formik.unregisterField(prevProps.name);\n      this.props.formik.registerField(this.props.name, {\n        validate: this.props.validate,\n      });\n    }\n\n    if (this.props.validate !== prevProps.validate) {\n      this.props.formik.registerField(this.props.name, {\n        validate: this.props.validate,\n      });\n    }\n  }\n\n  componentWillUnmount() {\n    this.props.formik.unregisterField(this.props.name);\n  }\n\n  render() {\n    const {\n      validate,\n      name,\n      render,\n      as: is,\n      children,\n      component,\n      shouldUpdate,\n      formik,\n      ...props\n    } = this.props as FastFieldInnerProps<Values, Props>;\n\n    const {\n      validate: _validate,\n      validationSchema: _validationSchema,\n      ...restOfFormik\n    } = formik;\n    const field = formik.getFieldProps({ name, ...props });\n    const meta = {\n      value: getIn(formik.values, name),\n      error: getIn(formik.errors, name),\n      touched: !!getIn(formik.touched, name),\n      initialValue: getIn(formik.initialValues, name),\n      initialTouched: !!getIn(formik.initialTouched, name),\n      initialError: getIn(formik.initialErrors, name),\n    };\n\n    const bag = { field, meta, form: restOfFormik };\n\n    if (render) {\n      return (render as any)(bag);\n    }\n\n    if (isFunction(children)) {\n      return (children as (props: FastFieldProps<any>) => React.ReactNode)(bag);\n    }\n\n    if (component) {\n      // This behavior is backwards compat with earlier Formik 0.9 to 1.x\n      if (typeof component === 'string') {\n        const { innerRef, ...rest } = props;\n        return React.createElement(\n          component,\n          { ref: innerRef, ...field, ...(rest as $FixMe) },\n          children\n        );\n      }\n      // We don't pass `meta` for backwards compat\n      return React.createElement(\n        component as React.ComponentClass<$FixMe>,\n        { field, form: formik, ...props },\n        children\n      );\n    }\n\n    // default to input here so we can check for both `as` and `children` above\n    const asElement = is || 'input';\n\n    if (typeof asElement === 'string') {\n      const { innerRef, ...rest } = props;\n      return React.createElement(\n        asElement,\n        { ref: innerRef, ...field, ...(rest as $FixMe) },\n        children\n      );\n    }\n\n    return React.createElement(\n      asElement as React.ComponentClass,\n      { ...field, ...props },\n      children\n    );\n  }\n}\n\nexport const FastField = connect<FastFieldAttributes<any>, any>(FastFieldInner);\n"
  },
  {
    "path": "packages/formik/src/Field.tsx",
    "content": "import * as React from 'react';\nimport {\n  FormikProps,\n  GenericFieldHTMLAttributes,\n  FieldMetaProps,\n  FieldHelperProps,\n  FieldInputProps,\n  FieldValidator,\n} from './types';\nimport { useFormikContext } from './FormikContext';\nimport { isFunction, isEmptyChildren, isObject } from './utils';\nimport invariant from 'tiny-warning';\n\nexport interface FieldProps<V = any, FormValues = any> {\n  field: FieldInputProps<V>;\n  form: FormikProps<FormValues>; // if ppl want to restrict this for a given form, let them.\n  meta: FieldMetaProps<V>;\n}\n\nexport interface FieldConfig<V = any> {\n  /**\n   * Field component to render. Can either be a string like 'select' or a component.\n   */\n  component?:\n  | string\n  | React.ComponentType<FieldProps<V>>\n  | React.ComponentType\n  | React.ForwardRefExoticComponent<any>;\n\n  /**\n   * Component to render. Can either be a string e.g. 'select', 'input', or 'textarea', or a component.\n   */\n  as?:\n  | React.ComponentType<FieldProps<V>['field']>\n  | string\n  | React.ComponentType\n  | React.ForwardRefExoticComponent<any>;\n\n  /**\n   * Render prop (works like React router's <Route render={props =>} />)\n   * @deprecated\n   */\n  render?: (props: FieldProps<V>) => React.ReactNode;\n\n  /**\n   * Children render function <Field name>{props => ...}</Field>)\n   */\n  children?: ((props: FieldProps<V>) => React.ReactNode) | React.ReactNode;\n\n  /**\n   * Validate a single field value independently\n   */\n  validate?: FieldValidator;\n\n  /**\n   * Used for 'select' and related input types.\n   */\n  multiple?: boolean;\n\n  /**\n   * Field name\n   */\n  name: string;\n\n  /** HTML input type */\n  type?: string;\n\n  /** Field value */\n  value?: any;\n\n  /** Inner ref */\n  innerRef?: (instance: any) => void;\n}\n\nexport type FieldAttributes<T> = { className?: string; } & GenericFieldHTMLAttributes &\n  FieldConfig<T> &\n  T & {\n    name: string,\n  };\n\nexport type FieldHookConfig<T> = GenericFieldHTMLAttributes & FieldConfig<T>;\n\nexport function useField<Val = any>(\n  propsOrFieldName: string | FieldHookConfig<Val>\n): [FieldInputProps<Val>, FieldMetaProps<Val>, FieldHelperProps<Val>] {\n  const formik = useFormikContext();\n  const {\n    getFieldProps,\n    getFieldMeta,\n    getFieldHelpers,\n    registerField,\n    unregisterField,\n  } = formik;\n\n  const isAnObject = isObject(propsOrFieldName);\n\n  // Normalize propsOrFieldName to FieldHookConfig<Val>\n  const props: FieldHookConfig<Val> = isAnObject\n    ? (propsOrFieldName as FieldHookConfig<Val>)\n    : { name: propsOrFieldName as string };\n\n  const { name: fieldName, validate: validateFn } = props;\n\n  React.useEffect(() => {\n    if (fieldName) {\n      registerField(fieldName, {\n        validate: validateFn,\n      });\n    }\n    return () => {\n      if (fieldName) {\n        unregisterField(fieldName);\n      }\n    };\n  }, [registerField, unregisterField, fieldName, validateFn]);\n\n  if (__DEV__) {\n    invariant(\n      formik,\n      'useField() / <Field /> must be used underneath a <Formik> component or withFormik() higher order component'\n    );\n  }\n\n  invariant(\n    fieldName,\n    'Invalid field name. Either pass `useField` a string or an object containing a `name` key.'\n  );\n\n  const fieldHelpers = React.useMemo(() => getFieldHelpers(fieldName), [\n    getFieldHelpers,\n    fieldName,\n  ]);\n\n  return [getFieldProps(props), getFieldMeta(fieldName), fieldHelpers];\n}\n\nexport function Field({\n  validate,\n  name,\n  render,\n  children,\n  as: is, // `as` is reserved in typescript lol\n  component,\n  className,\n  ...props\n}: FieldAttributes<any>) {\n  const {\n    validate: _validate,\n    validationSchema: _validationSchema,\n\n    ...formik\n  } = useFormikContext();\n\n  if (__DEV__) {\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    React.useEffect(() => {\n      invariant(\n        !render,\n        `<Field render> has been deprecated and will be removed in future versions of Formik. Please use a child callback function instead. To get rid of this warning, replace <Field name=\"${name}\" render={({field, form}) => ...} /> with <Field name=\"${name}\">{({field, form, meta}) => ...}</Field>`\n      );\n\n      invariant(\n        !(is && children && isFunction(children)),\n        'You should not use <Field as> and <Field children> as a function in the same <Field> component; <Field as> will be ignored.'\n      );\n\n      invariant(\n        !(component && children && isFunction(children)),\n        'You should not use <Field component> and <Field children> as a function in the same <Field> component; <Field component> will be ignored.'\n      );\n\n      invariant(\n        !(render && children && !isEmptyChildren(children)),\n        'You should not use <Field render> and <Field children> in the same <Field> component; <Field children> will be ignored'\n      );\n      // eslint-disable-next-line\n    }, []);\n  }\n\n  // Register field and field-level validation with parent <Formik>\n  const { registerField, unregisterField } = formik;\n  React.useEffect(() => {\n    registerField(name, {\n      validate: validate,\n    });\n    return () => {\n      unregisterField(name);\n    };\n  }, [registerField, unregisterField, name, validate]);\n  const field = formik.getFieldProps({ name, ...props });\n  const meta = formik.getFieldMeta(name);\n  const legacyBag = { field, form: formik };\n\n  if (render) {\n    return render({ ...legacyBag, meta });\n  }\n\n  if (isFunction(children)) {\n    return children({ ...legacyBag, meta });\n  }\n\n  if (component) {\n    // This behavior is backwards compat with earlier Formik 0.9 to 1.x\n    if (typeof component === 'string') {\n      const { innerRef, ...rest } = props;\n      return React.createElement(\n        component,\n        { ref: innerRef, ...field, ...rest, className },\n        children\n      );\n    }\n    // We don't pass `meta` for backwards compat\n    return React.createElement(\n      component,\n      { field, form: formik, ...props, className },\n      children\n    );\n  }\n\n  // default to input here so we can check for both `as` and `children` above\n  const asElement = is || 'input';\n\n  if (typeof asElement === 'string') {\n    const { innerRef, ...rest } = props;\n    return React.createElement(\n      asElement,\n      { ref: innerRef, ...field, ...rest, className },\n      children\n    );\n  }\n\n  return React.createElement(asElement, { ...field, ...props, className }, children);\n}\n"
  },
  {
    "path": "packages/formik/src/FieldArray.tsx",
    "content": "import cloneDeep from 'lodash/cloneDeep';\nimport * as React from 'react';\nimport isEqual from 'react-fast-compare';\nimport { connect } from './connect';\nimport {\n  FormikContextType,\n  FormikProps,\n  FormikState,\n  SharedRenderProps,\n} from './types';\nimport {\n  getIn,\n  isEmptyArray,\n  isEmptyChildren,\n  isFunction,\n  isObject,\n  setIn,\n} from './utils';\n\nexport type FieldArrayRenderProps = ArrayHelpers & {\n  form: FormikProps<any>;\n  name: string;\n};\n\nexport type FieldArrayConfig = {\n  /** Really the path to the array field to be updated */\n  name: string;\n  /** Should field array validate the form AFTER array updates/changes? */\n  validateOnChange?: boolean;\n} & SharedRenderProps<FieldArrayRenderProps>;\nexport interface ArrayHelpers<T extends any[] = any[]> {\n  /** Imperatively add a value to the end of an array */\n  push<X extends T[number] = T[number]>(obj: X): void;\n  /** Curried fn to add a value to the end of an array */\n  handlePush<X extends T[number] = T[number]>(obj: X): () => void;\n  /** Imperatively swap two values in an array */\n  swap: (indexA: number, indexB: number) => void;\n  /** Curried fn to swap two values in an array */\n  handleSwap: (indexA: number, indexB: number) => () => void;\n  /** Imperatively move an element in an array to another index */\n  move: (from: number, to: number) => void;\n  /** Imperatively move an element in an array to another index */\n  handleMove: (from: number, to: number) => () => void;\n  /** Imperatively insert an element at a given index into the array */\n  insert<X extends T[number] = T[number]>(index: number, value: X): void;\n  /** Curried fn to insert an element at a given index into the array */\n  handleInsert<X extends T[number] = T[number]>(index: number, value: X): () => void;\n  /** Imperatively replace a value at an index of an array  */\n  replace<X extends T[number] = T[number]>(index: number, value: X): void;\n  /** Curried fn to replace an element at a given index into the array */\n  handleReplace<X extends T[number] = T[number]>(index: number, value: X): () => void;\n  /** Imperatively add an element to the beginning of an array and return its length */\n  unshift<X extends T[number] = T[number]>(value: X): number;\n  /** Curried fn to add an element to the beginning of an array */\n  handleUnshift<X extends T[number] = T[number]>(value: X): () => void;\n  /** Curried fn to remove an element at an index of an array */\n  handleRemove: (index: number) => () => void;\n  /** Curried fn to remove a value from the end of the array */\n  handlePop: () => () => void;\n  /** Imperatively remove and element at an index of an array */\n  remove<X extends T[number] = T[number]>(index: number): X | undefined;\n  /** Imperatively remove and return value from the end of the array */\n  pop<X extends T[number] = T[number]>(): X | undefined;\n}\n\n/**\n * Some array helpers!\n */\nexport const move = <T,>(array: T[], from: number, to: number) => {\n  const copy = copyArrayLike(array);\n  const value = copy[from];\n  copy.splice(from, 1);\n  copy.splice(to, 0, value);\n  return copy;\n};\n\nexport const swap = <T,>(\n  arrayLike: ArrayLike<T>,\n  indexA: number,\n  indexB: number\n) => {\n  const copy = copyArrayLike(arrayLike);\n  const a = copy[indexA];\n  copy[indexA] = copy[indexB];\n  copy[indexB] = a;\n  return copy;\n};\n\nexport const insert = <T,>(\n  arrayLike: ArrayLike<T>,\n  index: number,\n  value: T\n) => {\n  const copy = copyArrayLike(arrayLike);\n  copy.splice(index, 0, value);\n  return copy;\n};\n\nexport const replace = <T,>(\n  arrayLike: ArrayLike<T>,\n  index: number,\n  value: T\n) => {\n  const copy = copyArrayLike(arrayLike);\n  copy[index] = value;\n  return copy;\n};\n\nconst copyArrayLike = (arrayLike: ArrayLike<any>) => {\n  if (!arrayLike) {\n    return [];\n  } else if (Array.isArray(arrayLike)) {\n    return [...arrayLike];\n  } else {\n    const maxIndex = Object.keys(arrayLike)\n      .map(key => parseInt(key))\n      .reduce((max, el) => (el > max ? el : max), 0);\n    return Array.from({ ...arrayLike, length: maxIndex + 1 });\n  }\n};\n\nconst createAlterationHandler = (\n  alteration: boolean | Function,\n  defaultFunction: Function\n) => {\n  const fn = typeof alteration === 'function' ? alteration : defaultFunction;\n\n  return (data: any | any[]) => {\n    if (Array.isArray(data) || isObject(data)) {\n      const clone = copyArrayLike(data);\n      return fn(clone);\n    }\n\n    // This can be assumed to be a primitive, which\n    // is a case for top level validation errors\n    return data;\n  };\n};\n\nclass FieldArrayInner<Values = {}> extends React.Component<\n  FieldArrayConfig & { formik: FormikContextType<Values> },\n  {}\n> {\n  static defaultProps = {\n    validateOnChange: true,\n  };\n\n  constructor(props: FieldArrayConfig & { formik: FormikContextType<Values> }) {\n    super(props);\n    // We need TypeScript generics on these, so we'll bind them in the constructor\n    // @todo Fix TS 3.2.1\n    this.remove = this.remove.bind(this) as any;\n    this.pop = this.pop.bind(this) as any;\n  }\n\n  componentDidUpdate(\n    prevProps: FieldArrayConfig & { formik: FormikContextType<Values> }\n  ) {\n    if (\n      this.props.validateOnChange &&\n      this.props.formik.validateOnChange &&\n      !isEqual(\n        getIn(prevProps.formik.values, prevProps.name),\n        getIn(this.props.formik.values, this.props.name)\n      )\n    ) {\n      this.props.formik.validateForm(this.props.formik.values);\n    }\n  }\n\n  updateArrayField = (\n    fn: Function,\n    alterTouched: boolean | Function,\n    alterErrors: boolean | Function\n  ) => {\n    const {\n      name,\n\n      formik: { setFormikState },\n    } = this.props;\n\n    setFormikState((prevState: FormikState<any>) => {\n      let updateErrors = createAlterationHandler(alterErrors, fn);\n      let updateTouched = createAlterationHandler(alterTouched, fn);\n\n      // values fn should be executed before updateErrors and updateTouched,\n      // otherwise it causes an error with unshift.\n      let values = setIn(\n        prevState.values,\n        name,\n        fn(getIn(prevState.values, name))\n      );\n\n      let fieldError = alterErrors\n        ? updateErrors(getIn(prevState.errors, name))\n        : undefined;\n      let fieldTouched = alterTouched\n        ? updateTouched(getIn(prevState.touched, name))\n        : undefined;\n\n      if (isEmptyArray(fieldError)) {\n        fieldError = undefined;\n      }\n      if (isEmptyArray(fieldTouched)) {\n        fieldTouched = undefined;\n      }\n\n      return {\n        ...prevState,\n        values,\n        errors: alterErrors\n          ? setIn(prevState.errors, name, fieldError)\n          : prevState.errors,\n        touched: alterTouched\n          ? setIn(prevState.touched, name, fieldTouched)\n          : prevState.touched,\n      };\n    });\n  };\n\n  push = (value: any) =>\n    this.updateArrayField(\n      (arrayLike: ArrayLike<any>) => [\n        ...copyArrayLike(arrayLike),\n        cloneDeep(value),\n      ],\n      false,\n      false\n    );\n\n  handlePush = (value: any) => () => this.push(value);\n\n  swap = (indexA: number, indexB: number) =>\n    this.updateArrayField(\n      (array: any[]) => swap(array, indexA, indexB),\n      true,\n      true\n    );\n\n  handleSwap = (indexA: number, indexB: number) => () =>\n    this.swap(indexA, indexB);\n\n  move = (from: number, to: number) =>\n    this.updateArrayField((array: any[]) => move(array, from, to), true, true);\n\n  handleMove = (from: number, to: number) => () => this.move(from, to);\n\n  insert = (index: number, value: any) =>\n    this.updateArrayField(\n      (array: any[]) => insert(array, index, value),\n      (array: any[]) => insert(array, index, null),\n      (array: any[]) => insert(array, index, null)\n    );\n\n  handleInsert = (index: number, value: any) => () => this.insert(index, value);\n\n  replace = (index: number, value: any) =>\n    this.updateArrayField(\n      (array: any[]) => replace(array, index, value),\n      false,\n      false\n    );\n\n  handleReplace = (index: number, value: any) => () =>\n    this.replace(index, value);\n\n  unshift = (value: any) => {\n    let length = -1;\n    this.updateArrayField(\n      (array: any[]) => {\n        const arr = array ? [value, ...array] : [value];\n\n        length = arr.length;\n\n        return arr;\n      },\n      (array: any[]) => {\n        return array ? [null, ...array] : [null];\n      },\n      (array: any[]) => {\n        return array ? [null, ...array] : [null];\n      }\n    );\n\n    return length;\n  };\n\n  handleUnshift = (value: any) => () => this.unshift(value);\n\n  remove<T>(index: number): T {\n    // We need to make sure we also remove relevant pieces of `touched` and `errors`\n    let result: any;\n    this.updateArrayField(\n      // so this gets call 3 times\n      (array?: any[]) => {\n        const copy = array ? copyArrayLike(array) : [];\n        if (!result) {\n          result = copy[index];\n        }\n        if (isFunction(copy.splice)) {\n          copy.splice(index, 1);\n        }\n        // if the array only includes undefined values we have to return an empty array\n        return isFunction(copy.every)\n          ? copy.every(v => v === undefined)\n            ? []\n            : copy\n          : copy;\n      },\n      true,\n      true\n    );\n\n    return result as T;\n  }\n\n  handleRemove = (index: number) => () => this.remove<any>(index);\n\n  pop<T>(): T {\n    // Remove relevant pieces of `touched` and `errors` too!\n    let result: any;\n    this.updateArrayField(\n      // so this gets call 3 times\n      (array: any[]) => {\n        const tmp = array.slice();\n        if (!result) {\n          result = tmp && tmp.pop && tmp.pop();\n        }\n        return tmp;\n      },\n      true,\n      true\n    );\n\n    return result as T;\n  }\n\n  handlePop = () => () => this.pop<any>();\n\n  render() {\n    const arrayHelpers: ArrayHelpers = {\n      push: this.push,\n      pop: this.pop,\n      swap: this.swap,\n      move: this.move,\n      insert: this.insert,\n      replace: this.replace,\n      unshift: this.unshift,\n      remove: this.remove,\n      handlePush: this.handlePush,\n      handlePop: this.handlePop,\n      handleSwap: this.handleSwap,\n      handleMove: this.handleMove,\n      handleInsert: this.handleInsert,\n      handleReplace: this.handleReplace,\n      handleUnshift: this.handleUnshift,\n      handleRemove: this.handleRemove,\n    };\n\n    const {\n      component,\n      render,\n      children,\n      name,\n      formik: {\n        validate: _validate,\n        validationSchema: _validationSchema,\n        ...restOfFormik\n      },\n    } = this.props;\n\n    const props: FieldArrayRenderProps = {\n      ...arrayHelpers,\n      form: restOfFormik,\n      name,\n    };\n\n    return component\n      ? React.createElement(component as any, props)\n      : render\n      ? (render as any)(props)\n      : children // children come last, always called\n      ? typeof children === 'function'\n        ? (children as any)(props)\n        : !isEmptyChildren(children)\n        ? React.Children.only(children)\n        : null\n      : null;\n  }\n}\n\nexport const FieldArray = connect<FieldArrayConfig, any>(FieldArrayInner);\n"
  },
  {
    "path": "packages/formik/src/Form.tsx",
    "content": "import * as React from 'react';\nimport { useFormikContext } from './FormikContext';\n\nexport type FormikFormProps = Pick<\n  React.FormHTMLAttributes<HTMLFormElement>,\n  Exclude<\n    keyof React.FormHTMLAttributes<HTMLFormElement>,\n    'onReset' | 'onSubmit'\n  >\n>;\n\ntype FormProps = React.ComponentPropsWithoutRef<'form'>;\n\n// @todo tests\nexport const Form = React.forwardRef<HTMLFormElement, FormProps>(\n  (props: FormikFormProps, ref) => {\n    // iOS needs an \"action\" attribute for nice input: https://stackoverflow.com/a/39485162/406725\n    // We default the action to \"#\" in case the preventDefault fails (just updates the URL hash)\n    const { action, ...rest } = props;\n    const _action = action ?? '#';\n    const { handleReset, handleSubmit } = useFormikContext();\n    return (\n      <form\n        onSubmit={handleSubmit}\n        ref={ref}\n        onReset={handleReset}\n        action={_action}\n        {...rest}\n      />\n    );\n  }\n);\n\nForm.displayName = 'Form';\n"
  },
  {
    "path": "packages/formik/src/Formik.tsx",
    "content": "import deepmerge from 'deepmerge';\nimport isPlainObject from 'lodash/isPlainObject';\nimport cloneDeep from 'lodash/cloneDeep';\nimport * as React from 'react';\nimport isEqual from 'react-fast-compare';\nimport invariant from 'tiny-warning';\nimport { FieldConfig } from './Field';\nimport { FormikProvider } from './FormikContext';\nimport {\n  FieldHelperProps,\n  FieldInputProps,\n  FieldMetaProps,\n  FormikConfig,\n  FormikErrors,\n  FormikHandlers,\n  FormikHelpers,\n  FormikProps,\n  FormikState,\n  FormikTouched,\n  FormikValues,\n} from './types';\nimport {\n  getActiveElement,\n  getIn,\n  isEmptyChildren,\n  isFunction,\n  isObject,\n  isPromise,\n  isString,\n  setIn,\n  setNestedObjectValues,\n} from './utils';\n\ntype FormikMessage<Values> =\n  | { type: 'SUBMIT_ATTEMPT' }\n  | { type: 'SUBMIT_FAILURE' }\n  | { type: 'SUBMIT_SUCCESS' }\n  | { type: 'SET_ISVALIDATING'; payload: boolean }\n  | { type: 'SET_ISSUBMITTING'; payload: boolean }\n  | { type: 'SET_VALUES'; payload: Values }\n  | { type: 'SET_FIELD_VALUE'; payload: { field: string; value?: any } }\n  | { type: 'SET_FIELD_TOUCHED'; payload: { field: string; value?: boolean } }\n  | { type: 'SET_FIELD_ERROR'; payload: { field: string; value?: string } }\n  | { type: 'SET_TOUCHED'; payload: FormikTouched<Values> }\n  | { type: 'SET_ERRORS'; payload: FormikErrors<Values> }\n  | { type: 'SET_STATUS'; payload: any }\n  | {\n      type: 'SET_FORMIK_STATE';\n      payload: (s: FormikState<Values>) => FormikState<Values>;\n    }\n  | {\n      type: 'RESET_FORM';\n      payload: FormikState<Values>;\n    };\n\n// State reducer\nfunction formikReducer<Values>(\n  state: FormikState<Values>,\n  msg: FormikMessage<Values>\n) {\n  switch (msg.type) {\n    case 'SET_VALUES':\n      return { ...state, values: msg.payload };\n    case 'SET_TOUCHED':\n      return { ...state, touched: msg.payload };\n    case 'SET_ERRORS':\n      if (isEqual(state.errors, msg.payload)) {\n        return state;\n      }\n\n      return { ...state, errors: msg.payload };\n    case 'SET_STATUS':\n      return { ...state, status: msg.payload };\n    case 'SET_ISSUBMITTING':\n      return { ...state, isSubmitting: msg.payload };\n    case 'SET_ISVALIDATING':\n      return { ...state, isValidating: msg.payload };\n    case 'SET_FIELD_VALUE':\n      return {\n        ...state,\n        values: setIn(state.values, msg.payload.field, msg.payload.value),\n      };\n    case 'SET_FIELD_TOUCHED':\n      return {\n        ...state,\n        touched: setIn(state.touched, msg.payload.field, msg.payload.value),\n      };\n    case 'SET_FIELD_ERROR':\n      return {\n        ...state,\n        errors: setIn(state.errors, msg.payload.field, msg.payload.value),\n      };\n    case 'RESET_FORM':\n      return { ...state, ...msg.payload };\n    case 'SET_FORMIK_STATE':\n      return msg.payload(state);\n    case 'SUBMIT_ATTEMPT':\n      return {\n        ...state,\n        touched: setNestedObjectValues<FormikTouched<Values>>(\n          state.values,\n          true\n        ),\n        isSubmitting: true,\n        submitCount: state.submitCount + 1,\n      };\n    case 'SUBMIT_FAILURE':\n      return {\n        ...state,\n        isSubmitting: false,\n      };\n    case 'SUBMIT_SUCCESS':\n      return {\n        ...state,\n        isSubmitting: false,\n      };\n    default:\n      return state;\n  }\n}\n\n// Initial empty states // objects\nconst emptyErrors: FormikErrors<unknown> = {};\nconst emptyTouched: FormikTouched<unknown> = {};\n\n// This is an object that contains a map of all registered fields\n// and their validate functions\ninterface FieldRegistry {\n  [field: string]: {\n    validate: (value: any) => string | Promise<string> | undefined;\n  };\n}\n\nexport function useFormik<Values extends FormikValues = FormikValues>({\n  validateOnChange = true,\n  validateOnBlur = true,\n  validateOnMount = false,\n  isInitialValid,\n  enableReinitialize = false,\n  onSubmit,\n  ...rest\n}: FormikConfig<Values>) {\n  const props = {\n    validateOnChange,\n    validateOnBlur,\n    validateOnMount,\n    onSubmit,\n    ...rest,\n  };\n  const initialValues = React.useRef(props.initialValues);\n  const initialErrors = React.useRef(props.initialErrors || emptyErrors);\n  const initialTouched = React.useRef(props.initialTouched || emptyTouched);\n  const initialStatus = React.useRef(props.initialStatus);\n  const isMounted = React.useRef<boolean>(false);\n  const fieldRegistry = React.useRef<FieldRegistry>({});\n  if (__DEV__) {\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    React.useEffect(() => {\n      invariant(\n        typeof isInitialValid === 'undefined',\n        'isInitialValid has been deprecated and will be removed in future versions of Formik. Please use initialErrors or validateOnMount instead.'\n      );\n      // eslint-disable-next-line\n    }, []);\n  }\n\n  React.useEffect(() => {\n    isMounted.current = true;\n\n    return () => {\n      isMounted.current = false;\n    };\n  }, []);\n\n  const [, setIteration] = React.useState(0);\n  const stateRef = React.useRef<FormikState<Values>>({\n    values: cloneDeep(props.initialValues),\n    errors: cloneDeep(props.initialErrors) || emptyErrors,\n    touched: cloneDeep(props.initialTouched) || emptyTouched,\n    status: cloneDeep(props.initialStatus),\n    isSubmitting: false,\n    isValidating: false,\n    submitCount: 0,\n  });\n\n  const state = stateRef.current;\n\n  const dispatch = React.useCallback((action: FormikMessage<Values>) => {\n    const prev = stateRef.current;\n\n    stateRef.current = formikReducer(prev, action);\n\n    // force rerender\n    if (prev !== stateRef.current) setIteration(x => x + 1);\n  }, []);\n\n  const runValidateHandler = React.useCallback(\n    (values: Values, field?: string): Promise<FormikErrors<Values>> => {\n      return new Promise((resolve, reject) => {\n        const maybePromisedErrors = (props.validate as any)(values, field);\n        if (maybePromisedErrors == null) {\n          // use loose null check here on purpose\n          resolve(emptyErrors);\n        } else if (isPromise(maybePromisedErrors)) {\n          (maybePromisedErrors as Promise<any>).then(\n            errors => {\n              resolve(errors || emptyErrors);\n            },\n            actualException => {\n              if (process.env.NODE_ENV !== 'production') {\n                console.warn(\n                  `Warning: An unhandled error was caught during validation in <Formik validate />`,\n                  actualException\n                );\n              }\n\n              reject(actualException);\n            }\n          );\n        } else {\n          resolve(maybePromisedErrors);\n        }\n      });\n    },\n    [props.validate]\n  );\n\n  /**\n   * Run validation against a Yup schema and optionally run a function if successful\n   */\n  const runValidationSchema = React.useCallback(\n    (values: Values, field?: string): Promise<FormikErrors<Values>> => {\n      const validationSchema = props.validationSchema;\n      const schema = isFunction(validationSchema)\n        ? validationSchema(field)\n        : validationSchema;\n      const promise =\n        field && schema.validateAt\n          ? schema.validateAt(field, values)\n          : validateYupSchema(values, schema);\n      return new Promise((resolve, reject) => {\n        promise.then(\n          () => {\n            resolve(emptyErrors);\n          },\n          (err: any) => {\n            // Yup will throw a validation error if validation fails. We catch those and\n            // resolve them into Formik errors. We can sniff if something is a Yup error\n            // by checking error.name.\n            // @see https://github.com/jquense/yup#validationerrorerrors-string--arraystring-value-any-path-string\n            if (err.name === 'ValidationError') {\n              resolve(yupToFormErrors(err));\n            } else {\n              // We throw any other errors\n              if (process.env.NODE_ENV !== 'production') {\n                console.warn(\n                  `Warning: An unhandled error was caught during validation in <Formik validationSchema />`,\n                  err\n                );\n              }\n\n              reject(err);\n            }\n          }\n        );\n      });\n    },\n    [props.validationSchema]\n  );\n\n  const runSingleFieldLevelValidation = React.useCallback(\n    (field: string, value: void | string): Promise<string> => {\n      return new Promise(resolve =>\n        resolve(fieldRegistry.current[field].validate(value) as string)\n      );\n    },\n    []\n  );\n\n  const runFieldLevelValidations = React.useCallback(\n    (values: Values): Promise<FormikErrors<Values>> => {\n      const fieldKeysWithValidation: string[] = Object.keys(\n        fieldRegistry.current\n      ).filter(f => isFunction(fieldRegistry.current[f].validate));\n\n      // Construct an array with all of the field validation functions\n      const fieldValidations: Promise<string>[] =\n        fieldKeysWithValidation.length > 0\n          ? fieldKeysWithValidation.map(f =>\n              runSingleFieldLevelValidation(f, getIn(values, f))\n            )\n          : [Promise.resolve('DO_NOT_DELETE_YOU_WILL_BE_FIRED')]; // use special case ;)\n\n      return Promise.all(fieldValidations).then((fieldErrorsList: string[]) =>\n        fieldErrorsList.reduce((prev, curr, index) => {\n          if (curr === 'DO_NOT_DELETE_YOU_WILL_BE_FIRED') {\n            return prev;\n          }\n          if (curr) {\n            prev = setIn(prev, fieldKeysWithValidation[index], curr);\n          }\n          return prev;\n        }, {})\n      );\n    },\n    [runSingleFieldLevelValidation]\n  );\n\n  // Run all validations and return the result\n  const runAllValidations = React.useCallback(\n    (values: Values) => {\n      return Promise.all([\n        runFieldLevelValidations(values),\n        props.validationSchema ? runValidationSchema(values) : {},\n        props.validate ? runValidateHandler(values) : {},\n      ]).then(([fieldErrors, schemaErrors, validateErrors]) => {\n        const combinedErrors = deepmerge.all<FormikErrors<Values>>(\n          [fieldErrors, schemaErrors, validateErrors],\n          { arrayMerge }\n        );\n        return combinedErrors;\n      });\n    },\n    [\n      props.validate,\n      props.validationSchema,\n      runFieldLevelValidations,\n      runValidateHandler,\n      runValidationSchema,\n    ]\n  );\n\n  // Run all validations methods and update state accordingly\n  const validateFormWithHighPriority = useEventCallback(\n    (values: Values = state.values) => {\n      dispatch({ type: 'SET_ISVALIDATING', payload: true });\n      return runAllValidations(values).then(combinedErrors => {\n        if (!!isMounted.current) {\n          dispatch({ type: 'SET_ISVALIDATING', payload: false });\n          dispatch({ type: 'SET_ERRORS', payload: combinedErrors });\n        }\n        return combinedErrors;\n      });\n    }\n  );\n\n  React.useEffect(() => {\n    if (\n      validateOnMount &&\n      isMounted.current === true &&\n      isEqual(initialValues.current, props.initialValues)\n    ) {\n      validateFormWithHighPriority(initialValues.current);\n    }\n  }, [validateOnMount, validateFormWithHighPriority]);\n\n  const resetForm = React.useCallback(\n    (nextState?: Partial<FormikState<Values>>) => {\n      const values =\n        nextState && nextState.values\n          ? nextState.values\n          : initialValues.current;\n      const errors =\n        nextState && nextState.errors\n          ? nextState.errors\n          : initialErrors.current\n          ? initialErrors.current\n          : props.initialErrors || {};\n      const touched =\n        nextState && nextState.touched\n          ? nextState.touched\n          : initialTouched.current\n          ? initialTouched.current\n          : props.initialTouched || {};\n      const status =\n        nextState && nextState.status\n          ? nextState.status\n          : initialStatus.current\n          ? initialStatus.current\n          : props.initialStatus;\n      initialValues.current = values;\n      initialErrors.current = errors;\n      initialTouched.current = touched;\n      initialStatus.current = status;\n\n      const dispatchFn = () => {\n        dispatch({\n          type: 'RESET_FORM',\n          payload: {\n            isSubmitting: !!nextState && !!nextState.isSubmitting,\n            errors,\n            touched,\n            status,\n            values,\n            isValidating: !!nextState && !!nextState.isValidating,\n            submitCount:\n              !!nextState &&\n              !!nextState.submitCount &&\n              typeof nextState.submitCount === 'number'\n                ? nextState.submitCount\n                : 0,\n          },\n        });\n      };\n\n      if (props.onReset) {\n        const maybePromisedOnReset = (props.onReset as any)(\n          state.values,\n          imperativeMethods\n        );\n\n        if (isPromise(maybePromisedOnReset)) {\n          (maybePromisedOnReset as Promise<any>).then(dispatchFn);\n        } else {\n          dispatchFn();\n        }\n      } else {\n        dispatchFn();\n      }\n    },\n    [props.initialErrors, props.initialStatus, props.initialTouched, props.onReset]\n  );\n\n  React.useEffect(() => {\n    if (\n      isMounted.current === true &&\n      !isEqual(initialValues.current, props.initialValues)\n    ) {\n      if (enableReinitialize) {\n        initialValues.current = props.initialValues;\n        resetForm();\n        if (validateOnMount) {\n          validateFormWithHighPriority(initialValues.current);\n        }\n      }\n    }\n  }, [\n    enableReinitialize,\n    props.initialValues,\n    resetForm,\n    validateOnMount,\n    validateFormWithHighPriority,\n  ]);\n\n  React.useEffect(() => {\n    if (\n      enableReinitialize &&\n      isMounted.current === true &&\n      !isEqual(initialErrors.current, props.initialErrors)\n    ) {\n      initialErrors.current = props.initialErrors || emptyErrors;\n      dispatch({\n        type: 'SET_ERRORS',\n        payload: props.initialErrors || emptyErrors,\n      });\n    }\n  }, [enableReinitialize, props.initialErrors]);\n\n  React.useEffect(() => {\n    if (\n      enableReinitialize &&\n      isMounted.current === true &&\n      !isEqual(initialTouched.current, props.initialTouched)\n    ) {\n      initialTouched.current = props.initialTouched || emptyTouched;\n      dispatch({\n        type: 'SET_TOUCHED',\n        payload: props.initialTouched || emptyTouched,\n      });\n    }\n  }, [enableReinitialize, props.initialTouched]);\n\n  React.useEffect(() => {\n    if (\n      enableReinitialize &&\n      isMounted.current === true &&\n      !isEqual(initialStatus.current, props.initialStatus)\n    ) {\n      initialStatus.current = props.initialStatus;\n      dispatch({\n        type: 'SET_STATUS',\n        payload: props.initialStatus,\n      });\n    }\n  }, [enableReinitialize, props.initialStatus, props.initialTouched]);\n\n  const validateField = useEventCallback((name: string) => {\n    // This will efficiently validate a single field by avoiding state\n    // changes if the validation function is synchronous. It's different from\n    // what is called when using validateForm.\n\n    if (\n      fieldRegistry.current[name] &&\n      isFunction(fieldRegistry.current[name].validate)\n    ) {\n      const value = getIn(state.values, name);\n      const maybePromise = fieldRegistry.current[name].validate(value);\n      if (isPromise(maybePromise)) {\n        // Only flip isValidating if the function is async.\n        dispatch({ type: 'SET_ISVALIDATING', payload: true });\n        return maybePromise\n          .then((x: any) => x)\n          .then((error: string) => {\n            dispatch({\n              type: 'SET_FIELD_ERROR',\n              payload: { field: name, value: error },\n            });\n            dispatch({ type: 'SET_ISVALIDATING', payload: false });\n          });\n      } else {\n        dispatch({\n          type: 'SET_FIELD_ERROR',\n          payload: {\n            field: name,\n            value: maybePromise as string | undefined,\n          },\n        });\n        return Promise.resolve(maybePromise as string | undefined);\n      }\n    } else if (props.validationSchema) {\n      dispatch({ type: 'SET_ISVALIDATING', payload: true });\n      return runValidationSchema(state.values, name)\n        .then((x: any) => x)\n        .then((error: any) => {\n          dispatch({\n            type: 'SET_FIELD_ERROR',\n            payload: { field: name, value: getIn(error, name) },\n          });\n          dispatch({ type: 'SET_ISVALIDATING', payload: false });\n        });\n    }\n\n    return Promise.resolve();\n  });\n\n  const registerField = React.useCallback((name: string, { validate }: any) => {\n    fieldRegistry.current[name] = {\n      validate,\n    };\n  }, []);\n\n  const unregisterField = React.useCallback((name: string) => {\n    delete fieldRegistry.current[name];\n  }, []);\n\n  const setTouched = useEventCallback(\n    (touched: FormikTouched<Values>, shouldValidate?: boolean) => {\n      dispatch({ type: 'SET_TOUCHED', payload: touched });\n      const willValidate =\n        shouldValidate === undefined ? validateOnBlur : shouldValidate;\n      return willValidate\n        ? validateFormWithHighPriority(state.values)\n        : Promise.resolve();\n    }\n  );\n\n  const setErrors = React.useCallback((errors: FormikErrors<Values>) => {\n    dispatch({ type: 'SET_ERRORS', payload: errors });\n  }, []);\n\n  const setValues = useEventCallback(\n    (values: React.SetStateAction<Values>, shouldValidate?: boolean) => {\n      const resolvedValues = isFunction(values) ? values(state.values) : values;\n\n      dispatch({ type: 'SET_VALUES', payload: resolvedValues });\n      const willValidate =\n        shouldValidate === undefined ? validateOnChange : shouldValidate;\n      return willValidate\n        ? validateFormWithHighPriority(resolvedValues)\n        : Promise.resolve();\n    }\n  );\n\n  const setFieldError = React.useCallback(\n    (field: string, value: string | undefined) => {\n      dispatch({\n        type: 'SET_FIELD_ERROR',\n        payload: { field, value },\n      });\n    },\n    []\n  );\n\n  const setFieldValue = useEventCallback(\n    (field: string, value: React.SetStateAction<any>, shouldValidate?: boolean) => {\n      const resolvedValue = isFunction(value) ? value(getIn(state.values, field)) : value;\n\n      dispatch({\n        type: 'SET_FIELD_VALUE',\n        payload: {\n          field,\n          value: resolvedValue,\n        },\n      });\n      const willValidate =\n        shouldValidate === undefined ? validateOnChange : shouldValidate;\n      return willValidate\n        ? validateFormWithHighPriority(setIn(state.values, field, resolvedValue))\n        : Promise.resolve();\n    }\n  );\n\n  const executeChange = React.useCallback(\n    (eventOrTextValue: string | React.ChangeEvent<any>, maybePath?: string) => {\n      // By default, assume that the first argument is a string. This allows us to use\n      // handleChange with React Native and React Native Web's onChangeText prop which\n      // provides just the value of the input.\n      let field = maybePath;\n      let val = eventOrTextValue;\n      let parsed;\n      // If the first argument is not a string though, it has to be a synthetic React Event (or a fake one),\n      // so we handle like we would a normal HTML change event.\n      if (!isString(eventOrTextValue)) {\n        // If we can, persist the event\n        // @see https://reactjs.org/docs/events.html#event-pooling\n        if ((eventOrTextValue as any).persist) {\n          (eventOrTextValue as React.ChangeEvent<any>).persist();\n        }\n        const target = eventOrTextValue.target\n          ? (eventOrTextValue as React.ChangeEvent<any>).target\n          : (eventOrTextValue as React.ChangeEvent<any>).currentTarget;\n\n        const {\n          type,\n          name,\n          id,\n          value,\n          checked,\n          outerHTML,\n          options,\n          multiple,\n        } = target;\n\n        field = maybePath ? maybePath : name ? name : id;\n        if (!field && __DEV__) {\n          warnAboutMissingIdentifier({\n            htmlContent: outerHTML,\n            documentationAnchorLink: 'handlechange-e-reactchangeeventany--void',\n            handlerName: 'handleChange',\n          });\n        }\n        val = /number|range/.test(type)\n          ? ((parsed = parseFloat(value)), isNaN(parsed) ? '' : parsed)\n          : /checkbox/.test(type) // checkboxes\n          ? getValueForCheckbox(getIn(state.values, field!), checked, value)\n          : options && multiple // <select multiple>\n          ? getSelectedValues(options)\n          : value;\n      }\n\n      if (field) {\n        // Set form fields by name\n        setFieldValue(field, val);\n      }\n    },\n    [setFieldValue, state.values]\n  );\n\n  const handleChange = useEventCallback<FormikHandlers['handleChange']>(\n    (\n      eventOrPath: string | React.ChangeEvent<any>\n    ): void | ((eventOrTextValue: string | React.ChangeEvent<any>) => void) => {\n      if (isString(eventOrPath)) {\n        return event => executeChange(event, eventOrPath);\n      } else {\n        executeChange(eventOrPath);\n      }\n    }\n  );\n\n  const setFieldTouched = useEventCallback(\n    (field: string, touched: boolean = true, shouldValidate?: boolean) => {\n      dispatch({\n        type: 'SET_FIELD_TOUCHED',\n        payload: {\n          field,\n          value: touched,\n        },\n      });\n      const willValidate =\n        shouldValidate === undefined ? validateOnBlur : shouldValidate;\n      return willValidate\n        ? validateFormWithHighPriority(state.values)\n        : Promise.resolve();\n    }\n  );\n\n  const executeBlur = React.useCallback(\n    (e: any, path?: string) => {\n      if (e.persist) {\n        e.persist();\n      }\n      const { name, id, outerHTML } = e.target;\n      const field = path ? path : name ? name : id;\n\n      if (!field && __DEV__) {\n        warnAboutMissingIdentifier({\n          htmlContent: outerHTML,\n          documentationAnchorLink: 'handleblur-e-any--void',\n          handlerName: 'handleBlur',\n        });\n      }\n\n      setFieldTouched(field, true);\n    },\n    [setFieldTouched]\n  );\n\n  const handleBlur = useEventCallback<FormikHandlers['handleBlur']>(\n    (eventOrString: any): void | ((e: any) => void) => {\n      if (isString(eventOrString)) {\n        return event => executeBlur(event, eventOrString);\n      } else {\n        executeBlur(eventOrString);\n      }\n    }\n  );\n\n  const setFormikState = React.useCallback(\n    (\n      stateOrCb:\n        | FormikState<Values>\n        | ((state: FormikState<Values>) => FormikState<Values>)\n    ): void => {\n      if (isFunction(stateOrCb)) {\n        dispatch({ type: 'SET_FORMIK_STATE', payload: stateOrCb });\n      } else {\n        dispatch({ type: 'SET_FORMIK_STATE', payload: () => stateOrCb });\n      }\n    },\n    []\n  );\n\n  const setStatus = React.useCallback((status: any) => {\n    dispatch({ type: 'SET_STATUS', payload: status });\n  }, []);\n\n  const setSubmitting = React.useCallback((isSubmitting: boolean) => {\n    dispatch({ type: 'SET_ISSUBMITTING', payload: isSubmitting });\n  }, []);\n\n  const submitForm = useEventCallback(() => {\n    dispatch({ type: 'SUBMIT_ATTEMPT' });\n    return validateFormWithHighPriority().then(\n      (combinedErrors: FormikErrors<Values>) => {\n        // In case an error was thrown and passed to the resolved Promise,\n        // `combinedErrors` can be an instance of an Error. We need to check\n        // that and abort the submit.\n        // If we don't do that, calling `Object.keys(new Error())` yields an\n        // empty array, which causes the validation to pass and the form\n        // to be submitted.\n\n        const isInstanceOfError = combinedErrors instanceof Error;\n        const isActuallyValid =\n          !isInstanceOfError && Object.keys(combinedErrors).length === 0;\n        if (isActuallyValid) {\n          // Proceed with submit...\n          //\n          // To respect sync submit fns, we can't simply wrap executeSubmit in a promise and\n          // _always_ dispatch SUBMIT_SUCCESS because isSubmitting would then always be false.\n          // This would be fine in simple cases, but make it impossible to disable submit\n          // buttons where people use callbacks or promises as side effects (which is basically\n          // all of v1 Formik code). Instead, recall that we are inside of a promise chain already,\n          //  so we can try/catch executeSubmit(), if it returns undefined, then just bail.\n          // If there are errors, throw em. Otherwise, wrap executeSubmit in a promise and handle\n          // cleanup of isSubmitting on behalf of the consumer.\n          let promiseOrUndefined;\n          try {\n            promiseOrUndefined = executeSubmit();\n            // Bail if it's sync, consumer is responsible for cleaning up\n            // via setSubmitting(false)\n            if (promiseOrUndefined === undefined) {\n              return;\n            }\n          } catch (error) {\n            throw error;\n          }\n\n          return Promise.resolve(promiseOrUndefined)\n            .then(result => {\n              if (!!isMounted.current) {\n                dispatch({ type: 'SUBMIT_SUCCESS' });\n              }\n              return result;\n            })\n            .catch(_errors => {\n              if (!!isMounted.current) {\n                dispatch({ type: 'SUBMIT_FAILURE' });\n                // This is a legit error rejected by the onSubmit fn\n                // so we don't want to break the promise chain\n                throw _errors;\n              }\n            });\n        } else if (!!isMounted.current) {\n          // ^^^ Make sure Formik is still mounted before updating state\n          dispatch({ type: 'SUBMIT_FAILURE' });\n          // throw combinedErrors;\n          if (isInstanceOfError) {\n            throw combinedErrors;\n          }\n        }\n        return;\n      }\n    );\n  });\n\n  const handleSubmit = useEventCallback(\n    (e?: React.FormEvent<HTMLFormElement>) => {\n      if (e && e.preventDefault && isFunction(e.preventDefault)) {\n        e.preventDefault();\n      }\n\n      if (e && e.stopPropagation && isFunction(e.stopPropagation)) {\n        e.stopPropagation();\n      }\n\n      // Warn if form submission is triggered by a <button> without a\n      // specified `type` attribute during development. This mitigates\n      // a common gotcha in forms with both reset and submit buttons,\n      // where the dev forgets to add type=\"button\" to the reset button.\n      if (__DEV__ && typeof document !== 'undefined') {\n        // Safely get the active element (works with IE)\n        const activeElement = getActiveElement();\n        if (\n          activeElement !== null &&\n          activeElement instanceof HTMLButtonElement\n        ) {\n          invariant(\n            activeElement.attributes &&\n              activeElement.attributes.getNamedItem('type'),\n            'You submitted a Formik form using a button with an unspecified `type` attribute.  Most browsers default button elements to `type=\"submit\"`. If this is not a submit button, please add `type=\"button\"`.'\n          );\n        }\n      }\n\n      submitForm().catch(reason => {\n        console.warn(\n          `Warning: An unhandled error was caught from submitForm()`,\n          reason\n        );\n      });\n    }\n  );\n\n  const imperativeMethods: FormikHelpers<Values> = {\n    resetForm,\n    validateForm: validateFormWithHighPriority,\n    validateField,\n    setErrors,\n    setFieldError,\n    setFieldTouched,\n    setFieldValue,\n    setStatus,\n    setSubmitting,\n    setTouched,\n    setValues,\n    setFormikState,\n    submitForm,\n  };\n\n  const executeSubmit = useEventCallback(() => {\n    return onSubmit(state.values, imperativeMethods);\n  });\n\n  const handleReset = useEventCallback(e => {\n    if (e && e.preventDefault && isFunction(e.preventDefault)) {\n      e.preventDefault();\n    }\n\n    if (e && e.stopPropagation && isFunction(e.stopPropagation)) {\n      e.stopPropagation();\n    }\n\n    resetForm();\n  });\n\n  const getFieldMeta = React.useCallback(\n    (name: string): FieldMetaProps<any> => {\n      return {\n        value: getIn(state.values, name),\n        error: getIn(state.errors, name),\n        touched: !!getIn(state.touched, name),\n        initialValue: getIn(initialValues.current, name),\n        initialTouched: !!getIn(initialTouched.current, name),\n        initialError: getIn(initialErrors.current, name),\n      };\n    },\n    [state.errors, state.touched, state.values]\n  );\n\n  const getFieldHelpers = React.useCallback(\n    (name: string): FieldHelperProps<any> => {\n      return {\n        setValue: (value: any, shouldValidate?: boolean) =>\n          setFieldValue(name, value, shouldValidate),\n        setTouched: (value: boolean, shouldValidate?: boolean) =>\n          setFieldTouched(name, value, shouldValidate),\n        setError: (value: any) => setFieldError(name, value),\n      };\n    },\n    [setFieldValue, setFieldTouched, setFieldError]\n  );\n\n  const getFieldProps = React.useCallback(\n    (nameOrOptions: string | FieldConfig<any>): FieldInputProps<any> => {\n      const isAnObject = isObject(nameOrOptions);\n      const name = isAnObject\n        ? (nameOrOptions as FieldConfig<any>).name\n        : nameOrOptions;\n      const valueState = getIn(state.values, name);\n\n      const field: FieldInputProps<any> = {\n        name,\n        value: valueState,\n        onChange: handleChange,\n        onBlur: handleBlur,\n      };\n      if (isAnObject) {\n        const {\n          type,\n          value: valueProp, // value is special for checkboxes\n          as: is,\n          multiple,\n        } = nameOrOptions as FieldConfig<any>;\n\n        if (type === 'checkbox') {\n          if (valueProp === undefined) {\n            field.checked = !!valueState;\n          } else {\n            field.checked = !!(\n              Array.isArray(valueState) && ~valueState.indexOf(valueProp)\n            );\n            field.value = valueProp;\n          }\n        } else if (type === 'radio') {\n          field.checked = valueState === valueProp;\n          field.value = valueProp;\n        } else if (is === 'select' && multiple) {\n          field.value = field.value || [];\n          field.multiple = true;\n        }\n      }\n      return field;\n    },\n    [handleBlur, handleChange, state.values]\n  );\n\n  const dirty = React.useMemo(\n    () => !isEqual(initialValues.current, state.values),\n    [initialValues.current, state.values]\n  );\n\n  const isValid = React.useMemo(\n    () =>\n      typeof isInitialValid !== 'undefined'\n        ? dirty\n          ? state.errors && Object.keys(state.errors).length === 0\n          : isInitialValid !== false && isFunction(isInitialValid)\n          ? (isInitialValid as (props: FormikConfig<Values>) => boolean)(props)\n          : (isInitialValid as boolean)\n        : state.errors && Object.keys(state.errors).length === 0,\n    [isInitialValid, dirty, state.errors, props]\n  );\n\n  const ctx = {\n    ...state,\n    initialValues: initialValues.current,\n    initialErrors: initialErrors.current,\n    initialTouched: initialTouched.current,\n    initialStatus: initialStatus.current,\n    handleBlur,\n    handleChange,\n    handleReset,\n    handleSubmit,\n    resetForm,\n    setErrors,\n    setFormikState,\n    setFieldTouched,\n    setFieldValue,\n    setFieldError,\n    setStatus,\n    setSubmitting,\n    setTouched,\n    setValues,\n    submitForm,\n    validateForm: validateFormWithHighPriority,\n    validateField,\n    isValid,\n    dirty,\n    unregisterField,\n    registerField,\n    getFieldProps,\n    getFieldMeta,\n    getFieldHelpers,\n    validateOnBlur,\n    validateOnChange,\n    validateOnMount,\n  };\n\n  return ctx;\n}\n\nexport function Formik<\n  Values extends FormikValues = FormikValues,\n  ExtraProps = {}\n>(props: FormikConfig<Values> & ExtraProps) {\n  const formikbag = useFormik<Values>(props);\n  const { component, children, render, innerRef } = props;\n\n  // This allows folks to pass a ref to <Formik />\n  React.useImperativeHandle(innerRef, () => formikbag);\n\n  if (__DEV__) {\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    React.useEffect(() => {\n      invariant(\n        !props.render,\n        `<Formik render> has been deprecated and will be removed in future versions of Formik. Please use a child callback function instead. To get rid of this warning, replace <Formik render={(props) => ...} /> with <Formik>{(props) => ...}</Formik>`\n      );\n      // eslint-disable-next-line\n    }, []);\n  }\n  return (\n    <FormikProvider value={formikbag}>\n      {component\n        ? React.createElement(component as any, formikbag)\n        : render\n        ? render(formikbag)\n        : children // children come last, always called\n        ? isFunction(children)\n          ? (children as (bag: FormikProps<Values>) => React.ReactNode)(\n              formikbag as FormikProps<Values>\n            )\n          : !isEmptyChildren(children)\n          ? React.Children.only(children)\n          : null\n        : null}\n    </FormikProvider>\n  );\n}\n\nfunction warnAboutMissingIdentifier({\n  htmlContent,\n  documentationAnchorLink,\n  handlerName,\n}: {\n  htmlContent: string;\n  documentationAnchorLink: string;\n  handlerName: string;\n}) {\n  console.warn(\n    `Warning: Formik called \\`${handlerName}\\`, but you forgot to pass an \\`id\\` or \\`name\\` attribute to your input:\n    ${htmlContent}\n    Formik cannot determine which value to update. For more info see https://formik.org/docs/api/formik#${documentationAnchorLink}\n  `\n  );\n}\n\n/**\n * Transform Yup ValidationError to a more usable object\n */\nexport function yupToFormErrors<Values>(yupError: any): FormikErrors<Values> {\n  let errors: FormikErrors<Values> = {};\n  if (yupError.inner) {\n    if (yupError.inner.length === 0) {\n      return setIn(errors, yupError.path, yupError.message);\n    }\n    for (let err of yupError.inner) {\n      if (!getIn(errors, err.path)) {\n        errors = setIn(errors, err.path, err.message);\n      }\n    }\n  }\n  return errors;\n}\n\n/**\n * Validate a yup schema.\n */\nexport function validateYupSchema<T extends FormikValues>(\n  values: T,\n  schema: any,\n  sync: boolean = false,\n  context?: any\n): Promise<Partial<T>> {\n  const normalizedValues: FormikValues = prepareDataForValidation(values);\n\n  return schema[sync ? 'validateSync' : 'validate'](normalizedValues, {\n    abortEarly: false,\n    context: context || normalizedValues,\n  });\n}\n\n/**\n * Recursively prepare values.\n */\nexport function prepareDataForValidation<T extends FormikValues>(\n  values: T\n): FormikValues {\n  let data: FormikValues = Array.isArray(values) ? [] : {};\n  for (let k in values) {\n    if (Object.prototype.hasOwnProperty.call(values, k)) {\n      const key = String(k);\n      if (Array.isArray(values[key]) === true) {\n        data[key] = values[key].map((value: any) => {\n          if (Array.isArray(value) === true || isPlainObject(value)) {\n            return prepareDataForValidation(value);\n          } else {\n            return value !== '' ? value : undefined;\n          }\n        });\n      } else if (isPlainObject(values[key])) {\n        data[key] = prepareDataForValidation(values[key]);\n      } else {\n        data[key] = values[key] !== '' ? values[key] : undefined;\n      }\n    }\n  }\n  return data;\n}\n\n/**\n * deepmerge array merging algorithm\n * https://github.com/KyleAMathews/deepmerge#combine-array\n */\nfunction arrayMerge(target: any[], source: any[], options: any): any[] {\n  const destination = target.slice();\n\n  source.forEach(function merge(e: any, i: number) {\n    if (typeof destination[i] === 'undefined') {\n      const cloneRequested = options.clone !== false;\n      const shouldClone = cloneRequested && options.isMergeableObject(e);\n      destination[i] = shouldClone\n        ? deepmerge(Array.isArray(e) ? [] : {}, e, options)\n        : e;\n    } else if (options.isMergeableObject(e)) {\n      destination[i] = deepmerge(target[i], e, options);\n    } else if (target.indexOf(e) === -1) {\n      destination.push(e);\n    }\n  });\n  return destination;\n}\n\n/** Return multi select values based on an array of options */\nfunction getSelectedValues(options: any[]) {\n  return Array.from(options)\n    .filter(el => el.selected)\n    .map(el => el.value);\n}\n\n/** Return the next value for a checkbox */\nfunction getValueForCheckbox(\n  currentValue: string | any[],\n  checked: boolean,\n  valueProp: any\n) {\n  // If the current value was a boolean, return a boolean\n  if (typeof currentValue === 'boolean') {\n    return Boolean(checked);\n  }\n\n  // If the currentValue was not a boolean we want to return an array\n  let currentArrayOfValues = [];\n  let isValueInArray = false;\n  let index = -1;\n\n  if (!Array.isArray(currentValue)) {\n    // eslint-disable-next-line eqeqeq\n    if (!valueProp || valueProp == 'true' || valueProp == 'false') {\n      return Boolean(checked);\n    }\n  } else {\n    // If the current value is already an array, use it\n    currentArrayOfValues = currentValue;\n    index = currentValue.indexOf(valueProp);\n    isValueInArray = index >= 0;\n  }\n\n  // If the checkbox was checked and the value is not already present in the aray we want to add the new value to the array of values\n  if (checked && valueProp && !isValueInArray) {\n    return currentArrayOfValues.concat(valueProp);\n  }\n\n  // If the checkbox was unchecked and the value is not in the array, simply return the already existing array of values\n  if (!isValueInArray) {\n    return currentArrayOfValues;\n  }\n\n  // If the checkbox was unchecked and the value is in the array, remove the value and return the array\n  return currentArrayOfValues\n    .slice(0, index)\n    .concat(currentArrayOfValues.slice(index + 1));\n}\n\n// React currently throws a warning when using useLayoutEffect on the server.\n// To get around it, we can conditionally useEffect on the server (no-op) and\n// useLayoutEffect in the browser.\n// @see https://gist.github.com/gaearon/e7d97cdf38a2907924ea12e4ebdf3c85\nconst useIsomorphicLayoutEffect =\n  typeof window !== 'undefined' &&\n  typeof window.document !== 'undefined' &&\n  typeof window.document.createElement !== 'undefined'\n    ? React.useLayoutEffect\n    : React.useEffect;\n\nfunction useEventCallback<T extends (...args: any[]) => any>(fn: T): T {\n  const ref: any = React.useRef(fn);\n\n  // we copy a ref to the callback scoped to the current state/props on each render\n  useIsomorphicLayoutEffect(() => {\n    ref.current = fn;\n  });\n\n  return React.useCallback(\n    (...args: any[]) => ref.current.apply(void 0, args),\n    []\n  ) as T;\n}\n"
  },
  {
    "path": "packages/formik/src/FormikContext.tsx",
    "content": "import * as React from 'react';\nimport { FormikContextType } from './types';\nimport invariant from 'tiny-warning';\n\nexport const FormikContext = React.createContext<FormikContextType<any>>(\n  undefined as any\n);\nFormikContext.displayName = 'FormikContext';\n\nexport const FormikProvider = FormikContext.Provider;\nexport const FormikConsumer = FormikContext.Consumer;\n\nexport function useFormikContext<Values>() {\n  const formik = React.useContext<FormikContextType<Values>>(FormikContext);\n\n  invariant(\n    !!formik,\n    `Formik context is undefined, please verify you are calling useFormikContext() as child of a <Formik> component.`\n  );\n\n  return formik;\n}\n"
  },
  {
    "path": "packages/formik/src/connect.tsx",
    "content": "import * as React from 'react';\nimport hoistNonReactStatics from 'hoist-non-react-statics';\n\nimport { FormikContextType } from './types';\nimport { FormikConsumer } from './FormikContext';\nimport invariant from 'tiny-warning';\n\n/**\n * Connect any component to Formik context, and inject as a prop called `formik`;\n * @param Comp React Component\n */\nexport function connect<OuterProps, Values = {}>(\n  Comp: React.ComponentType<OuterProps & { formik: FormikContextType<Values> }>\n) {\n  const C: React.FC<OuterProps> = props => (\n    <FormikConsumer>\n      {formik => {\n        invariant(\n          !!formik,\n          `Formik context is undefined, please verify you are rendering <Form>, <Field>, <FastField>, <FieldArray>, or your custom context-using component as a child of a <Formik> component. Component name: ${Comp.name}`\n        );\n        return <Comp {...props} formik={formik} />;\n      }}\n    </FormikConsumer>\n  );\n\n  const componentDisplayName =\n    Comp.displayName ||\n    Comp.name ||\n    (Comp.constructor && Comp.constructor.name) ||\n    'Component';\n\n  // Assign Comp to C.WrappedComponent so we can access the inner component in tests\n  // For example, <Field.WrappedComponent /> gets us <FieldInner/>\n  (C as React.FC<OuterProps> & {\n    WrappedComponent: typeof Comp;\n  }).WrappedComponent = Comp;\n\n  C.displayName = `FormikConnect(${componentDisplayName})`;\n\n  return hoistNonReactStatics(\n    C,\n    Comp as React.ComponentClass<\n      OuterProps & { formik: FormikContextType<Values> }\n    > // cast type to ComponentClass (even if SFC)\n  );\n}\n"
  },
  {
    "path": "packages/formik/src/index.tsx",
    "content": "export * from './Formik';\nexport * from './Field';\nexport * from './Form';\nexport * from './withFormik';\nexport * from './FieldArray';\nexport * from './utils';\nexport * from './types';\nexport * from './connect';\nexport * from './ErrorMessage';\nexport * from './FormikContext';\nexport * from './FastField';\n"
  },
  {
    "path": "packages/formik/src/types.tsx",
    "content": "import * as React from 'react';\nimport { FieldConfig } from './Field';\n/**\n * Values of fields in the form\n */\nexport interface FormikValues {\n  [field: string]: any;\n}\n\n/**\n * An object containing error messages whose keys correspond to FormikValues.\n * Should always be an object of strings, but any is allowed to support i18n libraries.\n */\nexport type FormikErrors<Values> = {\n  [K in keyof Values]?: Values[K] extends any[]\n    ? Values[K][number] extends object // [number] is the special sauce to get the type of array's element. More here https://github.com/Microsoft/TypeScript/pull/21316\n      ? FormikErrors<Values[K][number]>[] | string | string[]\n      : string | string[]\n    : Values[K] extends object\n    ? FormikErrors<Values[K]>\n    : string;\n};\n\n/**\n * An object containing touched state of the form whose keys correspond to FormikValues.\n */\nexport type FormikTouched<Values> = {\n  [K in keyof Values]?: Values[K] extends any[]\n    ? Values[K][number] extends object // [number] is the special sauce to get the type of array's element. More here https://github.com/Microsoft/TypeScript/pull/21316\n      ? FormikTouched<Values[K][number]>[]\n      : boolean\n    : Values[K] extends object\n    ? FormikTouched<Values[K]>\n    : boolean;\n};\n\n/**\n * Formik state tree\n */\nexport interface FormikState<Values> {\n  /** Form values */\n  values: Values;\n  /** map of field names to specific error for that field */\n  errors: FormikErrors<Values>;\n  /** map of field names to whether the field has been touched */\n  touched: FormikTouched<Values>;\n  /** whether the form is currently submitting */\n  isSubmitting: boolean;\n  /** whether the form is currently validating (prior to submission) */\n  isValidating: boolean;\n  /** Top level status state, in case you need it */\n  status?: any;\n  /** Number of times user tried to submit the form */\n  submitCount: number;\n}\n\n/**\n * Formik computed properties. These are read-only.\n */\nexport interface FormikComputedProps<Values> {\n  /** True if any input has been touched. False otherwise. */\n  readonly dirty: boolean;\n  /** True if state.errors is empty */\n  readonly isValid: boolean;\n  /** The initial values of the form */\n  readonly initialValues: Values;\n  /** The initial errors of the form */\n  readonly initialErrors: FormikErrors<Values>;\n  /** The initial visited fields of the form */\n  readonly initialTouched: FormikTouched<Values>;\n  /** The initial status of the form */\n  readonly initialStatus?: any;\n}\n\n/**\n * Formik state helpers\n */\nexport interface FormikHelpers<Values> {\n  /** Manually set top level status. */\n  setStatus: (status?: any) => void;\n  /** Manually set errors object */\n  setErrors: (errors: FormikErrors<Values>) => void;\n  /** Manually set isSubmitting */\n  setSubmitting: (isSubmitting: boolean) => void;\n  /** Manually set touched object */\n  setTouched: (\n    touched: FormikTouched<Values>,\n    shouldValidate?: boolean\n  ) => Promise<void | FormikErrors<Values>>;\n  /** Manually set values object  */\n  setValues: (\n    values: React.SetStateAction<Values>,\n    shouldValidate?: boolean\n  ) => Promise<void | FormikErrors<Values>>;\n  /** Set value of form field directly */\n  setFieldValue: (\n    field: string,\n    value: any,\n    shouldValidate?: boolean\n  ) => Promise<void | FormikErrors<Values>>;\n  /** Set error message of a form field directly */\n  setFieldError: (field: string, message: string | undefined) => void;\n  /** Set whether field has been touched directly */\n  setFieldTouched: (\n    field: string,\n    isTouched?: boolean,\n    shouldValidate?: boolean\n  ) =>  Promise<void | FormikErrors<Values>>;\n  /** Validate form values */\n  validateForm: (values?: any) => Promise<FormikErrors<Values>>;\n  /** Validate field value */\n  validateField: (field: string) => Promise<void> | Promise<string | undefined>;\n  /** Reset form */\n  resetForm: (nextState?: Partial<FormikState<Values>>) => void;\n  /** Submit the form imperatively */\n  submitForm: () => Promise<void>;\n  /** Set Formik state, careful! */\n  setFormikState: (\n    f:\n      | FormikState<Values>\n      | ((prevState: FormikState<Values>) => FormikState<Values>),\n    cb?: () => void\n  ) => void;\n}\n\n/**\n * Formik form event handlers\n */\nexport interface FormikHandlers {\n  /** Form submit handler */\n  handleSubmit: (e?: React.FormEvent<HTMLFormElement>) => void;\n  /** Reset form event handler  */\n  handleReset: (e?: React.SyntheticEvent<any>) => void;\n  handleBlur: {\n    /** Classic React blur handler, keyed by input name */\n    (e: React.FocusEvent<any>): void;\n    /** Preact-like linkState. Will return a handleBlur function. */\n    <T = string | any>(fieldOrEvent: T): T extends string\n      ? (e: any) => void\n      : void;\n  };\n  handleChange: {\n    /** Classic React change handler, keyed by input name */\n    (e: React.ChangeEvent<any>): void;\n    /** Preact-like linkState. Will return a handleChange function.  */\n    <T = string | React.ChangeEvent<any>>(\n      field: T\n    ): T extends React.ChangeEvent<any>\n      ? void\n      : (e: string | React.ChangeEvent<any>) => void;\n  };\n\n  getFieldProps: <Value = any>(\n    props: string | FieldConfig<Value>\n  ) => FieldInputProps<Value>;\n  getFieldMeta: <Value>(name: string) => FieldMetaProps<Value>;\n  getFieldHelpers: <Value = any>(name: string) => FieldHelperProps<Value>;\n}\n\n/**\n * Base formik configuration/props shared between the HoC and Component.\n */\nexport interface FormikSharedConfig<Props = {}> {\n  /** Tells Formik to validate the form on each input's onChange event */\n  validateOnChange?: boolean;\n  /** Tells Formik to validate the form on each input's onBlur event */\n  validateOnBlur?: boolean;\n  /** Tells Formik to validate upon mount */\n  validateOnMount?: boolean;\n  /** Tell Formik if initial form values are valid or not on first render */\n  isInitialValid?: boolean | ((props: Props) => boolean);\n  /** Should Formik reset the form when new initialValues change */\n  enableReinitialize?: boolean;\n}\n\n/**\n * <Formik /> props\n */\nexport interface FormikConfig<Values> extends FormikSharedConfig {\n  /**\n   * Form component to render\n   */\n  component?: React.ComponentType<FormikProps<Values>>;\n\n  /**\n   * Render prop (works like React router's <Route render={props =>} />)\n   * @deprecated\n   */\n  render?: (props: FormikProps<Values>) => React.ReactNode;\n\n  /**\n   * React children or child render callback\n   */\n  children?:\n    | ((props: FormikProps<Values>) => React.ReactNode)\n    | React.ReactNode;\n\n  /**\n   * Initial values of the form\n   */\n  initialValues: Values;\n\n  /**\n   * Initial status\n   */\n  initialStatus?: any;\n\n  /** Initial object map of field names to specific error for that field */\n  initialErrors?: FormikErrors<Values>;\n\n  /** Initial object map of field names to whether the field has been touched */\n  initialTouched?: FormikTouched<Values>;\n\n  /**\n   * Reset handler\n   */\n  onReset?: (values: Values, formikHelpers: FormikHelpers<Values>) => void;\n\n  /**\n   * Submission handler\n   */\n  onSubmit: (\n    values: Values,\n    formikHelpers: FormikHelpers<Values>\n  ) => void | Promise<any>;\n  /**\n   * A Yup Schema or a function that returns a Yup schema\n   */\n  validationSchema?: any | (() => any);\n\n  /**\n   * Validation function. Must return an error object or promise that\n   * throws an error object where that object keys map to corresponding value.\n   */\n  validate?: (values: Values) => void | object | Promise<FormikErrors<Values>>;\n\n  /** Inner ref */\n  innerRef?: React.Ref<FormikProps<Values>>;\n}\n\n/**\n * State, handlers, and helpers made available to form component or render prop\n * of <Formik/>.\n */\nexport type FormikProps<Values> = FormikSharedConfig &\n  FormikState<Values> &\n  FormikHelpers<Values> &\n  FormikHandlers &\n  FormikComputedProps<Values> &\n  FormikRegistration & { submitForm: () => Promise<any> };\n\n/** Internal Formik registration methods that get passed down as props */\nexport interface FormikRegistration {\n  registerField: (name: string, fns: { validate?: FieldValidator }) => void;\n  unregisterField: (name: string) => void;\n}\n\n/**\n * State, handlers, and helpers made available to Formik's primitive components through context.\n */\nexport type FormikContextType<Values> = FormikProps<Values> &\n  Pick<FormikConfig<Values>, 'validate' | 'validationSchema'>;\n\nexport interface SharedRenderProps<T> {\n  /**\n   * Field component to render. Can either be a string like 'select' or a component.\n   */\n  component?: keyof React.JSX.IntrinsicElements | React.ComponentType<T | void>;\n\n  /**\n   * Render prop (works like React router's <Route render={props =>} />)\n   */\n  render?: (props: T) => React.ReactNode;\n\n  /**\n   * Children render function <Field name>{props => ...}</Field>)\n   */\n  children?: (props: T) => React.ReactNode;\n}\n\nexport type GenericFieldHTMLAttributes =\n  | React.JSX.IntrinsicElements['input']\n  | React.JSX.IntrinsicElements['select']\n  | React.JSX.IntrinsicElements['textarea'];\n\n/** Field metadata */\nexport interface FieldMetaProps<Value> {\n  /** Value of the field */\n  value: Value;\n  /** Error message of the field */\n  error?: string;\n  /** Has the field been visited? */\n  touched: boolean;\n  /** Initial value of the field */\n  initialValue?: Value;\n  /** Initial touched state of the field */\n  initialTouched: boolean;\n  /** Initial error message of the field */\n  initialError?: string;\n}\n\n/** Imperative handles to change a field's value, error and touched */\nexport interface FieldHelperProps<Value> {\n  /** Set the field's value */\n  setValue: (value: Value, shouldValidate?: boolean) => Promise<void | FormikErrors<Value>>;\n  /** Set the field's touched value */\n  setTouched: (value: boolean, shouldValidate?: boolean) => Promise<void | FormikErrors<Value>>;\n  /** Set the field's error value */\n  setError: (value: string | undefined) => void;\n}\n\n/** Field input value, name, and event handlers */\nexport interface FieldInputProps<Value> {\n  /** Value of the field */\n  value: Value;\n  /** Name of the field */\n  name: string;\n  /** Multiple select? */\n  multiple?: boolean;\n  /** Is the field checked? */\n  checked?: boolean;\n  /** Change event handler */\n  onChange: FormikHandlers['handleChange'];\n  /** Blur event handler */\n  onBlur: FormikHandlers['handleBlur'];\n}\n\nexport type FieldValidator = (\n  value: any\n) => string | void | Promise<string | void>;\n"
  },
  {
    "path": "packages/formik/src/utils.ts",
    "content": "import clone from 'lodash/clone';\nimport toPath from 'lodash/toPath';\nimport * as React from 'react';\n\n// Assertions\n\n/** @private is the value an empty array? */\nexport const isEmptyArray = (value?: any) =>\n  Array.isArray(value) && value.length === 0;\n\n/** @private is the given object a Function? */\nexport const isFunction = (obj: any): obj is Function =>\n  typeof obj === 'function';\n\n/** @private is the given object an Object? */\nexport const isObject = (obj: any): obj is Object =>\n  obj !== null && typeof obj === 'object';\n\n/** @private is the given object an integer? */\nexport const isInteger = (obj: any): boolean =>\n  String(Math.floor(Number(obj))) === obj;\n\n/** @private is the given object a string? */\nexport const isString = (obj: any): obj is string =>\n  Object.prototype.toString.call(obj) === '[object String]';\n\n/** @private is the given object a NaN? */\n// eslint-disable-next-line no-self-compare\nexport const isNaN = (obj: any): boolean => obj !== obj;\n\n/** @private Does a React component have exactly 0 children? */\nexport const isEmptyChildren = (children: any): boolean =>\n  React.Children.count(children) === 0;\n\n/** @private is the given object/value a promise? */\nexport const isPromise = (value: any): value is PromiseLike<any> =>\n  isObject(value) && isFunction(value.then);\n\n/** @private is the given object/value a type of synthetic event? */\nexport const isInputEvent = (value: any): value is React.SyntheticEvent<any> =>\n  value && isObject(value) && isObject(value.target);\n\n/**\n * Same as document.activeElement but wraps in a try-catch block. In IE it is\n * not safe to call document.activeElement if there is nothing focused.\n *\n * The activeElement will be null only if the document or document body is not\n * yet defined.\n *\n * @param {?Document} doc Defaults to current document.\n * @return {Element | null}\n * @see https://github.com/facebook/fbjs/blob/master/packages/fbjs/src/core/dom/getActiveElement.js\n */\nexport function getActiveElement(doc?: Document): Element | null {\n  doc = doc || (typeof document !== 'undefined' ? document : undefined);\n  if (typeof doc === 'undefined') {\n    return null;\n  }\n  try {\n    return doc.activeElement || doc.body;\n  } catch (e) {\n    return doc.body;\n  }\n}\n\n/**\n * Deeply get a value from an object via its path.\n */\nexport function getIn(\n  obj: any,\n  key: string | string[],\n  def?: any,\n  p: number = 0\n) {\n  const path = toPath(key);\n  while (obj && p < path.length) {\n    obj = obj[path[p++]];\n  }\n\n  // check if path is not in the end\n  if (p !== path.length && !obj) {\n    return def;\n  }\n\n  return obj === undefined ? def : obj;\n}\n\n/**\n * Deeply set a value from in object via it's path. If the value at `path`\n * has changed, return a shallow copy of obj with `value` set at `path`.\n * If `value` has not changed, return the original `obj`.\n *\n * Existing objects / arrays along `path` are also shallow copied. Sibling\n * objects along path retain the same internal js reference. Since new\n * objects / arrays are only created along `path`, we can test if anything\n * changed in a nested structure by comparing the object's reference in\n * the old and new object, similar to how russian doll cache invalidation\n * works.\n *\n * In earlier versions of this function, which used cloneDeep, there were\n * issues whereby settings a nested value would mutate the parent\n * instead of creating a new object. `clone` avoids that bug making a\n * shallow copy of the objects along the update path\n * so no object is mutated in place.\n *\n * Before changing this function, please read through the following\n * discussions.\n *\n * @see https://github.com/developit/linkstate\n * @see https://github.com/jaredpalmer/formik/pull/123\n */\nexport function setIn(obj: any, path: string, value: any): any {\n  let res: any = clone(obj); // this keeps inheritance when obj is a class\n  let resVal: any = res;\n  let i = 0;\n  let pathArray = toPath(path);\n\n  for (; i < pathArray.length - 1; i++) {\n    const currentPath: string = pathArray[i];\n    let currentObj: any = getIn(obj, pathArray.slice(0, i + 1));\n\n    if (currentObj && (isObject(currentObj) || Array.isArray(currentObj))) {\n      resVal = resVal[currentPath] = clone(currentObj);\n    } else {\n      const nextPath: string = pathArray[i + 1];\n      resVal = resVal[currentPath] =\n        isInteger(nextPath) && Number(nextPath) >= 0 ? [] : {};\n    }\n  }\n\n  // Return original object if new value is the same as current\n  if ((i === 0 ? obj : resVal)[pathArray[i]] === value) {\n    return obj;\n  }\n\n  if (value === undefined) {\n    delete resVal[pathArray[i]];\n  } else {\n    resVal[pathArray[i]] = value;\n  }\n\n  // If the path array has a single element, the loop did not run.\n  // Deleting on `resVal` had no effect in this scenario, so we delete on the result instead.\n  if (i === 0 && value === undefined) {\n    delete res[pathArray[i]];\n  }\n\n  return res;\n}\n\n/**\n * Recursively a set the same value for all keys and arrays nested object, cloning\n * @param object\n * @param value\n * @param visited\n * @param response\n */\nexport function setNestedObjectValues<T>(\n  object: any,\n  value: any,\n  visited: any = new WeakMap(),\n  response: any = {}\n): T {\n  for (let k of Object.keys(object)) {\n    const val = object[k];\n    if (isObject(val)) {\n      if (!visited.get(val)) {\n        visited.set(val, true);\n        // In order to keep array values consistent for both dot path  and\n        // bracket syntax, we need to check if this is an array so that\n        // this will output  { friends: [true] } and not { friends: { \"0\": true } }\n        response[k] = Array.isArray(val) ? [] : {};\n        setNestedObjectValues(val, value, visited, response[k]);\n      }\n    } else {\n      response[k] = value;\n    }\n  }\n\n  return response;\n}\n"
  },
  {
    "path": "packages/formik/src/withFormik.tsx",
    "content": "import hoistNonReactStatics from 'hoist-non-react-statics';\nimport * as React from 'react';\nimport { Formik } from './Formik';\nimport {\n  FormikHelpers,\n  FormikProps,\n  FormikSharedConfig,\n  FormikValues,\n  FormikTouched,\n  FormikErrors,\n} from './types';\nimport { isFunction } from './utils';\n\n/**\n * State, handlers, and helpers injected as props into the wrapped form component.\n * Used with withFormik()\n *\n * @deprecated  Use `OuterProps & FormikProps<Values>` instead.\n */\nexport type InjectedFormikProps<Props, Values> = Props & FormikProps<Values>;\n\n/**\n * Formik helpers + { props }\n */\nexport type FormikBag<P, V> = { props: P } & FormikHelpers<V>;\n\n/**\n * withFormik() configuration options. Backwards compatible.\n */\nexport interface WithFormikConfig<\n  Props,\n  Values extends FormikValues = FormikValues,\n  DeprecatedPayload = Values\n> extends FormikSharedConfig<Props> {\n  /**\n   * Set the display name of the component. Useful for React DevTools.\n   */\n  displayName?: string;\n\n  /**\n   * Submission handler\n   */\n  handleSubmit: (values: Values, formikBag: FormikBag<Props, Values>) => void;\n\n  /**\n   * Map props to the form values\n   */\n  mapPropsToValues?: (props: Props) => Values;\n\n  /**\n   * Map props to the form status\n   */\n  mapPropsToStatus?: (props: Props) => any;\n\n  /**\n   * Map props to the form touched state\n   */\n  mapPropsToTouched?: (props: Props) => FormikTouched<Values>;\n\n  /**\n   * Map props to the form errors state\n   */\n  mapPropsToErrors?: (props: Props) => FormikErrors<Values>;\n\n  /**\n   * @deprecated in 0.9.0 (but needed to break TS types)\n   */\n  mapValuesToPayload?: (values: Values) => DeprecatedPayload;\n\n  /**\n   * A Yup Schema or a function that returns a Yup schema\n   */\n  validationSchema?: any | ((props: Props) => any);\n\n  /**\n   * Validation function. Must return an error object or promise that\n   * throws an error object where that object keys map to corresponding value.\n   */\n  validate?: (values: Values, props: Props) => void | object | Promise<any>;\n}\n\nexport type CompositeComponent<P> =\n  | React.ComponentClass<P>\n  | React.FunctionComponent<P>;\n\nexport interface ComponentDecorator<TOwnProps, TMergedProps> {\n  (component: CompositeComponent<TMergedProps>): React.ComponentType<TOwnProps>;\n}\n\nexport interface InferableComponentDecorator<TOwnProps> {\n  <T extends CompositeComponent<TOwnProps>>(component: T): T;\n}\n\n/**\n * A public higher-order component to access the imperative API\n */\nexport function withFormik<\n  OuterProps extends object,\n  Values extends FormikValues,\n  Payload = Values\n>({\n  mapPropsToValues = (vanillaProps: OuterProps): Values => {\n    let val: Values = {} as Values;\n    for (let k in vanillaProps) {\n      if (\n        vanillaProps.hasOwnProperty(k) &&\n        typeof vanillaProps[k] !== 'function'\n      ) {\n        // @todo TypeScript fix\n        (val as any)[k] = vanillaProps[k];\n      }\n    }\n    return val as Values;\n  },\n  ...config\n}: WithFormikConfig<OuterProps, Values, Payload>): ComponentDecorator<\n  OuterProps,\n  OuterProps & FormikProps<Values>\n> {\n  return function createFormik(\n    Component: CompositeComponent<OuterProps & FormikProps<Values>>\n  ): React.ComponentClass<OuterProps> {\n    const componentDisplayName =\n      Component.displayName ||\n      Component.name ||\n      (Component.constructor && Component.constructor.name) ||\n      'Component';\n    /**\n     * We need to use closures here for to provide the wrapped component's props to\n     * the respective withFormik config methods.\n     */\n    class C extends React.Component<OuterProps, {}> {\n      static displayName = `WithFormik(${componentDisplayName})`;\n\n      validate = (values: Values): void | object | Promise<any> => {\n        return config.validate!(values, this.props);\n      };\n\n      validationSchema = () => {\n        return isFunction(config.validationSchema)\n          ? config.validationSchema!(this.props)\n          : config.validationSchema;\n      };\n\n      handleSubmit = (values: Values, actions: FormikHelpers<Values>) => {\n        return config.handleSubmit(values, {\n          ...actions,\n          props: this.props,\n        });\n      };\n\n      /**\n       * Just avoiding a render callback for perf here\n       */\n      renderFormComponent = (formikProps: FormikProps<Values>) => {\n        return <Component {...this.props} {...formikProps} />;\n      };\n\n      render() {\n        const { children, ...props } = this.props as any;\n        return (\n          <Formik\n            {...props}\n            {...config}\n            validate={config.validate && this.validate}\n            validationSchema={config.validationSchema && this.validationSchema}\n            initialValues={mapPropsToValues(this.props)}\n            initialStatus={\n              config.mapPropsToStatus && config.mapPropsToStatus(this.props)\n            }\n            initialErrors={\n              config.mapPropsToErrors && config.mapPropsToErrors(this.props)\n            }\n            initialTouched={\n              config.mapPropsToTouched && config.mapPropsToTouched(this.props)\n            }\n            onSubmit={this.handleSubmit as any}\n            children={this.renderFormComponent}\n          />\n        );\n      }\n    }\n\n    return hoistNonReactStatics(\n      C,\n      Component as React.ComponentClass<OuterProps & FormikProps<Values>> // cast type to ComponentClass (even if SFC)\n    ) as React.ComponentClass<OuterProps>;\n  };\n}\n"
  },
  {
    "path": "packages/formik/test/ErrorMessage.test.tsx",
    "content": "import * as React from 'react';\nimport { act, render } from '@testing-library/react';\nimport { Formik, FormikProps, ErrorMessage } from '../src';\nimport { noop } from './testHelpers';\n\ninterface TestFormValues {\n  name: string;\n  email: string;\n}\n\nconst TestForm: React.FC<any> = p => (\n  <Formik\n    onSubmit={noop}\n    initialValues={{ name: 'jared', email: 'hello@reason.nyc' }}\n    {...p}\n  />\n);\n\nfdescribe('<ErrorMessage />', () => {\n  it('renders with children as a function', async () => {\n    let actual: any; /** ErrorMessage ;) */\n    let actualFProps: any;\n    let message = 'Wrong';\n    render(\n      <TestForm\n        render={(fProps: FormikProps<TestFormValues>) => {\n          actualFProps = fProps;\n          return (\n            <div>\n              <ErrorMessage name=\"email\">\n                {props => (actual = props) || <div>{props}</div>}\n              </ErrorMessage>\n            </div>\n          );\n        }}\n      />\n    );\n\n    await act(async () => {\n      await actualFProps.setFieldError('email', message);\n    });\n\n    // Only renders if Field has been visited.\n    expect(actual).toEqual(undefined);\n\n    await act(async () => {\n      await actualFProps.setFieldTouched('email');\n      await actualFProps.setFieldError('email', message);\n    });\n\n    // Renders after being visited with an error.\n    expect(actual).toEqual(message);\n  });\n});\n"
  },
  {
    "path": "packages/formik/test/Field.test.tsx",
    "content": "import * as React from 'react';\nimport {\n  act,\n  cleanup,\n  render,\n  waitFor,\n  fireEvent,\n} from '@testing-library/react';\nimport * as Yup from 'yup';\nimport {\n  Formik,\n  Field,\n  FastField,\n  FieldProps,\n  FieldConfig,\n  FormikProps,\n  FormikConfig,\n} from '../src';\n\nimport { noop } from './testHelpers';\n\nconst initialValues = { name: 'jared', email: 'hello@reason.nyc' };\ntype Values = typeof initialValues;\ntype FastFieldConfig = FieldConfig;\n\ntype $FixMe = any;\n\nfunction renderForm(\n  ui?: React.ReactNode,\n  props?: Partial<FormikConfig<Values>>\n) {\n  let injected: FormikProps<Values>;\n  const { rerender, ...rest } = render(\n    <Formik onSubmit={noop} initialValues={initialValues} {...props}>\n      {(formikProps: FormikProps<Values>) =>\n        (injected = formikProps) && ui ? ui : null\n      }\n    </Formik>\n  );\n\n  return {\n    getFormProps(): FormikProps<Values> {\n      return injected;\n    },\n    ...rest,\n    rerender: () =>\n      rerender(\n        <Formik onSubmit={noop} initialValues={initialValues} {...props}>\n          {(formikProps: FormikProps<Values>) =>\n            (injected = formikProps) && ui ? ui : null\n          }\n        </Formik>\n      ),\n  };\n}\n\nconst createRenderField = (\n  FieldComponent: React.ComponentType<FieldConfig>\n) => (\n  props: Partial<FieldConfig> | Partial<FastFieldConfig> = {},\n  formProps?: Partial<FormikConfig<Values>>\n) => {\n  let injected: FieldProps;\n\n  if (!props.children && !props.render && !props.component && !props.as) {\n    props.children = (fieldProps: FieldProps) =>\n      (injected = fieldProps) && (\n        <input {...fieldProps.field} name=\"name\" data-testid=\"name-input\" />\n      );\n  }\n\n  return {\n    getProps() {\n      return injected;\n    },\n    ...renderForm(\n      <FieldComponent name=\"name\" data-testid=\"name-input\" {...props} />,\n      formProps\n    ),\n  };\n};\n\nconst renderField = createRenderField(Field);\nconst renderFastField = createRenderField(FastField);\n\nfunction cases(\n  title: string,\n  tester: (arg: typeof renderField | typeof renderFastField) => void\n) {\n  describe(title, () => {\n    it('<FastField />', async () => await tester(renderFastField));\n    it('<Field />', async () => await tester(renderField));\n  });\n}\n\nconst TEXT = 'Mrs. Kato';\n\ndescribe('Field / FastField', () => {\n  afterEach(cleanup);\n\n  describe('renders an <input /> by default', () => {\n    it('<Field />', () => {\n      const className = 'field-custom'\n      const { container } = renderForm(<Field name=\"name\" className={className} />);\n      expect(container.querySelectorAll('input')).toHaveLength(1);\n      expect(container.querySelector(`.${className}`)?.getAttribute('value')).toEqual('jared')\n    });\n\n    it('<FastField />', () => {\n      const { container } = renderForm(<FastField name=\"name\" />);\n      expect(container.querySelectorAll('input')).toHaveLength(1);\n    });\n  });\n\n  describe('renders an <input /> with className', () => {\n    it('<Field />', () => {\n      const className = 'field-custom'\n      const { container } = renderForm(<Field name=\"name\" className={className} />);\n      expect(container.querySelectorAll(`.${className}`)).toHaveLength(1)\n      expect(container.querySelector(`.${className}`)?.getAttribute('value')).toEqual('jared')\n    });\n\n    it('<FastField />', () => {\n      const className = 'field-custom'\n      const { container } = renderForm(<FastField name=\"name\" className={className} />);\n      expect(container.querySelectorAll(`.${className}`)).toHaveLength(1)\n      expect(container.querySelector(`.${className}`)?.getAttribute('value')).toEqual('jared')\n    });\n  });\n\n  describe('receives { field, form, meta } props and renders element', () => {\n    it('<Field />', () => {\n      let injected: FieldProps[] = [];\n      let asInjectedProps: FieldProps['field'] = {} as any;\n\n      const Component = (props: FieldProps) =>\n        injected.push(props) && <div data-testid=\"child\">{TEXT}</div>;\n\n      const AsComponent = (props: FieldProps['field']) =>\n        (asInjectedProps = props) && <div data-testid=\"child\">{TEXT}</div>;\n\n      const { getFormProps, queryAllByText } = renderForm(\n        <>\n          <Field name=\"name\" children={Component} />\n          <Field name=\"name\" render={Component} />\n          <Field name=\"name\" component={Component} />\n          <Field name=\"name\" as={AsComponent} />\n        </>\n      );\n\n      const { handleBlur, handleChange } = getFormProps();\n      injected.forEach((props, idx) => {\n        expect(props.field.name).toBe('name');\n        expect(props.field.value).toBe('jared');\n        expect(props.field.onChange).toBe(handleChange);\n        expect(props.field.onBlur).toBe(handleBlur);\n        expect(props.form).toEqual(getFormProps());\n        if (idx !== 2) {\n          expect(props.meta.value).toBe('jared');\n          expect(props.meta.error).toBeUndefined();\n          expect(props.meta.touched).toBe(false);\n          expect(props.meta.initialValue).toEqual('jared');\n        } else {\n          // Ensure that we do not pass through `meta` to\n          // <Field component> or <Field render>\n          expect(props.meta).toBeUndefined();\n        }\n      });\n\n      expect(asInjectedProps.name).toBe('name');\n      expect(asInjectedProps.value).toBe('jared');\n      expect(asInjectedProps.onChange).toBe(handleChange);\n      expect(asInjectedProps.onBlur).toBe(handleBlur);\n\n      expect(queryAllByText(TEXT)).toHaveLength(4);\n    });\n\n    it('<FastField />', () => {\n      let injected: FieldProps[] = [];\n      let asInjectedProps: FieldProps['field'] = {} as any;\n\n      const Component = (props: FieldProps) =>\n        injected.push(props) && <div>{TEXT}</div>;\n      const AsComponent = (props: FieldProps['field']) =>\n        (asInjectedProps = props) && <div data-testid=\"child\">{TEXT}</div>;\n\n      const { getFormProps, queryAllByText } = renderForm(\n        <>\n          <FastField name=\"name\" children={Component} />\n          <FastField name=\"name\" render={Component} />\n          {/* @todo fix the types here?? #shipit */}\n          <FastField name=\"name\" component={Component as $FixMe} />\n          <FastField name=\"name\" as={AsComponent} />\n        </>\n      );\n\n      const { handleBlur, handleChange } = getFormProps();\n      injected.forEach((props, idx) => {\n        expect(props.field.name).toBe('name');\n        expect(props.field.value).toBe('jared');\n        expect(props.field.onChange).toBe(handleChange);\n        expect(props.field.onBlur).toBe(handleBlur);\n        expect(props.form).toEqual(getFormProps());\n        if (idx !== 2) {\n          expect(props.meta.value).toBe('jared');\n          expect(props.meta.error).toBeUndefined();\n          expect(props.meta.touched).toBe(false);\n          expect(props.meta.initialValue).toEqual('jared');\n        } else {\n          // Ensure that we do not pass through `meta` to\n          // <Field component> or <Field render>\n          expect(props.meta).toBeUndefined();\n        }\n      });\n\n      expect(asInjectedProps.name).toBe('name');\n      expect(asInjectedProps.value).toBe('jared');\n      expect(asInjectedProps.onChange).toBe(handleChange);\n      expect(asInjectedProps.onBlur).toBe(handleBlur);\n      expect(queryAllByText(TEXT)).toHaveLength(4);\n    });\n  });\n\n  describe('children', () => {\n    cases('renders a child element with component', () => {\n      const { container } = renderForm(\n        <Field name=\"name\" component=\"select\">\n          <option value=\"Jared\" label={TEXT} />\n          <option value=\"Brent\" label={TEXT} />\n        </Field>\n      );\n\n      expect(container.querySelectorAll('option')).toHaveLength(2);\n    });\n\n    cases('renders a child element with as', () => {\n      const { container } = renderForm(\n        <Field name=\"name\" as=\"select\">\n          <option value=\"Jared\" label={TEXT} />\n          <option value=\"Brent\" label={TEXT} />\n        </Field>\n      );\n\n      expect(container.querySelectorAll('option')).toHaveLength(2);\n    });\n  });\n\n  describe('component', () => {\n    cases('renders string components', renderField => {\n      const { container } = renderField({\n        component: 'textarea',\n      });\n\n      expect((container.firstChild as $FixMe).type).toBe('textarea');\n    });\n\n    cases('assigns innerRef as a ref to string components', renderField => {\n      const innerRef = jest.fn();\n      const { container } = renderField({\n        innerRef,\n        component: 'input',\n      });\n\n      expect(innerRef).toHaveBeenCalledWith(container.firstChild);\n    });\n\n    cases('forwards innerRef to React component', renderField => {\n      let injected: any; /** FieldProps ;) */\n      const Component = (props: FieldProps) => (injected = props) && null;\n\n      const innerRef = jest.fn();\n      renderField({ component: Component, innerRef });\n      expect(injected.innerRef).toBe(innerRef);\n    });\n  });\n\n  describe('as', () => {\n    cases('renders string components', renderField => {\n      const { container } = renderField({\n        as: 'textarea',\n      });\n\n      expect((container.firstChild as $FixMe).type).toBe('textarea');\n    });\n\n    cases('assigns innerRef as a ref to string components', renderField => {\n      const innerRef = jest.fn();\n      const { container } = renderField({\n        innerRef,\n        as: 'input',\n      });\n\n      expect(innerRef).toHaveBeenCalledWith(container.firstChild);\n    });\n\n    cases('forwards innerRef to React component', renderField => {\n      let injected: any; /** FieldProps ;) */\n      const Component = (props: FieldProps['field']) =>\n        (injected = props) && null;\n\n      const innerRef = jest.fn();\n      renderField({ as: Component, innerRef });\n      expect(injected.innerRef).toBe(innerRef);\n    });\n  });\n\n  describe('validate', () => {\n    cases('calls validate during onChange if present', async renderField => {\n      const validate = jest.fn();\n      const { getByTestId, rerender } = renderField({\n        validate,\n        component: 'input',\n      });\n      rerender();\n      fireEvent.change(getByTestId('name-input'), {\n        target: { name: 'name', value: 'hello' },\n      });\n\n      rerender();\n      await waitFor(() => {\n        expect(validate).toHaveBeenCalled();\n      });\n    });\n\n    cases(\n      'does NOT call validate during onChange if validateOnChange is set to false',\n      async renderField => {\n        const validate = jest.fn();\n        const { getByTestId, rerender } = renderField(\n          { validate, component: 'input' },\n          { validateOnChange: false }\n        );\n        rerender();\n        fireEvent.change(getByTestId('name-input'), {\n          target: { name: 'name', value: 'hello' },\n        });\n        rerender();\n        await waitFor(() => {\n          expect(validate).not.toHaveBeenCalled();\n        });\n      }\n    );\n\n    cases('calls validate during onBlur if present', async renderField => {\n      const validate = jest.fn();\n      const { getByTestId, rerender } = renderField({\n        validate,\n        component: 'input',\n      });\n      rerender();\n      fireEvent.blur(getByTestId('name-input'), {\n        target: { name: 'name' },\n      });\n      rerender();\n      await waitFor(() => {\n        expect(validate).toHaveBeenCalled();\n      });\n    });\n\n    cases(\n      'does NOT call validate during onBlur if validateOnBlur is set to false',\n      async renderField => {\n        const validate = jest.fn();\n        const { getByTestId, rerender } = renderField(\n          { validate, component: 'input' },\n          { validateOnBlur: false }\n        );\n\n        rerender();\n        fireEvent.blur(getByTestId('name-input'), {\n          target: { name: 'name' },\n        });\n        rerender();\n\n        await waitFor(() => expect(validate).not.toHaveBeenCalled());\n      }\n    );\n\n    cases(\n      'runs validation when validateField is called (SYNC)',\n      async renderField => {\n        const validate = jest.fn(() => 'Error!');\n        const { getFormProps, rerender } = renderField({\n          validate,\n          component: 'input',\n        });\n        rerender();\n\n        act(() => {\n          getFormProps().validateField('name');\n        });\n\n        rerender();\n        await waitFor(() => {\n          expect(validate).toHaveBeenCalled();\n          expect(getFormProps().errors.name).toBe('Error!');\n        });\n      }\n    );\n\n    cases(\n      'runs validation when validateField is called (ASYNC)',\n      async renderField => {\n        const validate = jest.fn(() => Promise.resolve('Error!'));\n\n        const { getFormProps, rerender } = renderField({ validate });\n\n        // workaround for `useEffect` to run: https://github.com/facebook/react/issues/14050\n        rerender();\n\n        act(() => {\n          getFormProps().validateField('name');\n        });\n\n        expect(validate).toHaveBeenCalled();\n        await waitFor(() => expect(getFormProps().errors.name).toBe('Error!'));\n      }\n    );\n\n    cases(\n      'runs validationSchema validation when validateField is called',\n      async renderField => {\n        const errorMessage = 'Name must be 100 characters in length';\n\n        const validationSchema = Yup.object({\n          name: Yup.string().min(100, errorMessage),\n        });\n        const { getFormProps, rerender } = renderField(\n          {},\n          { validationSchema }\n        );\n\n        rerender();\n\n        act(() => {\n          getFormProps().validateField('name');\n        });\n\n        await waitFor(() =>\n          expect(getFormProps().errors).toEqual({\n            name: errorMessage,\n          })\n        );\n      }\n    );\n\n    cases(\n      'constructs error for a nested field when validateField is called',\n      async renderField => {\n        const validationSchema = Yup.object({\n          user: Yup.object().shape({\n            name: Yup.string().required('required'),\n          }),\n        });\n\n        const { getFormProps, rerender } = renderField(\n          {},\n          { validationSchema }\n        );\n\n        rerender();\n\n        act(() => {\n          getFormProps().validateField('user.name');\n        });\n\n        await waitFor(() =>\n          expect(getFormProps().errors).toEqual({ user: { name: 'required' } })\n        );\n      }\n    );\n  });\n\n  describe('warnings', () => {\n    cases('warns about render prop deprecation', renderField => {\n      global.console.warn = jest.fn();\n      const { rerender } = renderField({\n        render: () => null,\n      });\n      rerender();\n      expect((global.console.warn as jest.Mock).mock.calls[0][0]).toContain(\n        'deprecated'\n      );\n    });\n\n    cases(\n      'warns if both string component and children as a function',\n      renderField => {\n        global.console.warn = jest.fn();\n\n        const { rerender } = renderField({\n          component: 'select',\n          children: () => <option value=\"Jared\">{TEXT}</option>,\n        });\n        rerender();\n        expect((global.console.warn as jest.Mock).mock.calls[0][0]).toContain(\n          'Warning:'\n        );\n      }\n    );\n\n    cases(\n      'warns if both string as prop and children as a function',\n      renderField => {\n        global.console.warn = jest.fn();\n\n        const { rerender } = renderField({\n          as: 'select',\n          children: () => <option value=\"Jared\">{TEXT}</option>,\n        });\n        rerender();\n        expect((global.console.warn as jest.Mock).mock.calls[0][0]).toContain(\n          'Warning:'\n        );\n      }\n    );\n\n    cases(\n      'warns if both non-string component and children children as a function',\n      renderField => {\n        global.console.warn = jest.fn();\n\n        const { rerender } = renderField({\n          component: () => null,\n          children: () => <option value=\"Jared\">{TEXT}</option>,\n        });\n        rerender();\n        expect((global.console.warn as jest.Mock).mock.calls[0][0]).toContain(\n          'Warning:'\n        );\n      }\n    );\n\n    cases('warns if both string component and render', renderField => {\n      global.console.warn = jest.fn();\n\n      const { rerender } = renderField({\n        component: 'textarea',\n        render: () => <option value=\"Jared\">{TEXT}</option>,\n      });\n      rerender();\n      expect((global.console.warn as jest.Mock).mock.calls[0][0]).toContain(\n        'Warning:'\n      );\n    });\n\n    cases('warns if both non-string component and render', renderField => {\n      global.console.warn = jest.fn();\n\n      const { rerender } = renderField({\n        component: () => null,\n        render: () => <option value=\"Jared\">{TEXT}</option>,\n      });\n      rerender();\n      expect((global.console.warn as jest.Mock).mock.calls[0][0]).toContain(\n        'Warning:'\n      );\n    });\n\n    cases('warns if both children and render', renderField => {\n      global.console.warn = jest.fn();\n\n      const { rerender } = renderField({\n        children: <div>{TEXT}</div>,\n        render: () => <div>{TEXT}</div>,\n      });\n      rerender();\n      expect((global.console.warn as jest.Mock).mock.calls[0][0]).toContain(\n        'Warning:'\n      );\n    });\n  });\n\n  cases('can resolve bracket paths', renderField => {\n    const { getProps } = renderField(\n      { name: 'user[superPowers][0]' },\n      {\n        initialValues: { user: { superPowers: ['Surging', 'Binding'] } } as any,\n      } // TODO: fix generic type\n    );\n\n    expect(getProps().field.value).toBe('Surging');\n  });\n\n  cases('can resolve mixed dot and bracket paths', renderField => {\n    const { getProps } = renderField(\n      { name: 'user.superPowers[1]' },\n      {\n        initialValues: { user: { superPowers: ['Surging', 'Binding'] } } as any,\n      } // TODO: fix generic type\n    );\n\n    expect(getProps().field.value).toBe('Binding');\n  });\n\n  cases('can resolve mixed dot and bracket paths II', renderField => {\n    const { getProps } = renderField(\n      // tslint:disable-next-line:quotemark\n      { name: \"user['superPowers'].1\" },\n      {\n        initialValues: { user: { superPowers: ['Surging', 'Binding'] } } as any,\n      } // TODO: fix generic type\n    );\n\n    expect(getProps().field.value).toBe('Binding');\n  });\n});\n\n// @todo Deprecated\n// describe('<FastField />', () => {\n//   it('does NOT forward shouldUpdate to React component', () => {\n//     let injected: any;\n//     const Component = (props: FieldProps) => (injected = props) && null;\n\n//     const shouldUpdate = () => true;\n//     renderFastField({ component: Component, shouldUpdate });\n//     expect(injected.shouldUpdate).toBe(undefined);\n//   });\n// });\n"
  },
  {
    "path": "packages/formik/test/FieldArray.test.tsx",
    "content": "import { act, fireEvent, render, screen } from '@testing-library/react';\nimport * as React from 'react';\nimport * as Yup from 'yup';\n\nimport { FieldArray, FieldArrayRenderProps, Formik, isFunction } from '../src';\n\nconst noop = () => {};\n\nconst TestForm: React.FC<any> = p => (\n  <Formik\n    onSubmit={noop}\n    initialValues={{ friends: ['jared', 'andrea', 'brent'] }}\n    {...p}\n  />\n);\n\ndescribe('<FieldArray />', () => {\n  it('renders component with array helpers as props', () => {\n    const TestComponent = (arrayProps: any) => {\n      expect(isFunction(arrayProps.push)).toBeTruthy();\n      return null;\n    };\n\n    render(\n      <TestForm\n        component={() => (\n          <FieldArray name=\"friends\" component={TestComponent} />\n        )}\n      />\n    );\n  });\n\n  it('renders with render callback with array helpers as props', () => {\n    render(\n      <TestForm>\n        {() => (\n          <FieldArray\n            name=\"friends\"\n            render={arrayProps => {\n              expect(isFunction(arrayProps.push)).toBeTruthy();\n              return null;\n            }}\n          />\n        )}\n      </TestForm>\n    );\n  });\n\n  it('renders with \"children as a function\" with array helpers as props', () => {\n    render(\n      <TestForm>\n        {() => (\n          <FieldArray name=\"friends\">\n            {arrayProps => {\n              expect(isFunction(arrayProps.push)).toBeTruthy();\n              return null;\n            }}\n          </FieldArray>\n        )}\n      </TestForm>\n    );\n  });\n\n  it('renders with name as props', () => {\n    render(\n      <TestForm>\n        {() => (\n          <FieldArray\n            name=\"friends\"\n            render={arrayProps => {\n              expect(arrayProps.name).toBe('friends');\n              return null;\n            }}\n          />\n        )}\n      </TestForm>\n    );\n  });\n\n  describe('props.push()', () => {\n    it('should add a value to the end of the field array', () => {\n      let formikBag: any;\n      let arrayHelpers: FieldArrayRenderProps;\n      render(\n        <TestForm>\n          {(props: any) => {\n            formikBag = props;\n            return (\n              <FieldArray\n                name=\"friends\"\n                render={arrayProps => {\n                  arrayHelpers = arrayProps;\n                  return null;\n                }}\n              />\n            );\n          }}\n        </TestForm>\n      );\n\n      act(() => {\n        arrayHelpers.push('jared');\n      });\n\n      const expected = ['jared', 'andrea', 'brent', 'jared'];\n      expect(formikBag.values.friends).toEqual(expected);\n    });\n\n    it('should add multiple values to the end of the field array', () => {\n      let formikBag: any;\n      const AddFriendsButton = (arrayProps: any) => {\n        const addFriends = () => {\n          arrayProps.push('john');\n          arrayProps.push('paul');\n          arrayProps.push('george');\n          arrayProps.push('ringo');\n        };\n\n        return (\n          <button\n            data-testid=\"add-friends-button\"\n            type=\"button\"\n            onClick={addFriends}\n          />\n        );\n      };\n\n      render(\n        <TestForm>\n          {(props: any) => {\n            formikBag = props;\n            return <FieldArray name=\"friends\" render={AddFriendsButton} />;\n          }}\n        </TestForm>\n      );\n\n      act(() => {\n        const btn = screen.getByTestId('add-friends-button');\n        fireEvent.click(btn);\n      });\n\n      const expected = [\n        'jared',\n        'andrea',\n        'brent',\n        'john',\n        'paul',\n        'george',\n        'ringo',\n      ];\n      expect(formikBag.values.friends).toEqual(expected);\n    });\n\n    it('should push clone not actual reference', () => {\n      let personTemplate = { firstName: '', lastName: '' };\n      let formikBag: any;\n      let arrayHelpers: FieldArrayRenderProps;\n      render(\n        <TestForm initialValues={{ people: [] }}>\n          {(props: any) => {\n            formikBag = props;\n            return (\n              <FieldArray\n                name=\"people\"\n                render={arrayProps => {\n                  arrayHelpers = arrayProps;\n                  return null;\n                }}\n              />\n            );\n          }}\n        </TestForm>\n      );\n\n      act(() => {\n        arrayHelpers.push(personTemplate);\n      });\n      expect(\n        formikBag.values.people[formikBag.values.people.length - 1]\n      ).not.toBe(personTemplate);\n      expect(\n        formikBag.values.people[formikBag.values.people.length - 1]\n      ).toMatchObject(personTemplate);\n    });\n  });\n\n  describe('props.pop()', () => {\n    it('should remove and return the last value from the field array', () => {\n      let formikBag: any;\n      let arrayHelpers: FieldArrayRenderProps;\n      render(\n        <TestForm>\n          {(props: any) => {\n            formikBag = props;\n            return (\n              <FieldArray\n                name=\"friends\"\n                render={arrayProps => {\n                  arrayHelpers = arrayProps;\n                  return null;\n                }}\n              />\n            );\n          }}\n        </TestForm>\n      );\n\n      act(() => {\n        const el = arrayHelpers.pop();\n        expect(el).toEqual('brent');\n      });\n      const expected = ['jared', 'andrea'];\n      expect(formikBag.values.friends).toEqual(expected);\n    });\n  });\n\n  describe('props.swap()', () => {\n    it('should swap two values in field array', () => {\n      let formikBag: any;\n      let arrayHelpers: FieldArrayRenderProps;\n      render(\n        <TestForm>\n          {(props: any) => {\n            formikBag = props;\n            return (\n              <FieldArray\n                name=\"friends\"\n                render={arrayProps => {\n                  arrayHelpers = arrayProps;\n                  return null;\n                }}\n              />\n            );\n          }}\n        </TestForm>\n      );\n\n      act(() => {\n        arrayHelpers.swap(0, 2);\n      });\n      const expected = ['brent', 'andrea', 'jared'];\n      expect(formikBag.values.friends).toEqual(expected);\n    });\n  });\n\n  describe('props.insert()', () => {\n    it('should insert a value at given index of field array', () => {\n      let formikBag: any;\n      let arrayHelpers: FieldArrayRenderProps;\n      render(\n        <TestForm>\n          {(props: any) => {\n            formikBag = props;\n            return (\n              <FieldArray\n                name=\"friends\"\n                render={arrayProps => {\n                  arrayHelpers = arrayProps;\n                  return null;\n                }}\n              />\n            );\n          }}\n        </TestForm>\n      );\n\n      act(() => {\n        arrayHelpers.insert(1, 'brian');\n      });\n      const expected = ['jared', 'brian', 'andrea', 'brent'];\n      expect(formikBag.values.friends).toEqual(expected);\n    });\n  });\n\n  describe('props.replace()', () => {\n    it('should replace a value at given index of field array', () => {\n      let formikBag: any;\n      let arrayHelpers: FieldArrayRenderProps;\n      render(\n        <TestForm>\n          {(props: any) => {\n            formikBag = props;\n            return (\n              <FieldArray\n                name=\"friends\"\n                render={arrayProps => {\n                  arrayHelpers = arrayProps;\n                  return null;\n                }}\n              />\n            );\n          }}\n        </TestForm>\n      );\n\n      act(() => {\n        arrayHelpers.replace(1, 'brian');\n      });\n      const expected = ['jared', 'brian', 'brent'];\n      expect(formikBag.values.friends).toEqual(expected);\n    });\n  });\n\n  describe('props.unshift()', () => {\n    it('should add a value to start of field array and return its length', () => {\n      let formikBag: any;\n      let arrayHelpers: FieldArrayRenderProps;\n      render(\n        <TestForm>\n          {(props: any) => {\n            formikBag = props;\n            return (\n              <FieldArray\n                name=\"friends\"\n                render={arrayProps => {\n                  arrayHelpers = arrayProps;\n                  return null;\n                }}\n              />\n            );\n          }}\n        </TestForm>\n      );\n\n      let el: any;\n      act(() => {\n        el = arrayHelpers.unshift('brian');\n      });\n      const expected = ['brian', 'jared', 'andrea', 'brent'];\n      expect(formikBag.values.friends).toEqual(expected);\n      expect(el).toEqual(4);\n    });\n  });\n\n  describe('props.remove()', () => {\n    let formikBag: any;\n    let arrayHelpers: FieldArrayRenderProps;\n\n    beforeEach(() => {\n      render(\n        <TestForm>\n          {(props: any) => {\n            formikBag = props;\n            return (\n              <FieldArray\n                name=\"friends\"\n                render={arrayProps => {\n                  arrayHelpers = arrayProps;\n                  return null;\n                }}\n              />\n            );\n          }}\n        </TestForm>\n      );\n    });\n    it('should remove a value at given index of field array', () => {\n      act(() => {\n        arrayHelpers.remove(1);\n      });\n      const expected = ['jared', 'brent'];\n      expect(formikBag.values.friends).toEqual(expected);\n    });\n\n    it('should be an empty array when removing all values', () => {\n      act(() => {\n        arrayHelpers.remove(0);\n        arrayHelpers.remove(0);\n        arrayHelpers.remove(0);\n      });\n      const expected: any[] = [];\n\n      expect(formikBag.values.friends).toEqual(expected);\n    });\n    it('should clean field from errors and touched', () => {\n      act(() => {\n        // seems weird calling 0 multiple times, but every time we call remove, the indexes get updated.\n        arrayHelpers.remove(0);\n        arrayHelpers.remove(0);\n        arrayHelpers.remove(0);\n      });\n\n      expect(formikBag.errors.friends).toEqual(undefined);\n      expect(formikBag.touched.friends).toEqual(undefined);\n    });\n    it('should clean up errors', () => {\n      act(() => {\n        formikBag.setFieldError('friends.1', 'Field error');\n        arrayHelpers.remove(1);\n      });\n\n      expect(formikBag.errors.friends).toEqual(undefined);\n    });\n  });\n\n  describe('given array-like object representing errors', () => {\n    it('should run arrayHelpers successfully', async () => {\n      let formikBag: any;\n      let arrayHelpers: FieldArrayRenderProps;\n      render(\n        <TestForm>\n          {(props: any) => {\n            formikBag = props;\n            return (\n              <FieldArray name=\"friends\">\n                {arrayProps => {\n                  arrayHelpers = arrayProps;\n                  return null;\n                }}\n              </FieldArray>\n            );\n          }}\n        </TestForm>\n      );\n\n      act(() => {\n        formikBag.setErrors({ friends: { 2: ['Field error'] } });\n      });\n\n      let el: any;\n      await act(async () => {\n        await arrayHelpers.push('michael');\n        el = arrayHelpers.pop();\n        arrayHelpers.swap(0, 2);\n        arrayHelpers.insert(1, 'michael');\n        arrayHelpers.replace(1, 'brian');\n        arrayHelpers.unshift('michael');\n        arrayHelpers.remove(1);\n      });\n\n      expect(el).toEqual('michael');\n      const finalExpected = ['michael', 'brian', 'andrea', 'jared'];\n      expect(formikBag.values.friends).toEqual(finalExpected);\n    });\n  });\n\n  describe('schema validation', () => {\n    const schema = Yup.object({\n      friends: Yup.array(Yup.string().required()).required().min(3),\n    });\n\n    let formikBag: any;\n    let arrayHelpers: FieldArrayRenderProps;\n\n    beforeEach(() => {\n      render(\n        <Formik\n          initialValues={{ friends: [] }}\n          onSubmit={noop}\n          validationSchema={schema}\n          validateOnMount\n        >\n          {(props: any) => {\n            formikBag = props;\n            return (\n              <FieldArray name=\"friends\">\n                {arrayProps => {\n                  arrayHelpers = arrayProps;\n                  return null;\n                }}\n              </FieldArray>\n            );\n          }}\n        </Formik>\n      );\n    });\n\n    describe('props.push()', () => {\n      it('should return error string with top level violation', async () => {\n        await act(async () => {\n          await arrayHelpers.push('michael');\n        });\n\n        expect(formikBag.errors.friends).toBe(\n          'friends field must have at least 3 items'\n        );\n      });\n\n      it('should return errors array with nested value violation', async () => {\n        await act(async () => {\n          await arrayHelpers.push('michael');\n          arrayHelpers.push('brian');\n          arrayHelpers.push('');\n          arrayHelpers.push('andrea');\n        });\n\n        expect(formikBag.errors.friends).toHaveLength(3);\n        expect(formikBag.errors.friends[0]).toBeUndefined();\n        expect(formikBag.errors.friends[1]).toBeUndefined();\n        expect(formikBag.errors.friends[2]).toBe(\n          'friends[2] is a required field'\n        );\n      });\n    });\n\n    describe('props.swap()', () => {\n      it('should return error string with top level violation', async () => {\n        await act(async () => {\n          await arrayHelpers.push('michael');\n          arrayHelpers.push('brian');\n          arrayHelpers.swap(0, 1);\n        });\n\n        expect(formikBag.errors.friends).toBe(\n          'friends field must have at least 3 items'\n        );\n      });\n\n      it('should return errors array with nested value violation', async () => {\n        await act(async () => {\n          await arrayHelpers.push('michael');\n          arrayHelpers.push('brian');\n          arrayHelpers.push('');\n          arrayHelpers.push('andrea');\n          arrayHelpers.swap(1, 2);\n        });\n\n        expect(formikBag.errors.friends).toHaveLength(2);\n        expect(formikBag.errors.friends[0]).toBeUndefined();\n        expect(formikBag.errors.friends[1]).toBe(\n          'friends[1] is a required field'\n        );\n      });\n    });\n\n    describe('props.move()', () => {\n      it('should return error string with top level violation', async () => {\n        await act(async () => {\n          await arrayHelpers.push('michael');\n          arrayHelpers.push('brian');\n          arrayHelpers.move(0, 1);\n        });\n\n        expect(formikBag.errors.friends).toBe(\n          'friends field must have at least 3 items'\n        );\n      });\n\n      it('should return errors array with nested value violation', async () => {\n        await act(async () => {\n          await arrayHelpers.push('michael');\n          arrayHelpers.push('brian');\n          arrayHelpers.push('');\n          arrayHelpers.push('andrea');\n          arrayHelpers.move(1, 2);\n        });\n\n        expect(formikBag.errors.friends).toHaveLength(2);\n        expect(formikBag.errors.friends[0]).toBeUndefined();\n        expect(formikBag.errors.friends[1]).toBe(\n          'friends[1] is a required field'\n        );\n      });\n    });\n\n    describe('props.insert()', () => {\n      it('should return error string with top level violation', async () => {\n        await act(async () => {\n          await arrayHelpers.push('michael');\n          arrayHelpers.insert(1, 'brian');\n        });\n\n        expect(formikBag.errors.friends).toBe(\n          'friends field must have at least 3 items'\n        );\n      });\n\n      it('should return errors array with nested value violation', async () => {\n        await act(async () => {\n          await arrayHelpers.push('michael');\n          arrayHelpers.push('brian');\n          arrayHelpers.push('andrea');\n          arrayHelpers.insert(1, '');\n        });\n\n        expect(formikBag.errors.friends).toHaveLength(2);\n        expect(formikBag.errors.friends[0]).toBeUndefined();\n        expect(formikBag.errors.friends[1]).toBe(\n          'friends[1] is a required field'\n        );\n      });\n    });\n\n    describe('props.unshift()', () => {\n      it('should return error string with top level violation', async () => {\n        await act(async () => {\n          await arrayHelpers.push('michael');\n          arrayHelpers.unshift('brian');\n        });\n\n        expect(formikBag.errors.friends).toBe(\n          'friends field must have at least 3 items'\n        );\n      });\n\n      it('should return errors array with nested value violation', async () => {\n        await act(async () => {\n          await arrayHelpers.push('');\n          arrayHelpers.push('brian');\n          arrayHelpers.push('andrea');\n\n          arrayHelpers.unshift('michael');\n        });\n\n        expect(formikBag.errors.friends).toHaveLength(2);\n        expect(formikBag.errors.friends[0]).toBeUndefined();\n        expect(formikBag.errors.friends[1]).toBe(\n          'friends[1] is a required field'\n        );\n      });\n    });\n\n    describe('props.remove()', () => {\n      it('should return error string with top level violation ', async () => {\n        await act(async () => {\n          await arrayHelpers.push('michael');\n          arrayHelpers.push('brian');\n          arrayHelpers.push('andrea');\n          arrayHelpers.remove(0);\n          arrayHelpers.remove(0);\n        });\n\n        expect(formikBag.errors.friends).toBe(\n          'friends field must have at least 3 items'\n        );\n      });\n\n      it('should return errors array with nested value violation', async () => {\n        await act(async () => {\n          await arrayHelpers.push('michael');\n          arrayHelpers.push('brian');\n          arrayHelpers.push(''); // index specific violation\n          arrayHelpers.push('andrea');\n          arrayHelpers.remove(0);\n        });\n\n        expect(formikBag.errors.friends).toHaveLength(2);\n        expect(formikBag.errors.friends[0]).toBeUndefined();\n        expect(formikBag.errors.friends[1]).toBe(\n          'friends[1] is a required field'\n        );\n        expect(formikBag.errors.friends[2]).toBeUndefined();\n        expect(formikBag.errors.friends[4]).toBeUndefined();\n      });\n    });\n\n    describe('props.pop()', () => {\n      it('should return error string with top level violation', async () => {\n        await act(async () => {\n          await arrayHelpers.push('michael');\n          arrayHelpers.push('brian');\n          arrayHelpers.push('andrea');\n          arrayHelpers.pop();\n        });\n\n        expect(formikBag.errors.friends).toBe(\n          'friends field must have at least 3 items'\n        );\n      });\n\n      it('should return errors array with nested value violation', async () => {\n        await act(async () => {\n          await arrayHelpers.push('michael');\n          arrayHelpers.push('brian');\n          arrayHelpers.push('');\n          arrayHelpers.push('andrea');\n          arrayHelpers.pop();\n        });\n\n        expect(formikBag.errors.friends).toHaveLength(3);\n        expect(formikBag.errors.friends[0]).toBeUndefined();\n        expect(formikBag.errors.friends[1]).toBeUndefined();\n        expect(formikBag.errors.friends[2]).toBe(\n          'friends[2] is a required field'\n        );\n      });\n    });\n\n    describe('props.replace()', () => {\n      it('should return error string with top level violation', async () => {\n        await act(async () => {\n          await arrayHelpers.push('michael');\n          arrayHelpers.replace(0, 'brian');\n        });\n\n        expect(formikBag.errors.friends).toBe(\n          'friends field must have at least 3 items'\n        );\n      });\n\n      it('should return errors array with nested value violation', async () => {\n        await act(async () => {\n          arrayHelpers.unshift('michael');\n          await arrayHelpers.push('brian');\n          arrayHelpers.push('andrea');\n          arrayHelpers.push('jared');\n\n          await arrayHelpers.replace(1, '');\n        });\n\n        expect(formikBag.errors.friends).toHaveLength(2);\n        expect(formikBag.errors.friends[0]).toBeUndefined();\n        expect(formikBag.errors.friends[1]).toBe(\n          'friends[1] is a required field'\n        );\n      });\n    });\n  });\n});\n"
  },
  {
    "path": "packages/formik/test/Formik.test.tsx",
    "content": "import * as React from 'react';\nimport {\n  act,\n  fireEvent,\n  render,\n  screen,\n  waitFor,\n} from '@testing-library/react';\nimport * as Yup from 'yup';\n\nimport {\n  Formik,\n  FormikConfig,\n  FormikProps,\n  FormikValues,\n  prepareDataForValidation,\n} from '../src';\nimport { noop } from './testHelpers';\n\njest.spyOn(global.console, 'warn');\n\ninterface Values {\n  name: string;\n  age?: number;\n}\n\nfunction Form({\n  values,\n  touched,\n  handleSubmit,\n  handleChange,\n  handleBlur,\n  status,\n  errors,\n  isSubmitting,\n}: FormikProps<Values>) {\n  return (\n    <form onSubmit={handleSubmit} data-testid=\"form\">\n      <input\n        type=\"text\"\n        onChange={handleChange}\n        onBlur={handleBlur}\n        value={values.name}\n        name=\"name\"\n        data-testid=\"name-input\"\n      />\n      {touched.name && errors.name && <div id=\"feedback\">{errors.name}</div>}\n      {isSubmitting && <div id=\"submitting\">Submitting</div>}\n      {status && !!status.myStatusMessage && (\n        <div id=\"statusMessage\">{status.myStatusMessage}</div>\n      )}\n      <button type=\"submit\" data-testid=\"submit-button\">\n        Submit\n      </button>\n    </form>\n  );\n}\n\nconst InitialValues = {\n  name: 'jared',\n  age: 30,\n};\n\nconst InitialValuesWithNestedObject = {\n  content: {\n    items: [\n      {\n        cards: [\n          {\n            desc: 'Initial Desc',\n          },\n        ],\n      },\n    ],\n  },\n};\n\nfunction renderFormik<V extends FormikValues = Values>(\n  props?: Partial<FormikConfig<V>>\n) {\n  let injected: FormikProps<V>;\n  const { rerender, ...rest } = render(\n    <Formik<V>\n      onSubmit={noop as any}\n      initialValues={InitialValues as any}\n      {...props}\n    >\n      {formikProps =>\n        (injected = formikProps) && (\n          <Form {...((formikProps as unknown) as FormikProps<Values>)} />\n        )\n      }\n    </Formik>\n  );\n  return {\n    getProps(): FormikProps<V> {\n      return injected;\n    },\n    ...rest,\n    rerender: () =>\n      rerender(\n        <Formik\n          onSubmit={noop as any}\n          initialValues={InitialValues as any}\n          {...props}\n        >\n          {formikProps =>\n            (injected = formikProps) && (\n              <Form {...((formikProps as unknown) as FormikProps<Values>)} />\n            )\n          }\n        </Formik>\n      ),\n  };\n}\n\ndescribe('<Formik>', () => {\n  it('should initialize Formik state and pass down props', () => {\n    const { getProps } = renderFormik();\n    const props = getProps();\n\n    expect(props.isSubmitting).toBe(false);\n    expect(props.touched).toEqual({});\n    expect(props.values).toEqual(InitialValues);\n    expect(props.errors).toEqual({});\n    expect(props.dirty).toBe(false);\n    expect(props.isValid).toBe(true);\n    expect(props.submitCount).toBe(0);\n  });\n\n  describe('handleChange', () => {\n    it('updates values based on name attribute', () => {\n      const { getProps, getByTestId } = renderFormik<Values>();\n\n      expect(getProps().values.name).toEqual(InitialValues.name);\n\n      const input = getByTestId('name-input');\n      fireEvent.change(input, {\n        persist: noop,\n        target: {\n          name: 'name',\n          value: 'ian',\n        },\n      });\n\n      expect(getProps().values.name).toEqual('ian');\n    });\n\n    it('updates values when passed a string (overloaded)', () => {\n      let injected: any;\n      const { getByTestId } = render(\n        <Formik initialValues={InitialValues} onSubmit={noop}>\n          {formikProps =>\n            (injected = formikProps) && (\n              <input\n                onChange={formikProps.handleChange('name')}\n                data-testid=\"name-input\"\n              />\n            )\n          }\n        </Formik>\n      );\n      const input = getByTestId('name-input');\n\n      expect(injected.values.name).toEqual(InitialValues.name);\n\n      fireEvent.change(input, {\n        persist: noop,\n        target: {\n          name: 'name',\n          value: 'ian',\n        },\n      });\n\n      expect(injected.values.name).toEqual('ian');\n    });\n\n    it('updates values via `name` instead of `id` attribute when both are present', () => {\n      const { getProps, getByTestId } = renderFormik<Values>();\n\n      expect(getProps().values.name).toEqual(InitialValues.name);\n\n      const input = getByTestId('name-input');\n      fireEvent.change(input, {\n        persist: noop,\n        target: {\n          id: 'person-1-thinger',\n          name: 'name',\n          value: 'ian',\n        },\n      });\n\n      expect(getProps().values.name).toEqual('ian');\n    });\n\n    it('updates values when passed a string (overloaded)', () => {\n      let injected: any;\n      render(\n        <Formik initialValues={InitialValues} onSubmit={noop}>\n          {formikProps =>\n            (injected = formikProps) && (\n              <input\n                onChange={formikProps.handleChange('name')}\n                data-testid=\"name-input\"\n              />\n            )\n          }\n        </Formik>\n      );\n      const input = screen.getByTestId('name-input');\n\n      expect(injected.values.name).toEqual('jared');\n      fireEvent.change(input, {\n        target: {\n          name: 'name',\n          value: 'ian',\n        },\n      });\n\n      expect(injected.values.name).toEqual('ian');\n    });\n\n    it('runs validations by default', async () => {\n      const validate = jest.fn(() => Promise.resolve());\n      const validationSchema = {\n        validate,\n      };\n      const { rerender } = renderFormik({\n        validate,\n        validationSchema,\n      });\n\n      fireEvent.change(screen.getByTestId('name-input'), {\n        persist: noop,\n        target: {\n          name: 'name',\n          value: 'ian',\n        },\n      });\n      rerender();\n      await waitFor(() => {\n        expect(validate).toHaveBeenCalledTimes(2);\n      });\n    });\n\n    it('does NOT run validations if validateOnChange is false', async () => {\n      const validate = jest.fn(() => Promise.resolve());\n      const validationSchema = {\n        validate,\n      };\n      const { rerender } = renderFormik({\n        validate,\n        validationSchema,\n        validateOnChange: false,\n      });\n\n      fireEvent.change(screen.getByTestId('name-input'), {\n        persist: noop,\n        target: {\n          name: 'name',\n          value: 'ian',\n        },\n      });\n      rerender();\n      await waitFor(() => {\n        expect(validate).not.toHaveBeenCalled();\n      });\n    });\n  });\n\n  describe('handleBlur', () => {\n    it('sets touched state', () => {\n      const { getProps } = renderFormik<Values>();\n      expect(getProps().touched.name).toEqual(undefined);\n\n      const input = screen.getByTestId('name-input');\n      fireEvent.blur(input, {\n        target: {\n          name: 'name',\n        },\n      });\n      expect(getProps().touched.name).toEqual(true);\n    });\n\n    it('updates touched state via `name` instead of `id` attribute when both are present', () => {\n      const { getProps } = renderFormik<Values>();\n      expect(getProps().touched.name).toEqual(undefined);\n\n      const input = screen.getByTestId('name-input');\n      fireEvent.blur(input, {\n        target: {\n          id: 'blah',\n          name: 'name',\n        },\n      });\n      expect(getProps().touched.name).toEqual(true);\n    });\n\n    it('updates touched when passed a string (overloaded)', () => {\n      let injected: any;\n      render(\n        <Formik initialValues={InitialValues} onSubmit={noop}>\n          {formikProps =>\n            (injected = formikProps) && (\n              <input\n                onBlur={formikProps.handleBlur('name')}\n                data-testid=\"name-input\"\n              />\n            )\n          }\n        </Formik>\n      );\n      const input = screen.getByTestId('name-input');\n\n      expect(injected.touched.name).toEqual(undefined);\n      fireEvent.blur(input, {\n        target: {\n          name: 'name',\n          value: 'ian',\n        },\n      });\n\n      expect(injected.touched.name).toEqual(true);\n    });\n\n    it('runs validate by default', async () => {\n      const validate = jest.fn(noop);\n      const { rerender } = renderFormik({ validate });\n\n      fireEvent.blur(screen.getByTestId('name-input'), {\n        target: {\n          name: 'name',\n        },\n      });\n      rerender();\n      await waitFor(() => {\n        expect(validate).toHaveBeenCalled();\n      });\n    });\n\n    it('runs validations by default', async () => {\n      const validate = jest.fn(() => Promise.resolve());\n      const validationSchema = {\n        validate,\n      };\n      const { rerender } = renderFormik({\n        validate,\n        validationSchema,\n      });\n\n      fireEvent.blur(screen.getByTestId('name-input'), {\n        target: {\n          name: 'name',\n        },\n      });\n      rerender();\n      await waitFor(() => {\n        expect(validate).toHaveBeenCalledTimes(2);\n      });\n    });\n\n    it('runs validations if validateOnBlur is true (default)', async () => {\n      const validate = jest.fn(() => Promise.resolve());\n      const validationSchema = {\n        validate,\n      };\n      const { rerender } = renderFormik({\n        validate,\n        validationSchema,\n      });\n\n      fireEvent.blur(screen.getByTestId('name-input'), {\n        target: {\n          name: 'name',\n        },\n      });\n      rerender();\n      await waitFor(() => {\n        expect(validate).toHaveBeenCalledTimes(2);\n      });\n    });\n\n    it('dost NOT run validations if validateOnBlur is false', async () => {\n      const validate = jest.fn(() => Promise.resolve());\n      const validationSchema = {\n        validate,\n      };\n      const { rerender } = renderFormik({\n        validate,\n        validationSchema,\n        validateOnBlur: false,\n      });\n      rerender();\n      await waitFor(() => expect(validate).not.toHaveBeenCalled());\n    });\n  });\n\n  describe('handleSubmit', () => {\n    it('should call preventDefault()', () => {\n      const preventDefault = jest.fn();\n      const FormPreventDefault = (\n        <Formik initialValues={{ name: 'jared' }} onSubmit={noop}>\n          {({ handleSubmit }) => (\n            <button\n              data-testid=\"submit-button\"\n              onClick={() => handleSubmit({ preventDefault } as any)}\n            />\n          )}\n        </Formik>\n      );\n\n      render(FormPreventDefault);\n      fireEvent.click(screen.getByTestId('submit-button'));\n\n      expect(preventDefault).toHaveBeenCalled();\n    });\n\n    it('should not error if called without an event', () => {\n      const FormNoEvent = (\n        <Formik initialValues={{ name: 'jared' }} onSubmit={noop}>\n          {({ handleSubmit }) => (\n            <button\n              data-testid=\"submit-button\"\n              onClick={() =>\n                handleSubmit(undefined as any /* undefined event */)\n              }\n            />\n          )}\n        </Formik>\n      );\n\n      render(FormNoEvent);\n\n      expect(() => {\n        fireEvent.click(screen.getByTestId('submit-button'));\n      }).not.toThrow();\n    });\n\n    it('should not error if called without preventDefault property', () => {\n      const FormNoPreventDefault = (\n        <Formik initialValues={{ name: 'jared' }} onSubmit={noop}>\n          {({ handleSubmit }) => (\n            <button\n              data-testid=\"submit-button\"\n              onClick={() => handleSubmit({} as any /* undefined event */)}\n            />\n          )}\n        </Formik>\n      );\n\n      render(FormNoPreventDefault);\n\n      expect(() => {\n        fireEvent.click(screen.getByTestId('submit-button'));\n      }).not.toThrow();\n    });\n\n    it('should not error if onSubmit throws an error', () => {\n      const FormNoPreventDefault = (\n        <Formik\n          initialValues={{ name: 'jared' }}\n          onSubmit={() => Promise.reject('oops')}\n        >\n          {({ handleSubmit }) => (\n            <button\n              data-testid=\"submit-button\"\n              onClick={() =>\n                handleSubmit(undefined as any /* undefined event */)\n              }\n            />\n          )}\n        </Formik>\n      );\n\n      render(FormNoPreventDefault);\n\n      expect(() => {\n        fireEvent.click(screen.getByTestId('submit-button'));\n      }).not.toThrow();\n    });\n\n    it('should touch all fields', () => {\n      const { getProps } = renderFormik();\n      expect(getProps().touched).toEqual({});\n\n      fireEvent.submit(screen.getByTestId('form'));\n      expect(getProps().touched).toEqual({ name: true, age: true });\n    });\n\n    it('should push submission state changes to child component', () => {\n      const { getProps, getByTestId } = renderFormik();\n      expect(getProps().isSubmitting).toBeFalsy();\n\n      fireEvent.submit(getByTestId('form'));\n      expect(getProps().isSubmitting).toBeTruthy();\n    });\n\n    describe('with validate (SYNC)', () => {\n      it('should call validate if present', () => {\n        const validate = jest.fn(() => ({}));\n        const { getByTestId } = renderFormik({ validate });\n        fireEvent.submit(getByTestId('form'));\n        expect(validate).toHaveBeenCalled();\n      });\n\n      it('should submit the form if valid', async () => {\n        const onSubmit = jest.fn();\n        const validate = jest.fn(() => ({}));\n        const { getByTestId } = renderFormik({ onSubmit, validate });\n\n        fireEvent.submit(getByTestId('form'));\n        await waitFor(() => expect(onSubmit).toBeCalled());\n      });\n\n      it('should not submit the form if invalid', () => {\n        const onSubmit = jest.fn();\n        const validate = jest.fn(() => ({ name: 'Error!' }));\n        const { getByTestId } = renderFormik({ onSubmit, validate });\n\n        fireEvent.submit(getByTestId('form'));\n        expect(onSubmit).not.toBeCalled();\n      });\n\n      it('should not submit the form if validate function throws an error', async () => {\n        const onSubmit = jest.fn();\n        const err = new Error('Async Error');\n        const validate = jest.fn().mockRejectedValue(err);\n        const { getProps } = renderFormik({\n          onSubmit,\n          validate,\n        });\n\n        await act(async () => {\n          await expect(getProps().submitForm()).rejects.toThrow('Async Error');\n        });\n\n        await waitFor(() => {\n          expect(onSubmit).not.toBeCalled();\n          expect(global.console.warn).toHaveBeenCalledWith(\n            expect.stringMatching(\n              /Warning: An unhandled error was caught during validation in <Formik validate ./\n            ),\n            err\n          );\n        });\n      });\n\n      describe('submitForm helper should not break promise chain if handleSubmit has returned rejected Promise', () => {\n        it('submitForm helper should not break promise chain if handleSubmit has returned rejected Promise', async () => {\n          const error = new Error('This Error is typeof Error');\n          const handleSubmit = () => {\n            return Promise.reject(error);\n          };\n          const { getProps } = renderFormik({ onSubmit: handleSubmit });\n\n          const { submitForm } = getProps();\n          await act(async () => {\n            await expect(submitForm()).rejects.toEqual(error);\n          });\n        });\n      });\n    });\n\n    describe('with validate (ASYNC)', () => {\n      it('should call validate if present', () => {\n        const validate = jest.fn(() => Promise.resolve({}));\n        const { getByTestId } = renderFormik({ validate });\n\n        fireEvent.submit(getByTestId('form'));\n        expect(validate).toHaveBeenCalled();\n      });\n\n      it('should submit the form if valid', async () => {\n        const onSubmit = jest.fn();\n        const validate = jest.fn(() => Promise.resolve({}));\n        const { getByTestId } = renderFormik({ onSubmit, validate });\n\n        fireEvent.submit(getByTestId('form'));\n        await waitFor(() => expect(onSubmit).toBeCalled());\n      });\n\n      it('should not submit the form if invalid', () => {\n        const onSubmit = jest.fn();\n        const validate = jest.fn(() => Promise.resolve({ name: 'Error!' }));\n        const { getByTestId } = renderFormik({ onSubmit, validate });\n\n        fireEvent.submit(getByTestId('form'));\n        expect(onSubmit).not.toBeCalled();\n      });\n\n      it('should not submit the form if validate function rejects with an error', async () => {\n        const onSubmit = jest.fn();\n        const err = new Error('Async Error');\n        const validate = jest.fn().mockRejectedValue(err);\n\n        const { getProps } = renderFormik({ onSubmit, validate });\n\n        await act(async () => {\n          await expect(getProps().submitForm()).rejects.toThrow('Async Error');\n        });\n\n        await waitFor(() => {\n          expect(onSubmit).not.toBeCalled();\n          expect(global.console.warn).toHaveBeenCalledWith(\n            expect.stringMatching(\n              /Warning: An unhandled error was caught during validation in <Formik validate ./\n            ),\n            err\n          );\n        });\n      });\n    });\n\n    describe('with validationSchema (ASYNC)', () => {\n      it('should run validationSchema if present', async () => {\n        const validate = jest.fn(() => Promise.resolve({}));\n        const validationSchema = {\n          validate,\n        };\n        renderFormik({\n          validate,\n          validationSchema,\n        });\n\n        await act(async () => {\n          await fireEvent.submit(screen.getByTestId('form'));\n        });\n\n        expect(validate).toHaveBeenCalled();\n      });\n\n      it('should call validationSchema if it is a function and present', async () => {\n        const validate = jest.fn(() => Promise.resolve({}));\n        const validationSchema = () => ({\n          validate,\n        });\n        renderFormik({\n          validate,\n          validationSchema,\n        });\n\n        await act(async () => {\n          await fireEvent.submit(screen.getByTestId('form'));\n        });\n        expect(validate).toHaveBeenCalled();\n      });\n    });\n\n    describe('FormikHelpers', () => {\n      it('setValues sets values', () => {\n        const { getProps } = renderFormik<Values>();\n\n        act(() => {\n          getProps().setValues({ name: 'ian', age: 25 });\n        });\n        expect(getProps().values.name).toEqual('ian');\n        expect(getProps().values.age).toEqual(25);\n      });\n\n      it('setValues takes a function which can patch values', () => {\n        const { getProps } = renderFormik<Values>();\n\n        act(() => {\n          getProps().setValues((values: Values) => ({\n            ...values,\n            age: 80,\n          }));\n        });\n        expect(getProps().values.name).toEqual('jared');\n        expect(getProps().values.age).toEqual(80);\n      });\n\n      it('setValues should run validations when validateOnChange is true (default)', async () => {\n        const newValue: Values = { name: 'ian' };\n        const validate = jest.fn(_values => ({}));\n        const { getProps } = renderFormik({ validate });\n\n        act(() => {\n          getProps().setValues(newValue);\n        });\n        // rerender();\n        await waitFor(() => {\n          expect(validate).toHaveBeenCalledWith(newValue, undefined);\n        });\n      });\n      it('setValues should NOT run validations when validateOnChange is false', async () => {\n        const validate = jest.fn();\n        const { getProps, rerender } = renderFormik<Values>({\n          validate,\n          validateOnChange: false,\n        });\n\n        act(() => {\n          getProps().setValues({ name: 'ian' });\n        });\n        rerender();\n        await waitFor(() => {\n          expect(validate).not.toHaveBeenCalled();\n        });\n      });\n\n      it('setFieldValue sets value by key', async () => {\n        const { getProps, rerender } = renderFormik<Values>();\n\n        act(() => {\n          getProps().setFieldValue('name', 'ian');\n        });\n        rerender();\n        await waitFor(() => {\n          expect(getProps().values.name).toEqual('ian');\n        });\n      });\n\n      it('setFieldValue should run validations when validateOnChange is true (default)', async () => {\n        const validate = jest.fn(() => ({}));\n        const { getProps, rerender } = renderFormik({ validate });\n\n        act(() => {\n          getProps().setFieldValue('name', 'ian');\n        });\n        rerender();\n        await waitFor(() => {\n          expect(validate).toHaveBeenCalled();\n        });\n      });\n\n      it('setFieldValue should NOT run validations when validateOnChange is false', async () => {\n        const validate = jest.fn();\n        const { getProps, rerender } = renderFormik({\n          validate,\n          validateOnChange: false,\n        });\n\n        act(() => {\n          getProps().setFieldValue('name', 'ian');\n        });\n        rerender();\n        await waitFor(() => {\n          expect(validate).not.toHaveBeenCalled();\n        });\n      });\n\n      it('setFieldValue sets value by key when takes a setter function', async () => {\n        const { getProps, rerender } = renderFormik<Values>();\n\n        act(() => {\n          getProps().setFieldValue('name', (prev: string) => {\n            return prev + ' chronicus';\n          });\n        });\n        rerender();\n        await waitFor(() => {\n          expect(getProps().values.name).toEqual('jared chronicus');\n        });\n      });\n\n      it(\n        'setFieldValue should run validations with resolved value when takes a setter function and validateOnChange is true (default)',\n        async () => {\n          const validate = jest.fn(() =>({}));\n          const { getProps, rerender } = renderFormik({ validate });\n\n          act(() => {\n            getProps().setFieldValue('name', (prev: string) => prev + ' chronicus');\n          });\n          rerender();\n          await waitFor(() => {\n            // the validate function is called with the second arg as undefined always in this case\n            expect(validate).toHaveBeenCalledWith(expect.objectContaining({\n              name: 'jared chronicus',\n            }), undefined);\n          });\n        }\n      );\n\n      it('setFieldValue should NOT run validations when takes a setter function and validateOnChange is false', async () => {\n        const validate = jest.fn();\n        const { getProps, rerender } = renderFormik({\n          validate,\n          validateOnChange: false,\n        });\n\n        act(() => {\n          getProps().setFieldValue('name', (prev: string) => prev + ' chronicus');\n        });\n        rerender();\n        await waitFor(() => {\n          expect(validate).not.toHaveBeenCalled();\n        });\n      });\n\n      it('setTouched sets touched', () => {\n        const { getProps } = renderFormik();\n\n        act(() => {\n          getProps().setTouched({ name: true });\n        });\n        expect(getProps().touched).toEqual({ name: true });\n      });\n\n      it('setTouched should NOT run validations when validateOnChange is true (default)', async () => {\n        const validate = jest.fn(() => ({}));\n        const { getProps, rerender } = renderFormik({ validate });\n\n        act(() => {\n          getProps().setTouched({ name: true });\n        });\n        rerender();\n        await waitFor(() => expect(validate).toHaveBeenCalled());\n      });\n\n      it('setTouched should run validations when validateOnBlur is false', async () => {\n        const validate = jest.fn(() => ({}));\n        const { getProps, rerender } = renderFormik({\n          validate,\n          validateOnBlur: false,\n        });\n\n        act(() => {\n          getProps().setTouched({ name: true });\n        });\n        rerender();\n        await waitFor(() => expect(validate).not.toHaveBeenCalled());\n      });\n\n      it('setFieldTouched sets touched by key', () => {\n        const { getProps } = renderFormik<Values>();\n\n        act(() => {\n          getProps().setFieldTouched('name', true);\n        });\n        expect(getProps().touched).toEqual({ name: true });\n        expect(getProps().dirty).toBe(false);\n\n        act(() => {\n          getProps().setFieldTouched('name', false);\n        });\n        expect(getProps().touched).toEqual({ name: false });\n        expect(getProps().dirty).toBe(false);\n      });\n\n      it('setFieldTouched should run validations when validateOnBlur is true (default)', async () => {\n        const validate = jest.fn(() => ({}));\n        const { getProps, rerender } = renderFormik({ validate });\n\n        act(() => {\n          getProps().setFieldTouched('name', true);\n        });\n        rerender();\n        await waitFor(() => expect(validate).toHaveBeenCalled());\n      });\n\n      it('setFieldTouched should NOT run validations when validateOnBlur is false', async () => {\n        const validate = jest.fn(() => ({}));\n        const { getProps, rerender } = renderFormik({\n          validate,\n          validateOnBlur: false,\n        });\n\n        act(() => {\n          getProps().setFieldTouched('name', true);\n        });\n        rerender();\n        await waitFor(() => expect(validate).not.toHaveBeenCalled());\n      });\n\n      it('setErrors sets error object', () => {\n        const { getProps } = renderFormik<Values>();\n\n        act(() => {\n          getProps().setErrors({ name: 'Required' });\n        });\n        expect(getProps().errors.name).toEqual('Required');\n      });\n\n      it('setFieldError sets error by key', () => {\n        const { getProps } = renderFormik<Values>();\n\n        act(() => {\n          getProps().setFieldError('name', 'Required');\n        });\n        expect(getProps().errors.name).toEqual('Required');\n      });\n\n      it('setStatus sets status object', () => {\n        const { getProps } = renderFormik();\n\n        const status = 'status';\n        act(() => {\n          getProps().setStatus(status);\n        });\n\n        expect(getProps().status).toEqual(status);\n      });\n    });\n  });\n\n  describe('FormikComputedProps', () => {\n    it('should compute dirty as soon as any input is touched', () => {\n      const { getProps } = renderFormik();\n\n      expect(getProps().dirty).toBeFalsy();\n      act(() => {\n        getProps().setValues({ name: 'ian', age: 27 });\n      });\n      expect(getProps().dirty).toBeTruthy();\n    });\n\n    it('should compute isValid if isInitialValid is present and returns true', () => {\n      const { getProps } = renderFormik({ isInitialValid: () => true });\n\n      expect(getProps().dirty).toBeFalsy();\n      expect(getProps().isValid).toBeTruthy();\n    });\n\n    it('should compute isValid if isInitialValid is present and returns false', () => {\n      const { getProps } = renderFormik({ isInitialValid: () => false });\n\n      expect(getProps().dirty).toBeFalsy();\n      expect(getProps().isValid).toBeFalsy();\n    });\n\n    it('should compute isValid if isInitialValid boolean is present and set to true', () => {\n      const { getProps } = renderFormik({ isInitialValid: true });\n\n      expect(getProps().dirty).toBeFalsy();\n      expect(getProps().isValid).toBeTruthy();\n    });\n\n    it('should compute isValid if isInitialValid is present and set to false', () => {\n      const { getProps } = renderFormik({ isInitialValid: false });\n\n      expect(getProps().dirty).toBeFalsy();\n      expect(getProps().isValid).toBeFalsy();\n    });\n\n    it('should compute isValid if the form is dirty and there are errors', () => {\n      const { getProps } = renderFormik();\n\n      act(() => {\n        getProps().setValues({ name: 'ian' });\n        getProps().setErrors({ name: 'Required!' });\n      });\n\n      expect(getProps().dirty).toBeTruthy();\n      expect(getProps().isValid).toBeFalsy();\n    });\n\n    it('should compute isValid if the form is dirty and there are not errors', () => {\n      const { getProps } = renderFormik();\n\n      act(() => {\n        getProps().setValues({ name: 'ian' });\n      });\n\n      expect(getProps().dirty).toBeTruthy();\n      expect(getProps().isValid).toBeTruthy();\n    });\n\n    it('should increase submitCount after submitting the form', () => {\n      const { getProps, getByTestId } = renderFormik();\n\n      expect(getProps().submitCount).toBe(0);\n      fireEvent.submit(getByTestId('form'));\n      expect(getProps().submitCount).toBe(1);\n    });\n  });\n\n  describe('handleReset', () => {\n    it('should call onReset if onReset prop is set', () => {\n      const onReset = jest.fn();\n      const { getProps } = renderFormik({\n        initialValues: InitialValues,\n        onReset: onReset,\n        onSubmit: noop,\n      });\n\n      const { handleReset } = getProps();\n      act(() => {\n        handleReset();\n      });\n\n      expect(onReset).toHaveBeenCalled();\n    });\n  });\n\n  describe('resetForm', () => {\n    it('should call onReset with values and actions when form is reset', () => {\n      const onReset = jest.fn();\n      const { getProps } = renderFormik({\n        initialValues: InitialValues,\n        onSubmit: noop,\n        onReset,\n      });\n\n      act(() => {\n        getProps().resetForm();\n      });\n\n      expect(onReset).toHaveBeenCalledWith(\n        InitialValues,\n        expect.objectContaining({\n          resetForm: expect.any(Function),\n          setErrors: expect.any(Function),\n          setFieldError: expect.any(Function),\n          setFieldTouched: expect.any(Function),\n          setFieldValue: expect.any(Function),\n          setStatus: expect.any(Function),\n          setSubmitting: expect.any(Function),\n          setTouched: expect.any(Function),\n          setValues: expect.any(Function),\n        })\n      );\n    });\n\n    it('should not error resetting form if onReset is not a prop', () => {\n      const { getProps } = renderFormik();\n      act(() => {\n        getProps().resetForm();\n      });\n      expect(true);\n    });\n\n    it('should reset dirty flag even if initialValues has changed', () => {\n      const { getProps, getByTestId } = renderFormik();\n\n      expect(getProps().dirty).toBeFalsy();\n\n      const input = getByTestId('name-input');\n      fireEvent.change(input, {\n        persist: noop,\n        target: {\n          name: 'name',\n          value: 'Pavel',\n        },\n      });\n      expect(getProps().dirty).toBeTruthy();\n\n      act(() => {\n        getProps().resetForm();\n      });\n      expect(getProps().dirty).toBeFalsy();\n    });\n\n    it('should reset submitCount', () => {\n      const { getProps } = renderFormik();\n\n      act(() => {\n        getProps().handleSubmit();\n      });\n      expect(getProps().submitCount).toEqual(1);\n\n      act(() => {\n        getProps().resetForm();\n      });\n      expect(getProps().submitCount).toEqual(0);\n    });\n\n    it('should reset dirty when resetting to same values', () => {\n      const { getProps } = renderFormik();\n      expect(getProps().dirty).toBe(false);\n\n      act(() => {\n        getProps().setFieldValue('name', 'jared-next');\n      });\n      expect(getProps().dirty).toBe(true);\n\n      act(() => {\n        getProps().resetForm({ values: getProps().values });\n      });\n      expect(getProps().dirty).toBe(false);\n    });\n  });\n\n  describe('prepareDataForValidation', () => {\n    it('should work correctly with instances', () => {\n      class SomeClass {}\n\n      const expected = {\n        string: 'string',\n        date: new Date(),\n        someInstance: new SomeClass(),\n      };\n\n      const dataForValidation = prepareDataForValidation(expected);\n      expect(dataForValidation).toEqual(expected);\n    });\n\n    it('should work correctly with instances in arrays', () => {\n      class SomeClass {}\n\n      const expected = {\n        string: 'string',\n        dateArr: [new Date(), new Date()],\n        someInstanceArr: [new SomeClass(), new SomeClass()],\n      };\n\n      const dataForValidation = prepareDataForValidation(expected);\n      expect(dataForValidation).toEqual(expected);\n    });\n\n    it('should work correctly with instances in objects', () => {\n      class SomeClass {}\n\n      const expected = {\n        string: 'string',\n        object: {\n          date: new Date(),\n          someInstance: new SomeClass(),\n        },\n      };\n\n      const dataForValidation = prepareDataForValidation(expected);\n      expect(dataForValidation).toEqual(expected);\n    });\n\n    it('should work correctly with mixed data', () => {\n      const date = new Date();\n      const dataForValidation = prepareDataForValidation({\n        string: 'string',\n        empty: '',\n        arr: [],\n        date,\n      });\n      expect(dataForValidation).toEqual({\n        string: 'string',\n        empty: undefined,\n        arr: [],\n        date,\n      });\n    });\n\n    it('should work correctly for nested arrays', () => {\n      const expected = {\n        content: [\n          ['a1', 'a2'],\n          ['b1', 'b2'],\n        ],\n      };\n\n      const dataForValidation = prepareDataForValidation(expected);\n      expect(dataForValidation).toEqual(expected);\n    });\n  });\n\n  // describe('componentDidUpdate', () => {\n  //   let formik: any, initialValues: any;\n  //   beforeEach(() => {\n  //     initialValues = {\n  //       name: 'formik',\n  //       github: { repoUrl: 'https://github.com/jaredpalmer/formik' },\n  //       watchers: ['ian', 'sam'],\n  //     };\n\n  //     const { getRef } = renderFormik({\n  //       initialValues,\n  //       enableReinitialize: true,\n  //     });\n  //     formik = getRef();\n  //     formik.current.resetForm = jest.fn();\n  //   });\n\n  //   it('should not resetForm if new initialValues are the same as previous', () => {\n  //     const newInitialValues = Object.assign({}, initialValues);\n  //     formik.current.componentDidUpdate({\n  //       initialValues: newInitialValues,\n  //       onSubmit: noop,\n  //     });\n  //     expect(formik.current.resetForm).not.toHaveBeenCalled();\n  //   });\n\n  //   it('should resetForm if new initialValues are different than previous', () => {\n  //     const newInitialValues = {\n  //       ...initialValues,\n  //       watchers: ['jared', 'ian', 'sam'],\n  //     };\n  //     formik.current.componentDidUpdate({\n  //       initialValues: newInitialValues,\n  //       onSubmit: noop,\n  //     });\n  //     expect(formik.current.resetForm).toHaveBeenCalled();\n  //   });\n\n  //   it('should resetForm if new initialValues are deeply different than previous', () => {\n  //     const newInitialValues = {\n  //       ...initialValues,\n  //       github: { repoUrl: 'different' },\n  //     };\n  //     formik.current.componentDidUpdate({\n  //       initialValues: newInitialValues,\n  //       onSubmit: noop,\n  //     });\n  //     expect(formik.current.resetForm).toHaveBeenCalled();\n  //   });\n\n  //   it('should NOT resetForm without enableReinitialize flag', () => {\n  //     const { getRef } = renderFormik({\n  //       initialValues,\n  //     });\n  //     formik = getRef();\n  //     formik.current.resetForm = jest.fn();\n\n  //     const newInitialValues = {\n  //       ...initialValues,\n  //       watchers: ['jared', 'ian', 'sam'],\n  //     };\n  //     formik.current.componentDidUpdate({\n  //       initialValues: newInitialValues,\n  //       onSubmit: noop,\n  //     });\n  //     expect(formik.current.resetForm).not.toHaveBeenCalled();\n  //   });\n  // });\n\n  it('should warn against buttons with unspecified type', () => {\n    const { getByText, getByTestId } = render(\n      <Formik onSubmit={noop} initialValues={{ opensource: 'yay' }}>\n        {({ handleSubmit, handleChange, values }) => (\n          <form onSubmit={handleSubmit} data-testid=\"form\">\n            <input\n              type=\"text\"\n              onChange={handleChange}\n              value={values.opensource}\n              name=\"name\"\n            />\n            <button>Submit</button>\n          </form>\n        )}\n      </Formik>\n    );\n\n    const button = getByText('Submit');\n    button.focus(); // sets activeElement\n\n    fireEvent.submit(getByTestId('form'));\n\n    expect(global.console.warn).toHaveBeenCalledWith(\n      expect.stringMatching(\n        /Warning: You submitted a Formik form using a button with an unspecified `type./\n      )\n    );\n\n    button.blur(); // unsets activeElement\n    (global.console.warn as jest.Mock<{}>).mockClear();\n  });\n\n  it('should not warn when button has type submit', () => {\n    const { getByText, getByTestId } = render(\n      <Formik onSubmit={noop} initialValues={{ opensource: 'yay' }}>\n        {({ handleSubmit, handleChange, values }) => (\n          <form onSubmit={handleSubmit} data-testid=\"form\">\n            <input\n              type=\"text\"\n              onChange={handleChange}\n              value={values.opensource}\n              name=\"name\"\n            />\n            <button type=\"submit\">Submit</button>\n          </form>\n        )}\n      </Formik>\n    );\n\n    const button = getByText('Submit');\n    button.focus(); // sets activeElement\n\n    fireEvent.submit(getByTestId('form'));\n\n    expect(global.console.warn).not.toHaveBeenCalledWith(\n      expect.stringMatching(\n        /Warning: You submitted a Formik form using a button with an unspecified type./\n      )\n    );\n\n    button.blur(); // unsets activeElement\n    (global.console.warn as jest.Mock<{}>).mockClear();\n  });\n\n  it('should not warn when activeElement is not a button', () => {\n    render(\n      <Formik onSubmit={noop} initialValues={{ opensource: 'yay' }}>\n        {({ handleSubmit, handleChange, values }) => (\n          <form onSubmit={handleSubmit} data-testid=\"form\">\n            <input\n              type=\"text\"\n              onChange={handleChange}\n              value={values.opensource}\n              name=\"name\"\n              data-testid=\"name-input\"\n            />\n            <button type=\"submit\">Submit</button>\n          </form>\n        )}\n      </Formik>\n    );\n    const input = screen.getByTestId('name-input');\n    input.focus(); // sets activeElement\n\n    fireEvent.submit(screen.getByTestId('form'));\n\n    expect(global.console.warn).not.toHaveBeenCalledWith(\n      expect.stringMatching(\n        /Warning: You submitted a Formik form using a button with an unspecified type./\n      )\n    );\n\n    input.blur(); // unsets activeElement\n    (global.console.warn as jest.Mock<{}>).mockClear();\n  });\n\n  it('submit count increments', async () => {\n    const onSubmit = jest.fn();\n\n    const { getProps } = renderFormik({\n      onSubmit,\n    });\n\n    expect(getProps().submitCount).toEqual(0);\n\n    await act(async () => {\n      await getProps().submitForm();\n    });\n\n    expect(onSubmit).toHaveBeenCalled();\n    expect(getProps().submitCount).toEqual(1);\n  });\n\n  it('isValidating is fired when submit is attempted', async () => {\n    const onSubmit = jest.fn();\n    const validate = jest.fn(() => ({\n      name: 'no',\n    }));\n\n    const { getProps } = renderFormik({\n      onSubmit,\n      validate,\n    });\n\n    expect(getProps().submitCount).toEqual(0);\n    expect(getProps().isSubmitting).toBe(false);\n    expect(getProps().isValidating).toBe(false);\n\n    let submitFormPromise: Promise<any>;\n    act(() => {\n      // we call set isValidating synchronously\n      submitFormPromise = getProps().submitForm();\n    });\n\n    // so it should change\n    expect(getProps().isSubmitting).toBe(true);\n    expect(getProps().isValidating).toBe(true);\n    try {\n      await act(async () => {\n        // resolve the promise to check final state.\n        await submitFormPromise;\n      });\n    } catch (err) {}\n    // now both should be false because validation failed\n    expect(getProps().isSubmitting).toBe(false);\n    expect(getProps().isValidating).toBe(false);\n    expect(validate).toHaveBeenCalled();\n    expect(onSubmit).not.toHaveBeenCalled();\n    expect(getProps().submitCount).toEqual(1);\n  });\n\n  it('isSubmitting is fired when submit is attempted (v1)', async () => {\n    const onSubmit = jest.fn();\n    const validate = jest.fn(() => Promise.resolve({}));\n\n    const { getProps } = renderFormik({\n      onSubmit,\n      validate,\n    });\n\n    expect(getProps().submitCount).toEqual(0);\n    expect(getProps().isSubmitting).toBe(false);\n    expect(getProps().isValidating).toBe(false);\n\n    let submitFormPromise: Promise<any>;\n    act(() => {\n      // we call set isValidating synchronously\n      submitFormPromise = getProps().submitForm();\n    });\n\n    // so it should change\n    expect(getProps().isSubmitting).toBe(true);\n    expect(getProps().isValidating).toBe(true);\n\n    await act(async () => {\n      // resolve the promise to check final state.\n      await submitFormPromise;\n    });\n\n    // done validating and submitting\n    expect(getProps().isSubmitting).toBe(true);\n    expect(getProps().isValidating).toBe(false);\n    expect(validate).toHaveBeenCalled();\n    expect(onSubmit).toHaveBeenCalled();\n    expect(getProps().submitCount).toEqual(1);\n  });\n\n  it('isSubmitting is fired when submit is attempted (v2, promise)', async () => {\n    const onSubmit = jest.fn().mockResolvedValue(undefined);\n    const validate = jest.fn(() => Promise.resolve({}));\n\n    const { getProps } = renderFormik({\n      onSubmit,\n      validate,\n    });\n\n    expect(getProps().submitCount).toEqual(0);\n    expect(getProps().isSubmitting).toBe(false);\n    expect(getProps().isValidating).toBe(false);\n    let submitFormPromise: Promise<any>;\n\n    act(() => {\n      // we call set isValidating synchronously\n      submitFormPromise = getProps().submitForm();\n    });\n\n    // so it should change\n    expect(getProps().isSubmitting).toBe(true);\n    expect(getProps().isValidating).toBe(true);\n\n    await act(async () => {\n      // resolve the promise to check final state.\n      await submitFormPromise;\n    });\n\n    // done validating and submitting\n    expect(getProps().isSubmitting).toBe(false);\n    expect(getProps().isValidating).toBe(false);\n    expect(validate).toHaveBeenCalled();\n    expect(onSubmit).toHaveBeenCalled();\n    expect(getProps().submitCount).toEqual(1);\n  });\n\n  it('isValidating is fired validation is run', async () => {\n    const validate = jest.fn(() => ({ name: 'no' }));\n    const { getProps } = renderFormik({\n      validate,\n    });\n\n    expect(getProps().isValidating).toBe(false);\n\n    let validatePromise: Promise<any>;\n    act(() => {\n      // we call set isValidating synchronously\n      validatePromise = getProps().validateForm();\n    });\n\n    expect(getProps().isValidating).toBe(true);\n\n    await act(async () => {\n      await validatePromise;\n    });\n\n    expect(validate).toHaveBeenCalled();\n    expect(getProps().isValidating).toBe(false);\n  });\n\n  it('should merge validation errors', async () => {\n    const validate = () => ({\n      users: [{ firstName: 'required' }],\n    });\n\n    const validationSchema = Yup.object({\n      users: Yup.array().of(\n        Yup.object({\n          lastName: Yup.string().required('required'),\n        })\n      ),\n    });\n\n    const { getProps } = renderFormik({\n      initialValues: { users: [{ firstName: '', lastName: '' }] },\n      validate,\n      validationSchema,\n    });\n\n    await act(async () => {\n      await getProps().validateForm();\n    });\n\n    expect(getProps().errors).toEqual({\n      users: [{ firstName: 'required', lastName: 'required' }],\n    });\n  });\n\n  it('should not eat an error thrown by the validationSchema', async () => {\n    const validationSchema = () => {\n      throw new Error('broken validations');\n    };\n\n    const { getProps } = renderFormik({\n      initialValues: { users: [{ firstName: '', lastName: '' }] },\n      validationSchema,\n    });\n\n    let caughtError: string = '';\n\n    await act(async () => {\n      try {\n        await getProps().validateForm();\n      } catch (err) {\n        caughtError = (err as Yup.ValidationError).message;\n      }\n    });\n\n    expect(caughtError).toEqual('broken validations');\n  });\n\n  it('exposes formikbag as imperative methods', () => {\n    const innerRef: any = React.createRef();\n\n    const { getProps } = renderFormik({ innerRef });\n\n    expect(innerRef.current).toEqual(getProps());\n  });\n\n  it('should not modify original initialValues object', () => {\n    render(\n      <Formik initialValues={InitialValuesWithNestedObject} onSubmit={noop}>\n        {formikProps => (\n          <input\n            data-testid=\"desc-input\"\n            value={formikProps.values.content.items[0].cards[0].desc}\n            onChange={e => {\n              const copy = { ...formikProps.values.content };\n              copy.items[0].cards[0].desc = e.target.value;\n              formikProps.setValues({\n                ...formikProps.values,\n                content: copy,\n              });\n            }}\n          />\n        )}\n      </Formik>\n    );\n    const input = screen.getByTestId('desc-input');\n\n    fireEvent.change(input, {\n      target: {\n        value: 'New Value',\n      },\n    });\n\n    expect(InitialValuesWithNestedObject.content.items[0].cards[0].desc).toEqual('Initial Desc');\n  });\n});\n"
  },
  {
    "path": "packages/formik/test/setupTests.ts",
    "content": "const consoleError = console.error;\n\nlet consoleErrorLog: any[] = [];\n\nbeforeEach(() => {\n  consoleErrorLog = [];\n  // Make sure we aren't triggering React console.error calls\n  console.error = (...args: any[]) => {\n    // NOTE: We can't throw in here directly as most console.error calls happen\n    // inside promises and result in an unhandled promise rejection\n    consoleErrorLog.push(`console.error called with args: ${args}`);\n    consoleError.apply(console, args as any);\n  };\n});\n\nafterEach(() => {\n  if (consoleErrorLog.length > 0) {\n    // Not using an Error object here because the stacktrace is misleading\n    throw consoleErrorLog[0];\n  }\n\n  console.error = consoleError;\n});\n"
  },
  {
    "path": "packages/formik/test/testHelpers.ts",
    "content": "// tslint:disable-next-line:no-empty\nexport const noop = () => {};\n\nexport const sleep = (ms: number) =>\n  new Promise(resolve => setTimeout(resolve, ms));\n"
  },
  {
    "path": "packages/formik/test/tsconfig.json",
    "content": "{\n  // Hack to fix https://github.com/formium/tsdx/issues/84#issuecomment-489690504\n  \"extends\": \"../../../tsconfig.json\",\n  \"include\": [\".\"]\n}\n"
  },
  {
    "path": "packages/formik/test/types.test.tsx",
    "content": "import { FormikTouched, FormikErrors } from '../src';\n\ndescribe('Formik Types', () => {\n  describe('FormikTouched', () => {\n    type Values = {\n      id: string;\n      social: {\n        facebook: string;\n      };\n    };\n\n    it('it should infer nested object structure of touched property from Values', () => {\n      const touched: FormikTouched<Values> = {\n        id: true,\n        social: { facebook: true },\n      };\n      // type touched = {\n      //    id?: boolean | undefined;\n      //    social?: {\n      //        facebook?: boolean | undefined;\n      //    } | undefined;\n      // }\n      const id: boolean | undefined = touched.id;\n      expect(id).toBe(true);\n      const facebook: boolean | undefined = touched.social!.facebook;\n      expect(facebook).toBe(true);\n    });\n\n    it('it should infer nested object structure of error property from Values', () => {\n      const errors: FormikErrors<Values> = {\n        id: 'error',\n        social: { facebook: 'error' },\n      };\n      // type touched = {\n      //    id?: {} | undefined;\n      //    social?: {\n      //        facebook?: {} | undefined;\n      //    } | undefined;\n      // }\n      const id: {} | undefined = errors.id;\n      expect(id).toBe('error');\n      const facebook: {} | undefined = errors.social!.facebook;\n      expect(facebook).toBe('error');\n    });\n  });\n});\n"
  },
  {
    "path": "packages/formik/test/utils.test.tsx",
    "content": "import {\n  isEmptyArray,\n  setIn,\n  getIn,\n  setNestedObjectValues,\n  isPromise,\n  getActiveElement,\n  isNaN,\n} from '../src/utils';\n\ndescribe('utils', () => {\n  describe('isEmptyArray', () => {\n    it('returns true when an empty array is passed in', () => {\n      expect(isEmptyArray([])).toBe(true);\n    });\n    it('returns false when anything other than empty array is passed in', () => {\n      expect(isEmptyArray()).toBe(false);\n      expect(isEmptyArray(null)).toBe(false);\n      expect(isEmptyArray(123)).toBe(false);\n      expect(isEmptyArray('abc')).toBe(false);\n      expect(isEmptyArray({})).toBe(false);\n      expect(isEmptyArray({ a: 1 })).toBe(false);\n      expect(isEmptyArray(['abc'])).toBe(false);\n    });\n  });\n  describe('setNestedObjectValues', () => {\n    it('sets value flat object', () => {\n      const obj = { x: 'y' };\n      expect(setNestedObjectValues(obj, true)).toEqual({ x: true });\n    });\n\n    it('sets value of nested object', () => {\n      const obj = {\n        x: {\n          nestedObject: {\n            z: 'thing',\n          },\n        },\n      };\n\n      const newObj = {\n        x: {\n          nestedObject: {\n            z: true,\n          },\n        },\n      };\n\n      expect(setNestedObjectValues(obj, true)).toEqual(newObj);\n    });\n\n    it('sets value of nested flat array items', () => {\n      const obj = {\n        x: {\n          nestedObject: {\n            z: 'thing',\n          },\n          nestedFlatArray: ['jared', 'ian'],\n        },\n      };\n\n      const newObj = {\n        x: {\n          nestedObject: {\n            z: true,\n          },\n          nestedFlatArray: [true, true],\n        },\n      };\n      expect(setNestedObjectValues(obj, true)).toEqual(newObj);\n    });\n\n    it('sets value of nested complex array items', () => {\n      const obj = {\n        x: {\n          nestedObject: {\n            z: 'thing',\n          },\n          nestedFlatArray: [\n            {\n              nestedObject: {\n                z: 'thing',\n              },\n            },\n            {\n              nestedObject: {\n                z: 'thing',\n              },\n            },\n          ],\n        },\n      };\n\n      const newObj = {\n        x: {\n          nestedObject: {\n            z: true,\n          },\n          nestedFlatArray: [\n            {\n              nestedObject: {\n                z: true,\n              },\n            },\n            {\n              nestedObject: {\n                z: true,\n              },\n            },\n          ],\n        },\n      };\n      expect(setNestedObjectValues(obj, true)).toEqual(newObj);\n    });\n    it('sets value of nested mixed array items', () => {\n      const obj = {\n        x: {\n          nestedObject: {\n            z: 'thing',\n          },\n          nestedFlatArray: [\n            {\n              nestedObject: {\n                z: 'thing',\n              },\n            },\n            'jared',\n          ],\n        },\n      };\n\n      const newObj = {\n        x: {\n          nestedObject: {\n            z: true,\n          },\n          nestedFlatArray: [\n            {\n              nestedObject: {\n                z: true,\n              },\n            },\n            true,\n          ],\n        },\n      };\n      expect(setNestedObjectValues(obj, true)).toEqual(newObj);\n    });\n  });\n\n  describe('getIn', () => {\n    const obj = {\n      a: {\n        b: 2,\n        c: false,\n        d: null,\n      },\n      t: true,\n      s: 'a random string',\n    };\n\n    it('gets a value by array path', () => {\n      expect(getIn(obj, ['a', 'b'])).toBe(2);\n    });\n\n    it('gets a value by string path', () => {\n      expect(getIn(obj, 'a.b')).toBe(2);\n    });\n\n    it('return \"undefined\" if value was not found using given path', () => {\n      expect(getIn(obj, 'a.z')).toBeUndefined();\n    });\n\n    it('return \"undefined\" if value was not found using given path and an intermediate value is \"false\"', () => {\n      expect(getIn(obj, 'a.c.z')).toBeUndefined();\n    });\n\n    it('return \"undefined\" if value was not found using given path and an intermediate value is \"null\"', () => {\n      expect(getIn(obj, 'a.d.z')).toBeUndefined();\n    });\n\n    it('return \"undefined\" if value was not found using given path and an intermediate value is \"true\"', () => {\n      expect(getIn(obj, 't.z')).toBeUndefined();\n    });\n\n    it('return \"undefined\" if value was not found using given path and an intermediate value is a string', () => {\n      expect(getIn(obj, 's.z')).toBeUndefined();\n    });\n  });\n\n  describe('setIn', () => {\n    it('sets flat value', () => {\n      const obj = { x: 'y' };\n      const newObj = setIn(obj, 'flat', 'value');\n      expect(obj).toEqual({ x: 'y' });\n      expect(newObj).toEqual({ x: 'y', flat: 'value' });\n    });\n\n    it('keep the same object if nothing is changed', () => {\n      const obj = { x: 'y' };\n      const newObj = setIn(obj, 'x', 'y');\n      expect(obj).toBe(newObj);\n    });\n\n    it('removes flat value', () => {\n      const obj = { x: 'y' };\n      const newObj = setIn(obj, 'x', undefined);\n      expect(obj).toEqual({ x: 'y' });\n      expect(newObj).toEqual({});\n      expect(newObj).not.toHaveProperty('x');\n    });\n\n    it('sets nested value', () => {\n      const obj = { x: 'y' };\n      const newObj = setIn(obj, 'nested.value', 'nested value');\n      expect(obj).toEqual({ x: 'y' });\n      expect(newObj).toEqual({ x: 'y', nested: { value: 'nested value' } });\n    });\n\n    it('updates nested value', () => {\n      const obj = { x: 'y', nested: { value: 'a' } };\n      const newObj = setIn(obj, 'nested.value', 'b');\n      expect(obj).toEqual({ x: 'y', nested: { value: 'a' } });\n      expect(newObj).toEqual({ x: 'y', nested: { value: 'b' } });\n    });\n\n    it('removes nested value', () => {\n      const obj = { x: 'y', nested: { value: 'a' } };\n      const newObj = setIn(obj, 'nested.value', undefined);\n      expect(obj).toEqual({ x: 'y', nested: { value: 'a' } });\n      expect(newObj).toEqual({ x: 'y', nested: {} });\n      expect(newObj.nested).not.toHaveProperty('value');\n    });\n\n    it('updates deep nested value', () => {\n      const obj = { x: 'y', twofoldly: { nested: { value: 'a' } } };\n      const newObj = setIn(obj, 'twofoldly.nested.value', 'b');\n      expect(obj.twofoldly.nested === newObj.twofoldly.nested).toEqual(false); // fails, same object still\n      expect(obj).toEqual({ x: 'y', twofoldly: { nested: { value: 'a' } } }); // fails, it's b here, too\n      expect(newObj).toEqual({ x: 'y', twofoldly: { nested: { value: 'b' } } }); // works ofc\n    });\n\n    it('removes deep nested value', () => {\n      const obj = { x: 'y', twofoldly: { nested: { value: 'a' } } };\n      const newObj = setIn(obj, 'twofoldly.nested.value', undefined);\n      expect(obj.twofoldly.nested === newObj.twofoldly.nested).toEqual(false);\n      expect(obj).toEqual({ x: 'y', twofoldly: { nested: { value: 'a' } } });\n      expect(newObj).toEqual({ x: 'y', twofoldly: { nested: {} } });\n      expect(newObj.twofoldly.nested).not.toHaveProperty('value');\n    });\n\n    it('shallow clone data along the update path', () => {\n      const obj = {\n        x: 'y',\n        twofoldly: { nested: ['a', { c: 'd' }] },\n        other: { nestedOther: 'o' },\n      };\n      const newObj = setIn(obj, 'twofoldly.nested.0', 'b');\n      // All new objects/arrays created along the update path.\n      expect(obj).not.toBe(newObj);\n      expect(obj.twofoldly).not.toBe(newObj.twofoldly);\n      expect(obj.twofoldly.nested).not.toBe(newObj.twofoldly.nested);\n      // All other objects/arrays copied, not cloned (retain same memory\n      // location).\n      expect(obj.other).toBe(newObj.other);\n      expect(obj.twofoldly.nested[1]).toBe(newObj.twofoldly.nested[1]);\n    });\n\n    it('sets new array', () => {\n      const obj = { x: 'y' };\n      const newObj = setIn(obj, 'nested.0', 'value');\n      expect(obj).toEqual({ x: 'y' });\n      expect(newObj).toEqual({ x: 'y', nested: ['value'] });\n    });\n\n    it('updates nested array value', () => {\n      const obj = { x: 'y', nested: ['a'] };\n      const newObj = setIn(obj, 'nested[0]', 'b');\n      expect(obj).toEqual({ x: 'y', nested: ['a'] });\n      expect(newObj).toEqual({ x: 'y', nested: ['b'] });\n    });\n\n    it('adds new item to nested array', () => {\n      const obj = { x: 'y', nested: ['a'] };\n      const newObj = setIn(obj, 'nested.1', 'b');\n      expect(obj).toEqual({ x: 'y', nested: ['a'] });\n      expect(newObj).toEqual({ x: 'y', nested: ['a', 'b'] });\n    });\n\n    it('sticks to object with int key when defined', () => {\n      const obj = { x: 'y', nested: { 0: 'a' } };\n      const newObj = setIn(obj, 'nested.0', 'b');\n      expect(obj).toEqual({ x: 'y', nested: { 0: 'a' } });\n      expect(newObj).toEqual({ x: 'y', nested: { 0: 'b' } });\n    });\n\n    it('supports bracket path', () => {\n      const obj = { x: 'y' };\n      const newObj = setIn(obj, 'nested[0]', 'value');\n      expect(obj).toEqual({ x: 'y' });\n      expect(newObj).toEqual({ x: 'y', nested: ['value'] });\n    });\n\n    it('supports path containing key of the object', () => {\n      const obj = { x: 'y' };\n      const newObj = setIn(obj, 'a.x.c', 'value');\n      expect(obj).toEqual({ x: 'y' });\n      expect(newObj).toEqual({ x: 'y', a: { x: { c: 'value' } } });\n    });\n\n    it('should keep class inheritance for the top level object', () => {\n      class TestClass {\n        constructor(public key: string, public setObj?: any) {}\n      }\n      const obj = new TestClass('value');\n      const newObj = setIn(obj, 'setObj.nested', 'setInValue');\n      expect(obj).toEqual(new TestClass('value'));\n      expect(newObj).toEqual({\n        key: 'value',\n        setObj: { nested: 'setInValue' },\n      });\n      expect(obj instanceof TestClass).toEqual(true);\n      expect(newObj instanceof TestClass).toEqual(true);\n    });\n\n    it('can convert primitives to objects before setting', () => {\n      const obj = { x: [{ y: true }] };\n      const newObj = setIn(obj, 'x.0.y.z', true);\n      expect(obj).toEqual({ x: [{ y: true }] });\n      expect(newObj).toEqual({ x: [{ y: { z: true } }] });\n    });\n  });\n\n  describe('isPromise', () => {\n    it('verifies that a value is a promise', () => {\n      const alwaysResolve = (resolve: Function) => resolve();\n      const promise = new Promise(alwaysResolve);\n      expect(isPromise(promise)).toEqual(true);\n    });\n\n    it('verifies that a value is not a promise', () => {\n      const emptyObject = {};\n      const identity = (i: any) => i;\n      const foo = 'foo';\n      const answerToLife = 42;\n\n      expect(isPromise(emptyObject)).toEqual(false);\n      expect(isPromise(identity)).toEqual(false);\n      expect(isPromise(foo)).toEqual(false);\n      expect(isPromise(answerToLife)).toEqual(false);\n\n      expect(isPromise(undefined)).toEqual(false);\n      expect(isPromise(null)).toEqual(false);\n    });\n  });\n\n  describe('getActiveElement', () => {\n    it('test getActiveElement with undefined', () => {\n      const result = getActiveElement(undefined);\n      expect(result).toEqual(document.body);\n    });\n\n    it('test getActiveElement with valid document', () => {\n      const result = getActiveElement(document);\n      expect(result).toEqual(document.body);\n    });\n  });\n\n  describe('isNaN', () => {\n    it('correctly validate NaN', () => {\n      expect(isNaN(NaN)).toBe(true);\n    });\n\n    it('correctly validate not NaN', () => {\n      expect(isNaN(undefined)).toBe(false);\n      expect(isNaN(1)).toBe(false);\n      expect(isNaN('')).toBe(false);\n      expect(isNaN([])).toBe(false);\n    });\n  });\n});\n"
  },
  {
    "path": "packages/formik/test/withFormik.test.tsx",
    "content": "import * as React from 'react';\nimport { act, render, waitFor } from '@testing-library/react';\nimport * as Yup from 'yup';\n\nimport { withFormik, FormikProps } from '../src';\nimport { noop } from './testHelpers';\n\ninterface Values {\n  name: string;\n}\n\nconst Form: React.FC<FormikProps<Values>> = ({\n  values,\n  handleSubmit,\n  handleChange,\n  handleBlur,\n  touched,\n  setStatus,\n  status,\n  errors,\n  isSubmitting,\n}) => {\n  return (\n    <form onSubmit={handleSubmit}>\n      <input\n        type=\"text\"\n        onChange={handleChange}\n        onBlur={handleBlur}\n        value={values.name}\n        name=\"name\"\n      />\n      {touched.name && errors.name && <div id=\"feedback\">{errors.name}</div>}\n      {isSubmitting && <div id=\"submitting\">Submitting</div>}\n      <button\n        id=\"statusButton\"\n        type=\"button\"\n        onClick={() => setStatus({ myStatusMessage: 'True' })}\n      >\n        Call setStatus\n      </button>\n      {status && !!status.myStatusMessage && (\n        <div id=\"statusMessage\">{status.myStatusMessage}</div>\n      )}\n      <button type=\"submit\">Submit</button>\n    </form>\n  );\n};\n\nconst InitialValues: Values = { name: 'jared' };\n\nconst renderWithFormik = (options?: any, props?: any) => {\n  let injected: any;\n\n  const FormikForm = withFormik<{}, Values>({\n    mapPropsToValues: () => InitialValues,\n    handleSubmit: noop,\n    ...options,\n  })(props => (injected = props) && <Form {...props} />);\n\n  return {\n    getProps() {\n      return injected;\n    },\n    ...render(<FormikForm {...props} />),\n  };\n};\n\ndescribe('withFormik()', () => {\n  it('should initialize Formik state and pass down props', () => {\n    const { getProps } = renderWithFormik();\n\n    const props = getProps();\n\n    expect(props).toEqual({\n      initialValues: {\n        name: 'jared',\n      },\n      initialErrors: {},\n      initialTouched: {},\n      values: {\n        name: InitialValues.name,\n      },\n      dirty: false,\n      errors: {},\n      handleBlur: expect.any(Function),\n      handleChange: expect.any(Function),\n      handleReset: expect.any(Function),\n      handleSubmit: expect.any(Function),\n      isSubmitting: false,\n      isValid: true,\n      isValidating: false,\n      getFieldProps: expect.any(Function),\n      getFieldMeta: expect.any(Function),\n      getFieldHelpers: expect.any(Function),\n      registerField: expect.any(Function),\n      resetForm: expect.any(Function),\n      setErrors: expect.any(Function),\n      setFieldError: expect.any(Function),\n      setFieldTouched: expect.any(Function),\n      setFieldValue: expect.any(Function),\n      setFormikState: expect.any(Function),\n      setStatus: expect.any(Function),\n      setSubmitting: expect.any(Function),\n      setTouched: expect.any(Function),\n      setValues: expect.any(Function),\n      submitCount: 0,\n      submitForm: expect.any(Function),\n      touched: {},\n      unregisterField: expect.any(Function),\n      validateField: expect.any(Function),\n      validateForm: expect.any(Function),\n      validateOnBlur: true,\n      validateOnMount: false,\n      validateOnChange: true,\n    });\n  });\n\n  it('should render child element', () => {\n    const { container } = renderWithFormik();\n    expect(container.firstChild).toBeDefined();\n  });\n\n  it('calls validate with values and props', async () => {\n    const validate = jest.fn();\n    const myProps = { my: 'prop' };\n    const { getProps } = renderWithFormik({ validate }, myProps);\n\n    act(() => {\n      getProps().submitForm();\n    });\n    await waitFor(() =>\n      expect(validate).toHaveBeenCalledWith({ name: 'jared' }, myProps)\n    );\n  });\n\n  it('calls validationSchema', async () => {\n    const validate = jest.fn(() => Promise.resolve());\n    const { getProps } = renderWithFormik({\n      validationSchema: { validate },\n    });\n\n    act(() => {\n      getProps().submitForm();\n    });\n    await waitFor(() => expect(validate).toHaveBeenCalled());\n  });\n\n  it('calls validationSchema function with props', async () => {\n    const validationSchema = jest.fn(() => Yup.object());\n    const myProps = { my: 'prop' };\n    const { getProps } = renderWithFormik(\n      {\n        validationSchema,\n      },\n      myProps\n    );\n\n    act(() => {\n      getProps().submitForm();\n    });\n    await waitFor(() => expect(validationSchema).toHaveBeenCalledWith(myProps));\n  });\n\n  it('calls handleSubmit with values, actions and custom props', async () => {\n    const handleSubmit = jest.fn();\n    const myProps = { my: 'prop' };\n    const { getProps } = renderWithFormik(\n      {\n        handleSubmit,\n      },\n      myProps\n    );\n\n    act(() => {\n      getProps().submitForm();\n    });\n\n    await waitFor(() =>\n      expect(handleSubmit).toHaveBeenCalledWith(\n        { name: 'jared' },\n        {\n          props: myProps,\n          resetForm: expect.any(Function),\n          setErrors: expect.any(Function),\n          setFieldError: expect.any(Function),\n          setFieldTouched: expect.any(Function),\n          setFieldValue: expect.any(Function),\n          setFormikState: expect.any(Function),\n          setStatus: expect.any(Function),\n          setSubmitting: expect.any(Function),\n          setTouched: expect.any(Function),\n          setValues: expect.any(Function),\n          validateField: expect.any(Function),\n          validateForm: expect.any(Function),\n          submitForm: expect.any(Function),\n        }\n      )\n    );\n  });\n\n  it('passes down custom props', () => {\n    const { getProps } = renderWithFormik({}, { my: 'prop' });\n    expect(getProps().my).toEqual('prop');\n  });\n\n  // no ref, WONTFIX?\n  // it('should correctly set displayName', () => {\n  //   const tree = mount(<BasicForm user={{ name: 'jared' }} />);\n  //   expect((tree.get(0).type as any).displayName).toBe('WithFormik(Form)');\n  // });\n});\n"
  },
  {
    "path": "packages/formik/test/yupHelpers.test.ts",
    "content": "import * as Yup from 'yup';\nimport { validateYupSchema, yupToFormErrors } from '../src';\n\nconst schema = Yup.object().shape({\n  name: Yup.string().required('required'),\n  field: Yup.string(),\n});\n\nconst nestedSchema = Yup.object().shape({\n  object: Yup.object().shape({\n    nestedField: Yup.string(),\n    nestedArray: Yup.array().of(Yup.string().nullable(true)),\n  }),\n});\n\nconst deepNestedSchema = Yup.object({\n  object: Yup.object({\n    nestedField: Yup.number().required(),\n  }),\n  object2: Yup.object({\n    nestedFieldWithRef: Yup.number().min(0).max(Yup.ref('$object.nestedField')),\n  }),\n});\n\ndescribe('Yup helpers', () => {\n  describe('yupToFormErrors()', () => {\n    it('should transform Yup ValidationErrors into an object', async () => {\n      try {\n        await schema.validate({}, { abortEarly: false });\n      } catch (e) {\n        expect(yupToFormErrors(e)).toEqual({\n          name: 'required',\n        });\n      }\n    });\n  });\n\n  describe('validateYupSchema()', () => {\n    it('should validate', async () => {\n      try {\n        await validateYupSchema({}, schema);\n      } catch (e) {\n        const err = e as Yup.ValidationError;\n\n        expect(err.name).toEqual('ValidationError');\n        expect(err.errors).toEqual(['required']);\n      }\n    });\n\n    it('should stringify all values', async () => {\n      try {\n        const result = await validateYupSchema({ name: 1 }, schema);\n        expect(result).not.toEqual({ name: 1 });\n        expect(result).toEqual({ name: '1' });\n      } catch (e) {\n        throw e;\n      }\n    });\n\n    it('should set undefined empty strings', async () => {\n      try {\n        const result = await validateYupSchema(\n          { name: 'foo', field: '' },\n          schema\n        );\n        expect(result.field).toBeUndefined();\n      } catch (e) {\n        throw e;\n      }\n    });\n\n    it('should set undefined nested empty strings', async () => {\n      try {\n        const result = await validateYupSchema(\n          { name: 'foo', object: { nestedField: '' } },\n          nestedSchema\n        );\n        expect(result.object!.nestedField).toBeUndefined();\n      } catch (e) {\n        throw e;\n      }\n    });\n\n    it('should set undefined nested empty strings', async () => {\n      try {\n        const result = await validateYupSchema(\n          {\n            name: 'foo',\n            object: { nestedField: 'swag', nestedArray: ['', 'foo', 'bar'] },\n          },\n          nestedSchema\n        );\n        expect(result.object!.nestedArray!).toEqual([undefined, 'foo', 'bar']);\n      } catch (e) {\n        throw e;\n      }\n    });\n\n    it('should provide current values as context to enable deep object field validation', async () => {\n      try {\n        await validateYupSchema(\n          { object: { nestedField: 23 }, object2: { nestedFieldWithRef: 24 } },\n          deepNestedSchema\n        );\n      } catch (e) {\n        expect((e as Yup.ValidationError).name).toEqual('ValidationError');\n        expect((e as Yup.ValidationError).errors).toEqual([\n          'object2.nestedFieldWithRef must be less than or equal to 23',\n        ]);\n      }\n    });\n  });\n});\n"
  },
  {
    "path": "packages/formik/tsconfig.build.json",
    "content": "{\n  \"extends\": \"../../tsconfig.base.json\",\n  \"include\": [\"src\", \"types\"],\n  \"compilerOptions\": {\n    \"rootDir\": \"./src\"\n  }\n}\n"
  },
  {
    "path": "packages/formik/types/global.d.ts",
    "content": "// Declare global variables for TypeScript and VSCode.\n// Do not rename this file or move these types into index.d.ts\n// @see https://code.visualstudio.com/docs/nodejs/working-with-javascript#_global-variables-and-type-checking\ndeclare const __DEV__: boolean;\n"
  },
  {
    "path": "packages/formik/types/index.d.ts",
    "content": "declare module 'tiny-warning' {\n  export default function warning(condition: any, message: string): void;\n}\n\ndeclare module 'react-lifecycles-compat' {\n  import React from 'react';\n  export function polyfill<P>(\n    Comp: React.ComponentType<P>\n  ): React.ComponentType<P>;\n}\n\ndeclare module 'deepmerge' {\n  export = deepmerge;\n\n  function deepmerge<T>(\n    x: Partial<T>,\n    y: Partial<T>,\n    options?: deepmerge.Options\n  ): T;\n  function deepmerge<T1, T2>(\n    x: T1,\n    y: T2,\n    options?: deepmerge.Options\n  ): T1 & T2;\n\n  namespace deepmerge {\n    interface Options {\n      clone?: boolean;\n      arrayMerge?(destination: any[], source: any[], options?: Options): any[];\n      isMergeableObject?(value: object): boolean;\n    }\n\n    function all<T>(objects: Array<Partial<T>>, options?: Options): T;\n  }\n}\n\ndeclare module 'scheduler' {\n  export const unstable_NoPriority = 0;\n  export const unstable_ImmediatePriority = 1;\n  export const unstable_UserBlockingPriority = 2;\n  export const unstable_NormalPriority = 3;\n  export const unstable_LowPriority = 4;\n  export const unstable_IdlePriority = 5;\n\n  export function unstable_runWithPriority<T>(\n    priorityLevel: number,\n    eventHandler: () => T\n  ): T;\n\n  export interface Task {\n    id: number;\n  }\n\n  export interface ScheduleCallbackOptions {\n    delay?: number;\n  }\n\n  export function unstable_scheduleCallback(\n    priorityLevel: number,\n    callback: () => void,\n    options?: ScheduleCallbackOptions\n  ): Task;\n\n  export function unstable_cancelCallback(task: Task): void;\n}\n"
  },
  {
    "path": "packages/formik-native/.gitignore",
    "content": "*.log\n.DS_Store\nnode_modules\n.rts2_cache_cjs\n.rts2_cache_esm\n.rts2_cache_umd\ndist\n"
  },
  {
    "path": "packages/formik-native/CHANGELOG.md",
    "content": "# formik-native\n\n## 2.1.32\n\n### Patch Changes\n\n- Updated dependencies [[`8f9d04d`](https://github.com/jaredpalmer/formik/commit/8f9d04d206146ca941facf37ddd9ddb459c459dc)]:\n  - formik@2.4.9\n\n## 2.1.31\n\n### Patch Changes\n\n- Updated dependencies [[`1de45de`](https://github.com/jaredpalmer/formik/commit/1de45decf8fd70c038fca88dc1a6543aac269553)]:\n  - formik@2.4.8\n\n## 2.1.30\n\n### Patch Changes\n\n- Updated dependencies [[`99dbc24`](https://github.com/jaredpalmer/formik/commit/99dbc24ce714387b27425df48abb7676bb8b582c)]:\n  - formik@2.4.7\n\n## 2.1.29\n\n### Patch Changes\n\n- Updated dependencies [[`f57ca9b`](https://github.com/jaredpalmer/formik/commit/f57ca9bc5ee3842d50f74f39b3fb36a744b55ae8)]:\n  - formik@2.4.6\n\n## 2.1.28\n\n### Patch Changes\n\n- Updated dependencies [[`d7db9cd`](https://github.com/jaredpalmer/formik/commit/d7db9cddba9008714f2853013d5d4e82c8c94558), [`fe4ed7e`](https://github.com/jaredpalmer/formik/commit/fe4ed7e048b14331a75e40cabf48e4787d9b2b71)]:\n  - formik@2.4.5\n\n## 2.1.27\n\n### Patch Changes\n\n- Updated dependencies [[`ae0fe6c`](https://github.com/jaredpalmer/formik/commit/ae0fe6cbd11f2d2664142008225abc237b5bff82), [`ae0fe6c`](https://github.com/jaredpalmer/formik/commit/ae0fe6cbd11f2d2664142008225abc237b5bff82)]:\n  - formik@2.4.4\n\n## 2.1.26\n\n### Patch Changes\n\n- Updated dependencies [[`9e0a661`](https://github.com/jaredpalmer/formik/commit/9e0a661513af75d1b848e5be7a4916c53b78760f)]:\n  - formik@2.4.3\n\n## 2.1.25\n\n### Patch Changes\n\n- Updated dependencies [[`96280d3`](https://github.com/jaredpalmer/formik/commit/96280d388eaa0f2e9fb84e7fd2aa45450de3a949)]:\n  - formik@2.4.2\n\n## 2.1.24\n\n### Patch Changes\n\n- Updated dependencies [[`2b194c2`](https://github.com/jaredpalmer/formik/commit/2b194c287dc281ec2a8ff691d75c6b798ab5f70c), [`708bcb2`](https://github.com/jaredpalmer/formik/commit/708bcb24785f1f8fbb5dfd649de3df4fddf7a113), [`187e47d`](https://github.com/jaredpalmer/formik/commit/187e47de0c4289cb279e25d69f8172cfa14369d2)]:\n  - formik@2.4.1\n\n## 2.1.23\n\n### Patch Changes\n\n- Updated dependencies [[`2f53b70`](https://github.com/jaredpalmer/formik/commit/2f53b70ef9c086a268330fa263390a2edd0164dd)]:\n  - formik@2.4.0\n\n## 2.1.22\n\n### Patch Changes\n\n- Updated dependencies [[`f075a0c`](https://github.com/jaredpalmer/formik/commit/f075a0cf8228c135ff71c58e139246ad24aae529)]:\n  - formik@2.3.3\n\n## 2.1.21\n\n### Patch Changes\n\n- Updated dependencies [[`f086b5a`](https://github.com/jaredpalmer/formik/commit/f086b5a3bb6a155b4dc4ac3735c88805f9f5c4e4), [`6d8f018`](https://github.com/jaredpalmer/formik/commit/6d8f018d7f52b863405b2e310be4b4195c2ba39c)]:\n  - formik@2.3.2\n\n## 2.1.20\n\n### Patch Changes\n\n- Updated dependencies [[`290d92b`](https://github.com/jaredpalmer/formik/commit/290d92b34056593f551ad55baf00dc6f8c700bbe)]:\n  - formik@2.3.1\n\n## 2.1.19\n\n### Patch Changes\n\n- Updated dependencies [[`73de78d`](https://github.com/jaredpalmer/formik/commit/73de78d169f0bc25bd84dff0beaed3cc7a2cbb11), [`39a7bf7`](https://github.com/jaredpalmer/formik/commit/39a7bf7ca31f2ef5b149a8ff02bab64667e19654)]:\n  - formik@2.3.0\n\n## 2.1.18\n\n### Patch Changes\n\n- Updated dependencies [[`22e236e`](https://github.com/jaredpalmer/formik/commit/22e236ed8035c7c5824232202c8ce52193338d5a), [`bc9cb28`](https://github.com/jaredpalmer/formik/commit/bc9cb28df7ad07277a499e8301cfd1bb7b230b86), [`9cbf150`](https://github.com/jaredpalmer/formik/commit/9cbf150e65d7c5498900f19b4fa1897ca8a2c87f), [`9c75a9f`](https://github.com/jaredpalmer/formik/commit/9c75a9f639eb38ad55c351e5e1def8a7e5ebd1f3), [`35fa4cc`](https://github.com/jaredpalmer/formik/commit/35fa4cc38260d709a5570dd3c9ef82831758a5f5)]:\n  - formik@2.2.10\n\n## 2.1.17\n\n### Patch Changes\n\n- Updated dependencies [[`ca60ef9`](https://github.com/formium/formik/commit/ca60ef9517fdefdf928b627dd1c0039fe6febd5d)]:\n  - formik@2.2.9\n\n## 2.1.16\n\n### Patch Changes\n\n- Updated dependencies [[`3a9c707`](https://github.com/formium/formik/commit/3a9c707c8eec200d6eae2955536fb987daf38854)]:\n  - formik@2.2.8\n\n## 2.1.15\n\n### Patch Changes\n\n- Updated dependencies [[`e50040a`](https://github.com/formium/formik/commit/e50040abe49cf7bb46580ea46af6a2b487539830), [`31405ab`](https://github.com/formium/formik/commit/31405abfc9373b2236eecf0f34f630906579e193), [`c2d6926`](https://github.com/formium/formik/commit/c2d692659dc0c1ee43f7e9f60e18c36e0701eefe)]:\n  - formik@2.2.7\n\n## 2.1.14\n\n### Patch Changes\n\n- Updated dependencies [[`d4314a1`](https://github.com/formium/formik/commit/d4314a14cac4bfb0b2c2f1e5cf07a4fc3fb2d2d8)]:\n  - formik@2.2.6\n\n## 2.1.13\n\n### Patch Changes\n\n- Updated dependencies [[`ebad985`](https://github.com/formium/formik/commit/ebad98569e034c5bd8f52a7926480b7d63127cd4), [`0dfa23b`](https://github.com/formium/formik/commit/0dfa23b6b312db1f2c3d22019975212f0f901c00)]:\n  - formik@2.2.5\n\n## 2.1.12\n\n### Patch Changes\n\n- [`199e77a`](https://github.com/formium/formik/commit/199e77a3f69e9886d88fc7114c37769cd365d9c6) [#2882](https://github.com/formium/formik/pull/2882) Thanks [@umidbekkarimov](https://github.com/umidbekkarimov)! - Validate `setFieldTouched` with high priority\n\n- Updated dependencies [[`199e77a`](https://github.com/formium/formik/commit/199e77a3f69e9886d88fc7114c37769cd365d9c6)]:\n  - formik@2.2.4\n\n## 2.1.11\n\n### Patch Changes\n\n- [`e0a28e6`](https://github.com/formium/formik/commit/e0a28e6872ebfd06e636aac84829b60d704b0694) [#2867](https://github.com/formium/formik/pull/2867) Thanks [@umidbekkarimov](https://github.com/umidbekkarimov)! - Fix low priority validation for browser password autofill.\n\n- Updated dependencies [[`e0a28e6`](https://github.com/formium/formik/commit/e0a28e6872ebfd06e636aac84829b60d704b0694), [`958d67c`](https://github.com/formium/formik/commit/958d67ca2c3e006031c31150ea0a42248b28ffc7)]:\n  - formik@2.2.3\n\n## 2.1.10\n\n### Patch Changes\n\n- [`00f95ec`](https://github.com/formium/formik/commit/00f95ec4ec5266eed8ad4e97b76321205c704d51) [#2854](https://github.com/formium/formik/pull/2854) Thanks [@umidbekkarimov](https://github.com/umidbekkarimov)! - Fix low priority validation race condition.\n\n- Updated dependencies [[`00f95ec`](https://github.com/formium/formik/commit/00f95ec4ec5266eed8ad4e97b76321205c704d51)]:\n  - formik@2.2.2\n\n## 2.1.9\n\n### Patch Changes\n\n- Updated dependencies [[`e04886d`](https://github.com/formium/formik/commit/e04886db15c7e9b96516b4bd5a1b89d0e895bb7d)]:\n  - formik@2.2.1\n\n## 2.1.8\n\n### Patch Changes\n\n- Updated dependencies [[`4148181`](https://github.com/formium/formik/commit/41481819f9187de79c4d948aeaa4ca1d33c53ed7)]:\n  - formik@2.2.0\n\n## 2.1.7\n\n### Patch Changes\n\n- Updated dependencies [[`bda9f41`](https://github.com/formium/formik/commit/bda9f41931fac382eec26b4f1283b881b6bbc240)]:\n  - formik@2.1.7\n"
  },
  {
    "path": "packages/formik-native/CONTRIBUTING.md",
    "content": "# TSDX Bootstrap\n\nThis project was bootstrapped with [TSDX](https://github.com/jaredpalmer/tsdx).\n\n## Local Development\n\nBelow is a list of commands you will probably find useful.\n\n### `npm start` or `yarn start`\n\nRuns the project in development/watch mode. Your project will be rebuilt upon changes. TSDX has a special logger for you convenience. Error messages are pretty printed and formatted for compatibility VS Code's Problems tab.\n\n<img src=\"https://user-images.githubusercontent.com/4060187/52168303-574d3a00-26f6-11e9-9f3b-71dbec9ebfcb.gif\" width=\"600\" />\n\nYour library will be rebuilt if you make edits.\n\n### `npm run build` or `yarn build`\n\nBundles the package to the `dist` folder.\nThe package is optimized and bundled with Rollup into multiple formats (CommonJS, UMD, and ES Module).\n\n<img src=\"https://user-images.githubusercontent.com/4060187/52168322-a98e5b00-26f6-11e9-8cf6-222d716b75ef.gif\" width=\"600\" />\n\n### `npm test` or `yarn test`\n\nRuns the test watcher (Jest) in an interactive mode.\nBy default, runs tests related to files changed since the last commit.\n"
  },
  {
    "path": "packages/formik-native/README.md",
    "content": "# Formik Native\n\n```\nyarn add formik formik-native\n```\n\nThis is an experimental package. DO NOT USE IN PRODUCTION.\n"
  },
  {
    "path": "packages/formik-native/package.json",
    "content": "{\n  \"name\": \"formik-native\",\n  \"version\": \"2.1.32\",\n  \"license\": \"Apache-2.0\",\n  \"author\": \"Jared Palmer <jared@palmer.net>\",\n  \"repository\": \"formium/formik\",\n  \"keywords\": [\n    \"formik\",\n    \"react\",\n    \"react-native\",\n    \"form\",\n    \"validation\",\n    \"forms\",\n    \"higher order component\",\n    \"hoc\",\n    \"hooks\"\n  ],\n  \"main\": \"dist/index.js\",\n  \"module\": \"dist/index.esm.js\",\n  \"react-native\": \"src/index.js\",\n  \"typings\": \"dist/index.d.ts\",\n  \"files\": [\n    \"dist\"\n  ],\n  \"scripts\": {\n    \"start\": \"tsdx watch --tsconfig tsconfig.build.json --verbose --noClean\",\n    \"build\": \"tsdx build --tsconfig tsconfig.build.json\",\n    \"test\": \"tsdx test\",\n    \"lint\": \"tsdx lint\"\n  },\n  \"peerDependencies\": {\n    \"react\": \">=16.8.0\"\n  },\n  \"dependencies\": {\n    \"formik\": \"2.4.9\"\n  },\n  \"devDependencies\": {\n    \"@react-native-community/eslint-config\": \"^0.0.5\",\n    \"@types/react\": \"^18.2.7\",\n    \"@types/react-native\": \"^0.63.32\",\n    \"react\": \"^18.2.0\",\n    \"react-native\": \"https://github.com/expo/react-native/archive/sdk-33.0.0.tar.gz\",\n    \"tsdx\": \"^0.14.1\",\n    \"typescript\": \"^4.0.3\"\n  }\n}\n"
  },
  {
    "path": "packages/formik-native/src/index.ts",
    "content": "import * as React from 'react';\nimport { NativeSyntheticEvent, NativeTouchEvent } from 'react-native';\nimport { useFormikContext } from 'formik';\n\nexport function useSubmitButton() {\n  const { submitForm } = useFormikContext();\n  const handlePress = React.useCallback(\n    (_ev: NativeSyntheticEvent<NativeTouchEvent>) => {\n      submitForm();\n    },\n    [submitForm]\n  );\n  return { onPress: handlePress };\n}\n"
  },
  {
    "path": "packages/formik-native/test/blah.test.ts",
    "content": "describe('blah', () => {\n  it('works', () => {\n    expect(1).toEqual(1);\n  });\n});\n"
  },
  {
    "path": "packages/formik-native/tsconfig.build.json",
    "content": "{\n  \"extends\": \"../../tsconfig.json\",\n  \"include\": [\"src\", \"types\"],\n  \"compilerOptions\": {\n    \"target\": \"es5\",\n    \"module\": \"esnext\",\n    \"lib\": [\"es2015\", \"es2016\", \"esnext\"],\n    \"jsx\": \"react-native\"    \n  }\n}\n"
  },
  {
    "path": "playwright.config.ts",
    "content": "import { PlaywrightTestProject, defineConfig, devices } from '@playwright/test';\n\n/**\n * Read environment variables from file.\n * https://github.com/motdotla/dotenv\n */\n// require('dotenv').config();\n\n/**\n * See https://playwright.dev/docs/test-configuration.\n */\nexport default defineConfig({\n  testDir: './e2e',\n  /* Run tests in files in parallel */\n  fullyParallel: true,\n  /* Fail the build on CI if you accidentally left test.only in the source code. */\n  forbidOnly: !!process.env.CI,\n  /* Retry on CI only */\n  retries: process.env.CI ? 2 : 0,\n  /* Opt out of parallel tests on CI. */\n  workers: process.env.CI ? 1 : undefined,\n  /* Reporter to use. See https://playwright.dev/docs/test-reporters */\n  reporter: 'html',\n  /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */\n  use: {\n    /* Base URL to use in actions like `await page.goto('/')`. */\n    baseURL: 'http://127.0.0.1:3000',\n\n    /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */\n    trace: 'on-first-retry',\n  },\n\n  /* Configure projects for major browsers */\n  projects: [\n    {\n      name: 'chromium',\n      use: { ...devices['Desktop Chrome'] },\n    },\n\n    {\n      name: 'firefox',\n      use: { ...devices['Desktop Firefox'] },\n    },\n\n    // this one does not seem to be functional in github actions\n    !process.env.CI\n      ? {\n          name: 'webkit',\n          use: { ...devices['Desktop Safari'] },\n        }\n      : null,\n\n    /* Test against mobile viewports. */\n    // {\n    //   name: 'Mobile Chrome',\n    //   use: { ...devices['Pixel 5'] },\n    // },\n    // {\n    //   name: 'Mobile Safari',\n    //   use: { ...devices['iPhone 12'] },\n    // },\n\n    /* Test against branded browsers. */\n    // {\n    //   name: 'Microsoft Edge',\n    //   use: { ...devices['Desktop Edge'], channel: 'msedge' },\n    // },\n    // {\n    //   name: 'Google Chrome',\n    //   use: { ..devices['Desktop Chrome'], channel: 'chrome' },\n    // },\n  ].filter(Boolean) as PlaywrightTestProject[],\n\n  /* Run your local dev server before starting the tests */\n  webServer: {\n    command: 'npm run start:app',\n    url: 'http://127.0.0.1:3000',\n    reuseExistingServer: !process.env.CI,\n  },\n});\n"
  },
  {
    "path": "scripts/benchmark.tsx",
    "content": "import { yupResolver } from '@hookform/resolvers/yup';\nimport Benchmark from 'benchmark';\nimport { Field, FieldArray, Form, Formik } from 'formik';\nimport React from 'react';\nimport { renderToString } from 'react-dom/server';\nimport { useFieldArray, useForm } from 'react-hook-form';\nimport * as yup from 'yup';\n\nconst schema = yup.object({\n  firstName: yup.string().required(),\n  lastName: yup.string().required(),\n  email: yup.string().email().required(),\n  guests: yup.array(yup.object({ name: yup.string().required() })).ensure(),\n});\n\nconst suite = new Benchmark.Suite({ initCount: 50 });\n\nsuite\n  .add('formik (simple example)', () => renderToString(<FormikSimpleExample />))\n  .add('react hook form (simple example)', () =>\n    renderToString(<ReactHookFormSimpleExample />)\n  )\n  // TODO: add react-hook-form variant to cross-test\n  .on('cycle', (event: Benchmark.Event) => {\n    // @ts-expect-error surface execution errors, type does not include \"error\" field\n    if (event.target.error) throw event.target.error;\n\n    // Output benchmark result by converting benchmark result to string\n    console.log(String(event.target));\n  })\n  .run();\n\n// generic Formik implementation\nfunction FormikSimpleExample() {\n  return (\n    <Formik\n      initialValues={{\n        firstName: '',\n        lastName: '',\n        email: '',\n        guests: [],\n      }}\n      onSubmit={() => {}}\n      validationSchema={schema}\n    >\n      {({ values }) => (\n        <Form>\n          <Field name=\"firstName\" />\n          <Field name=\"lastName\" />\n          <Field name=\"email\" />\n\n          <FieldArray name=\"guests\">\n            {({ push, remove }) => (\n              <>\n                {values.guests.map((_, index) => (\n                  <div key={index}>\n                    <Field name={`guests[${index}].name`} />{' '}\n                    <button onClick={() => remove(index)}>Remove</button>\n                  </div>\n                ))}\n\n                <button onClick={() => push({ name: '' })}>Add guest</button>\n              </>\n            )}\n          </FieldArray>\n        </Form>\n      )}\n    </Formik>\n  );\n}\n\n// generic react-hook-form implementation\nfunction ReactHookFormSimpleExample() {\n  const { control, register, handleSubmit } = useForm({\n    defaultValues: {\n      firstName: '',\n      lastName: '',\n      email: '',\n      guests: [],\n    },\n    resolver: yupResolver(schema),\n  });\n\n  const { fields, append, remove } = useFieldArray({\n    control,\n    // @ts-expect-error incorrect schema resolution in library types\n    name: 'guests',\n  });\n\n  return (\n    <form onSubmit={handleSubmit(() => {})}>\n      <input {...register('firstName')} />\n      <input {...register('lastName')} />\n      <input {...register('email')} />\n\n      <>\n        {fields.map((field, index) => (\n          <div key={field.id}>\n            <input\n              {...register(\n                // @ts-expect-error incorrect schema resolution in library types\n                `guests.${index}.name`\n              )}\n            />{' '}\n            <button onClick={() => remove(index)}>Remove</button>\n          </div>\n        ))}\n\n        <button onClick={() => append({ name: '' })}>Add guest</button>\n      </>\n    </form>\n  );\n}\n"
  },
  {
    "path": "scripts/btag.sh",
    "content": "#!/bin/bash\n\ngit branch $1-branch $1\ngit checkout $1-branch"
  },
  {
    "path": "scripts/retag.sh",
    "content": "#!/bin/bash\n\ngit tag -d $1\ngit tag $1\ngit push origin :$1\ngit push origin $1\ngit fetch --tags"
  },
  {
    "path": "tsconfig.base.json",
    "content": "{\n  \"compilerOptions\": {\n    \"module\": \"esnext\",\n    \"lib\": [\"dom\", \"esnext\"],\n    \"importHelpers\": true,\n    \"noImplicitAny\": true,\n    \"alwaysStrict\": true,\n    // output .d.ts declaration files for consumers\n    \"declaration\": true,\n    // output .js.map sourcemap files for consumers\n    \"sourceMap\": true,\n    // stricter type-checking for stronger correctness. Recommended by TS\n    \"strict\": true,\n    // linter checks for common issues\n    \"noImplicitReturns\": true,\n    \"noFallthroughCasesInSwitch\": true,\n    // noUnused* overlap with @typescript-eslint/no-unused-vars, can disable if duplicative\n    \"noUnusedLocals\": true,\n    \"noUnusedParameters\": true,\n    // use Node's module resolution algorithm, instead of the legacy TS one\n    \"moduleResolution\": \"node\",\n    // transpile JSX to React.createElement\n    \"jsx\": \"react\",\n    // interop between ESM and CJS modules. Recommended by TS\n    \"esModuleInterop\": true,\n    // significant perf increase by skipping checking .d.ts files, particularly those in node_modules. Recommended by TS\n    \"skipLibCheck\": true,\n    // error out if import and file system have a casing mismatch. Recommended by TS\n    \"forceConsistentCasingInFileNames\": true,\n    // `tsdx build` ignores this option, but it is commonly used when type-checking separately with `tsc`\n    \"noEmit\": true\n  }\n}\n"
  },
  {
    "path": "tsconfig.json",
    "content": "{\n  \"extends\": \"./tsconfig.base.json\",\n  \"include\": [\"packages\", \"types\", \"scripts\"],\n  \"compilerOptions\": {\n    \"allowJs\": false,\n    \"baseUrl\": \".\",\n    \"typeRoots\": [\"./node_modules/@types\", \"./types\"],\n    \"paths\": {\n      \"formik\": [\"./packages/react/src\"],\n      \"formik-native\": [\"./packages/react-native/src\"],\n      \"$test/*\": [\"test/*\"]\n    }\n  }\n}\n"
  },
  {
    "path": "turbo.json",
    "content": "{\n  \"$schema\": \"https://turborepo.com/schema.json\",\n  \"tasks\": {\n    \"build\": {\n      \"dependsOn\": [\"^build\"],\n      \"outputs\": [\"dist/**\", \".next/**\", \"!.next/cache/**\"]\n    },\n    \"lint\": {\n      \"dependsOn\": [\"^build\", \"build\"]\n    },\n    \"test\": {\n      \"dependsOn\": [\"^build\", \"build\"]\n    },\n    \"start\": {\n      \"cache\": false,\n      \"persistent\": true\n    }\n  }\n}\n"
  },
  {
    "path": "website/.eslintignore",
    "content": "**/node_modules/*\n**/out/*\n**/.next/*\n"
  },
  {
    "path": "website/.eslintrc",
    "content": "{\n  \"extends\": \"next/core-web-vitals\"\n}"
  },
  {
    "path": "website/.gitignore",
    "content": ".next\n.now\n.env\n.env.*\nnode_modules\n*.log\n.DS_Store\n.vercel\npublic/sitemap.xml"
  },
  {
    "path": "website/.prettierignore",
    "content": "node_modules\n.next\nyarn.lock\npackage-lock.json\npublic\n"
  },
  {
    "path": "website/README.md",
    "content": "# Formik Docs\n\nThis is source code to formik.org. It is built with:\n\n- Next.js\n- MDX\n- Tailwind\n- Algolia\n- Notion\n\n## Running locally\n\n```sh\nyarn install\n```\n\nAt the moment, you need to signup for Notion, and [follow these instructions](https://github.com/ijjk/notion-blog#getting-blog-index-and-token) to get a token and create a blog in order to develop locally. Not ideal, but hopefully will fix soon.\n\nWith tokens and page index in hand, rename `.sample.env` and `.sample.env.build` to just `.env` and `.env.build`. In each one, add respective parameters:\n\n```diff\n-NOTION_TOKEN=XXXX\n+NOTION_TOKEN=<YOUR_TOKEN>\n-BLOG_INDEX_ID=XXXXX\n+BLOG_INDEX_ID=<YOUR_BLOG_INDEX_ID>\n```\n\nNow it will work. Run `yarn dev` to get going.\n\nIf you get stuck or need help, [send a DM to Jared](https://twitter.com/jaredpalmer) on Twitter.\n"
  },
  {
    "path": "website/next-env.d.ts",
    "content": "/// <reference types=\"next\" />\n/// <reference types=\"next/image-types/global\" />\n\n// NOTE: This file should not be edited\n// see https://nextjs.org/docs/basic-features/typescript for more information.\n"
  },
  {
    "path": "website/next.config.js",
    "content": "const webpack = require('webpack');\nconst fs = require('fs');\nconst path = require('path');\nconst visit = require('unist-util-visit');\nconst remarkPlugins = require('./src/lib/docs/remark-plugins');\n\nmodule.exports = {\n  pageExtensions: ['jsx', 'js', 'ts', 'tsx', 'mdx', 'md'],\n  env: {\n    NEXT_PUBLIC_GA_TRACKING_ID: process.env.NEXT_PUBLIC_GA_TRACKING_ID || '',\n  },\n  rewrites() {\n    return [\n      {\n        source: '/feed.xml',\n        destination: '/_next/static/feed.xml',\n      },\n      {\n        source: '/docs{/}?',\n        destination: '/docs/overview',\n      },\n      {\n        source: '/docs/tag/:tag{/}?',\n        destination: '/docs/tag/:tag/overview',\n      },\n    ];\n  },\n  webpack: (config, { dev, isServer, ...options }) => {\n    config.module.rules.push({\n      test: /.mdx?$/, // load both .md and .mdx files\n      use: [\n        options.defaultLoaders.babel,\n        {\n          loader: '@mdx-js/loader',\n          options: {\n            remarkPlugins,\n          },\n        },\n        path.join(__dirname, './src/lib/docs/md-loader'),\n      ],\n    });\n\n    if (!dev && isServer) {\n      // we're in build mode so enable shared caching for the GitHub API\n      process.env.USE_CACHE = 'true';\n      const originalEntry = config.entry;\n\n      config.entry = async () => {\n        const entries = { ...(await originalEntry()) };\n        return entries;\n      };\n    }\n\n    return config;\n  },\n};\n"
  },
  {
    "path": "website/package.json",
    "content": "{\n  \"name\": \"fdocs3\",\n  \"version\": \"1.0.0\",\n  \"main\": \"index.js\",\n  \"author\": \"Jared Palmer <jared@palmer.net>\",\n  \"license\": \"MIT\",\n  \"scripts\": {\n    \"dev\": \"next\",\n    \"dev:watch\": \"next-remote-watch ./src/blog\",\n    \"build\": \"next build && npm run sitemap\",\n    \"start\": \"next start\",\n    \"rss\": \"node ./.next/server/scripts/build-rss.js\",\n    \"sitemap\": \"node ./scripts/build-sitemap.js\"\n  },\n  \"dependencies\": {\n    \"@docsearch/css\": \"1.0.0-alpha.27\",\n    \"@docsearch/react\": \"1.0.0-alpha.27\",\n    \"@mdx-js/loader\": \"^1.5.1\",\n    \"@mdx-js/mdx\": \"^1.5.1\",\n    \"@mdx-js/react\": \"^1.5.1\",\n    \"@mdx-js/tag\": \"^0.20.3\",\n    \"@next/mdx\": \"^9.4.0\",\n    \"@vercel/analytics\": \"^1.0.1\",\n    \"@zeit/fetch\": \"^6.0.0\",\n    \"body-scroll-lock\": \"^3.0.1\",\n    \"classnames\": \"^2.3.1\",\n    \"copy-to-clipboard\": \"^3.3.1\",\n    \"date-fns\": \"^2.12.0\",\n    \"docsearch.js\": \"^2.6.3\",\n    \"formik\": \"^2.1.4\",\n    \"framer-motion\": \"^1.11.1\",\n    \"gray-matter\": \"^4.0.2\",\n    \"hast-util-sanitize\": \"^3.0.2\",\n    \"intersection-observer\": \"^0.10.0\",\n    \"isomorphic-unfetch\": \"^3.0.0\",\n    \"next\": \"^13.4.4\",\n    \"next-mdx-remote\": \"^3.0.4\",\n    \"prismjs\": \"^1.20.0\",\n    \"react\": \"^18.2.0\",\n    \"react-aria\": \"^3.2.0\",\n    \"react-dom\": \"^18.2.0\",\n    \"react-icons\": \"^3.9.0\",\n    \"react-live\": \"^2.2.2\",\n    \"rehype-format\": \"^3.0.1\",\n    \"rehype-img-size\": \"^0.0.1\",\n    \"rehype-raw\": \"^5.0.0\",\n    \"rehype-sanitize\": \"^4.0.0\",\n    \"rehype-shiki\": \"^0.0.9\",\n    \"rehype-stringify\": \"^7.0.0\",\n    \"remark\": \"^12.0.0\",\n    \"remark-autolink-headings\": \"^6.0.0\",\n    \"remark-emoji\": \"^2.1.0\",\n    \"remark-footnotes\": \"^1.0.0\",\n    \"remark-github\": \"^9.0.0\",\n    \"remark-html\": \"^13.0.1\",\n    \"remark-images\": \"^2.0.0\",\n    \"remark-rehype\": \"^6.0.0\",\n    \"remark-slug\": \"^6.0.0\",\n    \"remark-toc\": \"^7.0.0\",\n    \"remark-unwrap-images\": \"^2.0.0\",\n    \"scroll-into-view-if-needed\": \"^2.2.24\",\n    \"semver-regex\": \"^3.1.1\",\n    \"tslib\": \"^2.3.1\",\n    \"unist-util-visit\": \"^2.0.2\",\n    \"use-onclickoutside\": \"^0.3.1\"\n  },\n  \"devDependencies\": {\n    \"@tailwindcss/forms\": \"^0.5.3\",\n    \"@types/body-scroll-lock\": \"^2.6.1\",\n    \"@types/classnames\": \"^2.3.1\",\n    \"@types/mdx-js__react\": \"^1.5.1\",\n    \"@types/node\": \"^13.13.0\",\n    \"@types/node-fetch\": \"^2.5.7\",\n    \"@types/react\": \"^18.2.7\",\n    \"@types/react-dom\": \"^18.2.4\",\n    \"@types/react-highlight\": \"^0.12.2\",\n    \"algoliasearch\": \"3.35.1\",\n    \"autoprefixer\": \"^10.4.13\",\n    \"eslint\": \"^7.32.0\",\n    \"eslint-config-next\": \"^13.4.4\",\n    \"eslint-plugin-prettier\": \"^4.0.0\",\n    \"github-slugger\": \"^1.3.0\",\n    \"md5\": \"^2.2.1\",\n    \"mdast-util-to-string\": \"^1.1.0\",\n    \"next-remote-watch\": \"^1.0.0\",\n    \"nextjs-sitemap-generator\": \"^1.1.0\",\n    \"postcss\": \"^8.4.21\",\n    \"prettier\": \"^2.8.4\",\n    \"remark-parse\": \"^8.0.2\",\n    \"tailwindcss\": \"^3.2.6\",\n    \"typescript\": \"^4.4.3\",\n    \"unified\": \"^9.0.0\"\n  }\n}\n"
  },
  {
    "path": "website/postcss.config.js",
    "content": "// postcss.config.js\nmodule.exports = {\n  plugins: {\n    tailwindcss: {},\n    autoprefixer: {},\n  },\n};\n"
  },
  {
    "path": "website/public/robots.txt",
    "content": "User-agent: *\nDisallow:"
  },
  {
    "path": "website/scripts/build-sitemap.js",
    "content": "const sitemap = require('nextjs-sitemap-generator');\nconst fs = require('fs');\n\n// This is needed for the plugin to work\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst BUILD_ID = fs.readFileSync('.next/BUILD_ID').toString();\n\nsitemap({\n  baseUrl: 'https://formik.org',\n  pagesDirectory: process.cwd() + '/.next/server/pages',\n  targetDirectory: 'public/',\n  ignoredExtensions: ['js', 'map'],\n  ignoredPaths: ['/404', '/blog/[...slug]'],\n});\n"
  },
  {
    "path": "website/src/blog/formik-3-alpha.md",
    "content": "---\ntitle: Formik 3 Alpha\ndate: October 27, 2020\npublished: true\nslug: formik-3-alpha\nauthors:\n  - Jared Palmer\npreview: |\n  Today, we cut the very first release of Formik v3 alpha. The reason for this blog post is that there is a small breaking change that we unfortunately have no way of warning you about like we usually do with deprecation notices due to its nature.\n---\n\nToday, we cut the very first release of Formik v3 alpha. You can install it with:\n\n```jsx\nnpm install formik@next\n```\n\nThe reason for this blog post is that there is a small breaking change that we unfortunately have no way of warning you about like we usually do with deprecation notices due to its nature.\n\n---\n\nBut, before we get into the bad news, let's first share the good news:\n\n## New `parse`, `format`, and `formatOnBlur` props!\n\nThe new alpha release contains new `parse` , `format`, and `formatOnBlur` props for `getFieldProps`, `<Field>`, and `useField()`. These props make it a lot easier to implement [input masking](https://css-tricks.com/input-masking/)—a technique where you alter the format of the raw value of an input to make it appear in a certain way to the user (e.g. like a phone number (917) 555-1234 or a text-based date 10/2020). For you TypeScript friends here's what's new:\n\n```tsx\ninterface FieldConfig<V> {\n  // ...omitted for brevity\n\n  /**\n   * Function to parse raw input value before setting it to state\n   */\n  parse?: (rawInput: string, name: string) => V;\n\n  /**\n   * Function to transform value passed to input\n   */\n  format?: (value: V, name: string) => any;\n\n  /**\n   * Should Formik wait until the blur event before formatting input value?\n   * @default false\n   */\n  formatOnBlur?: boolean;\n}\n\n// ...elsewhere...\n\nconst [field] = useField({ name: 'phone', parse: rawInput => ... })\n<Field name=\"phone\" parse={rawInput => ... } />\n<input {...formikProps.getFieldProps({ name: 'phone', parse: rawInput => ... }) />\n```\n\nAnd here's a full example that uses the `[format-string-by-pattern](https://www.npmjs.com/package/format-string-by-pattern)` package to create various phone number input masks. Notice on the first input that even though you type 9999999999 the input's value (and Formik's internal value) is 999-999-9999. Neat!\n\n[https://codesandbox.io/s/github/jaredpalmer/formik/tree/next/examples/format-string-by-pattern?fontsize=14&hidenavigation=1&theme=dark&file=/index.js](https://codesandbox.io/s/github/jaredpalmer/formik/tree/next/examples/format-string-by-pattern?fontsize=14&hidenavigation=1&theme=dark&file=/index.js)\n\n**\\*Pro Tip:** I'm all about making intuitive API's and so I'm aware that `parse` and `format` are hard to remember. The trick I've been using / saying in my head is as follows: \"format\" → sounds like \"from\" → \"from Formik\" → from Formik to input. Again, this is an alpha, so if it's too confusing, we'll rename these.\\*\n\n## A Breaking Change\n\nTo support this new behavior, we needed to make a breaking change to the way that `onChange` and `onBlur` handlers work when returned from `formikProps.getFieldProps()`, which subsequently impacts `useField()` and `Field` as well.\n\nIn the past, these `onChange` and `onBlur` methods were identical to `formikProps.handleChange` and `formikProps.handleBlur` (returned by `useFormik()` or by the render prop `<Formik>` or `withFormik`). However, as of 3.0.0-next.0, these methods behave differently, respectively.\n\nWhen returned from `getFieldProps`, `useField`, or `<Field>`'s render prop, `onChange` and `onBlur` are now already scoped to the given field and can now accept either a React Synthetic event or an arbitrary value. They no longer can be curried like `handleChange` and `handleBlur` can.\n\n### Some Examples\n\nHere are some more concrete examples for you of what works and what doesn't work...\n\n**Still works, but does not support `parse`, `format`, and `formatOnBlur`**\n\n```tsx\nexport const MyReactNativeForm = props => (\n  <Formik\n    initialValues={{ email: '' }}\n    onSubmit={values => console.log(values)}\n  >\n    {({ handleChange, handleBlur, handleSubmit, values }) => (\n      <View>\n        <TextInput\n          onChangeText={handleChange('email')} // curried\n          onBlur={handleBlur('email')} // curried\n          value={values.email}\n        />\n        <Button onPress={handleSubmit} title=\"Submit\" />\n      </View>\n    )}\n  </Formik>\n);\n```\n\n**No longer works**\n\n```tsx\nexport const MyTextField = props => {\n  const [field] = useField(props);\n  const onChange = e => {\n    e.persist();\n    if (e.target.value === 'foo') {\n      // Using the curried version of onChange,\n      // effectively equivalent to setFieldValue() no longer works\n      field.onChange(props.name)('bar');\n    } else {\n      field.onChange(e);\n    }\n  };\n  return <input {...field} onChange={onChange} />;\n};\n```\n\n**But instead you can just do this...**\n\n```tsx\nexport const MyTextField = props => {\n  const [field] = useField(props);\n  const onChange = e => {\n    e.persist();\n    if (e.target.value === 'foo') {\n      // You can now just set the value\n      field.onChange('bar');\n    } else {\n      // Or pass an event\n      field.onChange(e);\n    }\n  };\n  return <input {...field} onChange={onChange} />;\n};\n```\n\nNormally, this small change wouldn't cause a major version bump, but because we no longer know if you are currying the `onChange` method or are actually intending to set the string argument as a value we can't fire off a warning to save you from yourself. 🤷‍♂️\n\n## What's next?\n\nThe primary goal of Formik v3 is to improve performance, ergonomics, and a11y, but also to recover from certain bets we made around React hooks that never happened (like context selectors). Unfortunately, to get where we want to go, there will be some more breaking changes and/or new components that will need to be introduced to the Formik family. The plan is to roll these out on the `next` branch over the next few weeks, argue about naming for a bit, and then decide either to split some of the existing components into their own packages (a la `prop-types`) and/or write codemods to automate the migration path. Either way, Formik is getting faster...A lot lot faster, which is something that's long overdue.\n"
  },
  {
    "path": "website/src/blog/new-docs.md",
    "content": "---\ntitle: New Docs\ndate: June 30, 2020\npublished: true\nslug: new-docs\npreview: |\n  After a few weeks of work, I'm excited to finally release Formik's new documentation website. Formik was one of the earliest users of Facebook's [Docusaurus](https://docusaurus.io/) documentation framework. It worked great and, due to limited styling options, it helped ensure we stayed focused on the content and not on the looks. That being said, Docusaurus v1 has its shortcomings.\nauthors:\n  - Jared Palmer\n---\n\nAfter a few weeks of work, I'm excited to finally release Formik's new documentation website as well as its new domain at [https://formik.org](https://formik.org).\n\n---\n\n![/images/blog/formik-landing-page-screenshot.png](/images/blog/formik-landing-page-screenshot.png)\n\nFormik was one of the earliest users of Facebook's [Docusaurus](https://docusaurus.io/) documentation framework. It worked great and, due to limited styling options, it helped ensure we stayed focused on the content and not on the looks.\n\nThat being said, Docusaurus v1 has its shortcomings. First, it is truly a static site generator. It spits out pure HTML. This is great for a lot of libraries and tools, but for something like Formik, which is a React package, the inability to run modern client-side JS became frustrating. Things like in-page playgrounds or editable code-blocks were not feasible.\n\nWhen it came time to give the docs a much-needed refresh, I evaluated Gatsby and Docusaurus v2, but ultimately **decided to go with [Next.js](https://nextjs.org)**. Thanks to new features like `getStaticProps`, catch-all routes, and incremental static-site generation, the Formik docs now have solid foundation upon which we can innovate going forward.\n\n## **tl;dr**\n\nThe Formik docs are built with:\n\n- [Next.js](https://nextjs.org/) 9.4.x + MDX\n- [Notion](https://notion.so) (for powering this blog post you're reading right now)\n- [Tailwind CSS](https://tailwindcss.com)\n- [Algolia DocSearch](https://docsearch.algolia.com/) v3 Alpha for search\n\n_What follows in the rest of this post is a more detailed overview of Formik's documentation stack, some of the rationale behind it, and a few cool tidbits you might find interesting._\n\n## [Next.js](https://nextjs.org/) 9.4\n\nI chose Next.js over alternatives such as Gatsby and Docusaurus v2 for several reasons. The biggest factor in the decision is that I believe that **documentation is part of the product**. Since some of my forthcoming SaaS dashboard and marketing sites already use Next.js, staying within the Next.js universe meant all of the codebases would work the same way, even the open source ones. This reduces cognitive overhead and makes it easier to work across applications and share components.\n\n### **Why not Gatsby?**\n\n[Gatsby](https://gatsbyjs.org) is a React-based static site generator with a rich plugin and theme ecosystem. Its key value proposition is a single data graph powered by [GraphQL](https://graphql.org). With respect to documentation sites, Gatsby themes—groups of plugins, layouts, and components that child themes can then inherit— are extremely useful. Given the growing number of OSS projects [we are working on](https://github.com/formik), this was seriously compelling. However, I am fairly [convinced that GraphQL is still wildly overkill for documentation and most static document-driven websites](https://jaredpalmer.com/gatsby-vs-nextjs). And yes, I am fully aware that you don't technically _need_ to use GraphQL with Gatsby, but it is definitely its happy path.\n\n### **Why not Docusaurus v2?**\n\nAs of writing, Docusaurus v2.0 is still in alpha. The new version fixes a lot of issues with v1.0 by allowing for client-side React, plugins, and even custom themes.\n\nThe biggest issue for me with Docusaurus 2 was/is its base theme.\n\nFor many projects, Facebook's new static CSS framework for docs called [Infima](https://facebookincubator.github.io/infima/) (which Docusaurus uses and is co-developed by the same team) is fine. However, there are few things about it that really bother me.\n\n**Mobile Navigation feels awkward**\n\nI consistently struggle to navigate every Docusaurus v2 website on mobile. I find the floating sub-navigation to be unintuitive compared to Docusaurus v1's sub-navbar. Here's a comparison video. v1 is on the left and v2 is on the right.\n\n<video controls=\"true\" loop=\"true\"><source  src=\"/images/blog/docusaurus-v1-vs-v2-nav.mp4\" type=\"video/mp4\" /></video>\n\n**Infima CSS isn't easy to theme**\n\nWhile Infima CSS is a complete CSS framework, it has somewhat limited theming options. Keeping the new Formik docs looking visually congruent with our enterprise SaaS app's design system also seemed like it would be challenging since we would need to bend/extend Infima CSS significantly.\n\n**Lack of Community Themes**\n\nAnother great addition to Docusaurus in v2 is custom theming and [first-class theme component overriding (a.k.a \"Swizzling\")](https://v2.docusaurus.io/docs/using-themes/#swizzling-theme-components). If you've never heard of it before, component swizzling works similarly to Wordpress's template hierarchy for themes and plugins, but for React components. When you run `docusaurus swizzle <theme name> [component name]` , Docusaurus copies that component from the specified theme out of `node_modules` and into a local file in `src/theme/[component name]` . You can then make all the changes you want to that file and Docusaurus will use the \"Swizzled\" version instead of the base one when it builds your site.\n\nThe big downside to Swizzling is the same one that forever afflicts Wordpress child themes—it can make upgrading _much_ more complicated (especially when new features are added to the base theme). This problem is so prominent in fact, that the Docusaurus docs [currently warn **_against_** Swizzling until v2 reaches the beta stage](https://v2.docusaurus.io/docs/using-themes/#swizzling-theme-components):\n\n> We would like to discourage swizzling of components until we've minimally reached a Beta stage. The components APIs have been changing rapidly and are likely to keep changing until we reach Beta. Stick with the default appearance for now if possible to save yourself some potential pain in future.\n\nAt this point, I spent a bit of time evaluating what it would take to write our own custom Docusaurus v2 theme for Formik, but ultimately decided against it because of the above warning. My rationale was that if I was going to go down that rabbit hole, I might as well just retain full control of the entire markdown processing pipeline with Next.js–and that's exactly what I did...\n\n### MDX FTW\n\nWith a little bit of effort, Next.js can be great for documentation—with MDX being the secret sauce. However, getting it to feature-parity with Docusaurus will take considerable effort and is not for the faint of heart. That being said, I'm super happy with how the new docs work, how easy it is contribute to them, and the way the site looks.\n\n![/images/blog/formik-mdx-docs-screenshot.png](/images/blog/formik-mdx-docs-screenshot.png)\n\nWorth pointing out that Formik's new docs handle MDX slightly differently than most Next.js sites likely do. Instead of using the official `@next/mdx` plugin, I shamelessly stole Brent Vatne's [custom webpack loader](https://github.com/formik/formik/blob/master/website2/src/lib/docs/md-loader.js) from the [Expo.io](http://expo.io) docs which automagically extracts front-matter and injects a wrapper Layout component export in every .mdx file.\n\n```tsx\nconst fm = require('gray-matter');\n\n// Makes mdx in next.js much better by injecting necessary exports so that\n// the docs are still readable on github\n// (Shamelessly stolen from Expo.io docs)\n// @see https://github.com/expo/expo/blob/master/docs/common/md-loader.js\nmodule.exports = async function (src) {\n  const callback = this.async();\n  const { content, data } = fm(src);\n  const layout = data.layout || 'Docs';\n  const code =\n    `import { Layout${layout} } from 'components/Layout${layout}';\nexport const meta = ${JSON.stringify(data)};\nexport default ({ children, ...props }) => (\n  <Layout${layout} meta={meta} {...props}>{children}</Layout${layout}>\n);\n` + content;\n\n  return callback(null, code);\n};\n```\n\nBy default, this loader injects the `LayoutDocs.tsx` layout component as a wrapper, but additional layouts can be added whenever we need them. They can be specified on a per-page basis via `layout` frontmatter key.\n\n### Notion-powered Blog with [Static Site Generation](https://github.com/vercel/next.js/issues/9524)\n\nInstead of using a traditional CMS or MDX, this blog you're reading right now is actually powered by [Notion](https://notion.so) and Next.js's Static Site Generation feature. We keep posts in a table in a Notion API with relevant metadata and then map Notion's undocumented API to custom React components in [./src/pages/blog/[...slug].tsx](https://github.com/formik/formik/blob/master/website2/src/pages/blog/%5B...slug%5D.tsx) . The result is amazing and a fantastic writing experience. For a more detailed example of this setup and one that you can deploy immediately, go here: [https://notion-blog.now.sh/](https://notion-blog.now.sh/)\n\n![/images/blog/notion-cms-screenshot.png](/images/blog/notion-cms-screenshot.png)\n\n## [**Tailwind**](https://tailwindcss.com)\n\nI've been a fan of Atomic CSS for many many years. Tailwind is the latest and perhaps greatest of all Atomic CSS frameworks. It's flexible, it's intuitive, it looks great, and nothing beats it perf-wise (cuz it's just CSS!). Thanks to Tailwind 1.4.x, we're able to purge all extraneous class with its new `purge` feature too.\n\n## **[Algolia DocSearch](https://docsearch.algolia.com/) v3 Alpha**\n\nI accidentally discovered the new version of docsearch.js while working on the docs and it's even better than I could have ever imagined. It has a cool omnibar and even keeps track of recent searches and favorites.\n\n![/images/blog/algolia-docsearch-screenshot.png](/images/blog/algolia-docsearch-screenshot.png)\n\nOverall, I'm pretty happy with the new docs site. For the first time in a while, I'm excited to write docs again. There's still a decent amount of features still missing, but I'm very happy with the end-user experience and the developer experience that this stack provides. Next.js gives us a great foundation for building more app-like features into the docs site. The first of these will be a brand new interactive tutorial as well as a new searchable example and boilerplate directory. As always, if you're interested helping out or diving deeper, the [full source code of the new docs is available on GitHub](https://github.com/formik/formik).\n\nSo with that, go poke around, but be gentle. If you find any bugs, [file an issue.](https://github.com/formik/formik/issues/new?template=Bug_report.md) With this new Notion-powered blog, I'll be posting a lot more often, so enter your email and slap that subscribe button in the footer to join the Formik mailing list.\n\n-J\n\n## September 2021 Update\n\nSince writing this post, Notion now has a public API. However, we ultimately ended up switching to MDX for blog content as well.\n\nThe problem we ran into with Notion is that docs builds would fail on PRs made by external contributors without approval. This is because using Notion as a CMS requires a secret API token which Vercel rightfully does not allow access to for PR deployments made by developers from outside of an organization. This really isn't specific to Notion, but would be the same for any headless CMS used to power a blog on an OSS project. It made browsing Formik's issues difficult on GitHub, since every PR would fail out of the box. Furthermore, it's not an awesome experience for new contributors to see a red X even though they didn't do anything wrong.\n\nAt this point, we could have either moved the blog to its own repo or site, but we decided it was just easier to drop Notion for good ol' MDX and keep everything inside the codebase.\n\nIn addition to Notion's public API, Docusaurus v2 has updated and improved its mobile navigation. It's worth checking it out along with another project called [Nextra](https://nextra.vercel.app) which is like Docusaurus, but powered by Next.js. If I were to rewrite the Formik docs again today, I would likely fork `nextra-theme-docs`.\n"
  },
  {
    "path": "website/src/components/ArrowRight.tsx",
    "content": "import * as React from 'react';\n\nexport function ArrowRight({ fill = '#718096', width = 6, height = 10 }: any) {\n  return (\n    <svg\n      width={width}\n      height={height}\n      viewBox=\"0 0 6 10\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <path\n        d=\"M1.4 8.56L4.67 5M1.4 1.23L4.66 4.7\"\n        stroke={fill}\n        strokeLinecap=\"square\"\n      />\n    </svg>\n  );\n}\n"
  },
  {
    "path": "website/src/components/Banner.tsx",
    "content": "import { ExternalLink } from './ExternalLink';\n\nexport function Banner() {\n  return null;\n}\n"
  },
  {
    "path": "website/src/components/Container.tsx",
    "content": "import * as React from 'react';\nimport cn from 'classnames';\nimport { HTMLProps } from 'react';\n\nexport const Container: React.FC<React.JSX.IntrinsicElements['div']> = ({\n  className,\n  ...props\n}) => {\n  return <div className={cn('container mx-auto', className)} {...props} />;\n};\n\nContainer.displayName = 'Container';\n"
  },
  {
    "path": "website/src/components/DocsPageFooter.tsx",
    "content": "import NextLink from 'next/link';\nimport { useRouter } from 'next/router';\nimport * as React from 'react';\nimport { siteConfig } from 'siteConfig';\nimport { addTagToSlug, getSlug, removeFromLast } from '../lib/docs/utils';\nimport { RouteItem } from '../lib/types';\nimport { ReactionForm } from './ReactionForm';\n\nexport interface DocsPageFooterProps {\n  route: RouteItem;\n  href: string;\n  prevRoute?: RouteItem;\n  nextRoute?: RouteItem;\n}\n\nfunction areEqual(prevProps: DocsPageFooterProps, props: DocsPageFooterProps) {\n  return prevProps.route?.path === props.route?.path;\n}\n\nexport const DocsPageFooter = React.memo<DocsPageFooterProps>(\n  ({ route, href, prevRoute, nextRoute }) => {\n    const { query } = useRouter();\n    const { tag, slug } = getSlug(query as { slug: string[] });\n    const editUrl = `${siteConfig.editUrl}${route?.path}`;\n    return (\n      <>\n        <div className=\"py-12\">\n          <div className=\"space-y-8 md:flex space-between items-center md:space-y-0 md:space-x-8\">\n            {prevRoute && prevRoute.path ? (\n              <NextLink\n                href={addTagToSlug(\n                  removeFromLast(prevRoute.path, '.'),\n                  tag as string\n                )}\n                className=\"flex-1 max-w-md block border border-gray-200 p-4 rounded-lg hover:text-blue-600 duration-150 ease-out\"\n              >\n                <span className=\"text-sm block text-gray-500 mb-1 \">\n                  Previous\n                </span>\n                <span className=\"text-xl block  font-semibold\">\n                  {prevRoute.title}\n                </span>\n              </NextLink>\n            ) : (\n              <div className=\"flex-1\" />\n            )}\n            {nextRoute && nextRoute.path ? (\n              <NextLink\n                href={addTagToSlug(\n                  removeFromLast(nextRoute.path, '.'),\n                  tag as string\n                )}\n                className=\"flex-1 max-w-md text-right block border border-gray-200  p-4 rounded-lg hover:text-blue-600 duration-150 ease-out\"\n              >\n                <span className=\"text-sm block text-gray-500 mb-1 \">Next</span>\n                <span className=\"text-xl block  font-semibold \">\n                  {nextRoute.title}\n                </span>\n              </NextLink>\n            ) : (\n              <div className=\"flex-1\" />\n            )}\n          </div>\n        </div>\n        <div className=\"border-t border-b py-8\">\n          <div className=\"\">\n            <ReactionForm />\n          </div>\n        </div>\n        <div className=\"flex my-2\">\n          <div className=\"md:flex-1 md:text-right\">\n            {tag ? (\n              <NextLink\n                href={href}\n                as={slug}\n                className=\"text-gray-600 underline\"\n              >\n                Go to the live version of this page\n              </NextLink>\n            ) : (\n              <a\n                href={editUrl}\n                target=\"_blank\"\n                rel=\"noopener noreferrer\"\n                className=\"text-gray-600 underline\"\n              >\n                Edit this page on GitHub\n              </a>\n            )}\n          </div>\n        </div>\n      </>\n    );\n  },\n  areEqual\n);\n\nDocsPageFooter.displayName = 'DocsPageFooter';\n"
  },
  {
    "path": "website/src/components/ExternalLink.tsx",
    "content": "import * as React from 'react';\n\nexport function ExternalLink(props: any) {\n  return <a {...props} rel=\"noopener\" target={props.target || '_blank'} />;\n}\n"
  },
  {
    "path": "website/src/components/Footer.tsx",
    "content": "import * as React from 'react';\nimport Link from 'next/link';\nimport { ExternalLink } from './ExternalLink';\nimport { FormiumLogo } from './FormiumLogo';\nimport { siteConfig } from 'siteConfig';\nexport interface FooterProps {}\n\nexport const Footer: React.FC<FooterProps> = props => {\n  return (\n    <div className=\"bg-gray-50 border-t border-gray-200\">\n      <div className=\"container mx-auto py-12 lg:py-16 px-4 lg:px-0 \">\n        <div className=\"lg:grid lg:grid-cols-3 lg:gap-8\">\n          <div className=\"lg:grid lg:grid-cols-3 gap-8 lg:col-span-2\">\n            <div className=\"mt-12 lg:mt-0\">\n              <h4 className=\"text-sm leading-5 font-semibold tracking-wider text-gray-400 uppercase\">\n                Resources\n              </h4>\n              <ul className=\"mt-4\">\n                <li>\n                  <Link\n                    href=\"/docs/overview\"\n                    className=\"text-base leading-6 text-gray-500 hover:text-gray-900\"\n                  >\n                    Docs\n                  </Link>\n                </li>\n                <li className=\"mt-4\">\n                  <Link\n                    href=\"/docs/tutorial\"\n                    className=\"text-base leading-6 text-gray-500 hover:text-gray-900\"\n                  >\n                    Learn\n                  </Link>\n                </li>\n                <li className=\"mt-4\">\n                  <Link\n                    href=\"/docs/guides/validation\"\n                    className=\"text-base leading-6 text-gray-500 hover:text-gray-900\"\n                  >\n                    Guides\n                  </Link>\n                </li>\n                <li className=\"mt-4\">\n                  <Link\n                    href=\"/docs/api/formik\"\n                    className=\"text-base leading-6 text-gray-500 hover:text-gray-900\"\n                  >\n                    API Reference\n                  </Link>\n                </li>\n\n                <li className=\"mt-4\">\n                  <Link\n                    href=\"/blog\"\n                    className=\"text-base leading-6 text-gray-500 hover:text-gray-900\"\n                  >\n                    Blog\n                  </Link>\n                </li>\n              </ul>\n            </div>\n            <div className=\"mt-12 lg:mt-0\">\n              <h4 className=\"text-sm leading-5 font-semibold tracking-wider text-gray-400 uppercase\">\n                Community\n              </h4>\n              <ul className=\"mt-4\">\n                <li>\n                  <Link\n                    href=\"/users\"\n                    className=\"text-base leading-6 text-gray-500 hover:text-gray-900\"\n                  >\n                    User Showcase\n                  </Link>\n                </li>\n                <li className=\"mt-4\">\n                  <ExternalLink\n                    href=\"https://opencollective.com/formik\"\n                    className=\"text-base leading-6 text-gray-500 hover:text-gray-900\"\n                  >\n                    Funding\n                  </ExternalLink>\n                </li>\n                <li className=\"mt-4\">\n                  <ExternalLink\n                    href={siteConfig.discordUrl}\n                    className=\"text-base leading-6 text-gray-500 hover:text-gray-900\"\n                  >\n                    Community Chat\n                  </ExternalLink>\n                </li>\n                <li className=\"mt-4\">\n                  <ExternalLink\n                    href={`${siteConfig.repoUrl}/discussions`}\n                    className=\"text-base leading-6 text-gray-500 hover:text-gray-900\"\n                  >\n                    Project Forum\n                  </ExternalLink>\n                </li>\n                <li className=\"mt-4\">\n                  <ExternalLink\n                    href={`${siteConfig.repoUrl}/releases`}\n                    className=\"text-base leading-6 text-gray-500 hover:text-gray-900\"\n                  >\n                    Releases\n                  </ExternalLink>\n                </li>\n                <li className=\"mt-4\">\n                  <ExternalLink\n                    className=\"github-button\"\n                    href=\"https://github.com/formium/formik\"\n                    data-color-scheme=\"no-preference: light; light: light; dark: dark;\"\n                    data-icon=\"octicon-star\"\n                    data-size=\"large\"\n                    data-show-count=\"true\"\n                    aria-label=\"Star formik/formik on GitHub\"\n                  >\n                    Star\n                  </ExternalLink>\n                </li>\n              </ul>\n            </div>\n            <div className=\"mt-12 lg:mt-0\">\n              <h4 className=\"text-sm leading-5 font-semibold tracking-wider text-gray-400 uppercase\">\n                About Formium\n              </h4>\n              <ul className=\"mt-4\">\n                <li className=\"mt-4\">\n                  <ExternalLink\n                    href=\"https://formium.io?utm_source=formik-site&utm_medium=footer-link&utm_campaign=formik-website\"\n                    className=\"text-base leading-6 text-gray-500 hover:text-gray-900\"\n                  >\n                    Home\n                  </ExternalLink>\n                </li>\n                <li className=\"mt-4\">\n                  <ExternalLink\n                    href=\"https://github.com/formium\"\n                    className=\"text-base leading-6 text-gray-500 hover:text-gray-900\"\n                  >\n                    GitHub\n                  </ExternalLink>\n                </li>\n                <li className=\"mt-4\">\n                  <ExternalLink\n                    href=\"https://twitter.com/formiumhq\"\n                    className=\"text-base leading-6 text-gray-500 hover:text-gray-900\"\n                  >\n                    Twitter\n                  </ExternalLink>\n                </li>\n                <li className=\"mt-4\">\n                  <ExternalLink\n                    href=\"https://formium.io/contact/sales?utm_source=formik-site&utm_medium=footer-link&utm_campaign=formik-website\"\n                    className=\"text-base leading-6 text-gray-500 hover:text-gray-900\"\n                  >\n                    Contact Sales\n                  </ExternalLink>\n                </li>\n              </ul>\n            </div>\n          </div>\n          <div className=\"mt-8 lg:mt-0\">\n            <h4 className=\"text-sm leading-5 font-semibold tracking-wider text-gray-400 uppercase\">\n              Subscribe to our newsletter\n            </h4>\n            <p className=\"mt-4 text-gray-500 text-base leading-6\">\n              The latest Formik news, articles, and resources, sent to your\n              inbox.\n            </p>\n            <form\n              action=\"https://api.formik.com/submit/palmerhq/formik-newsletter\"\n              method=\"post\"\n              className=\"mt-4 lg:flex lg:max-w-md\"\n            >\n              <input type=\"hidden\" name=\"_honeypot\" value=\"\" />\n              <input\n                aria-label=\"Email address\"\n                type=\"email\"\n                name=\"email\"\n                required={true}\n                className=\"appearance-none w-full px-4 py-2 outline-none border border-gray-300 text-base leading-6 rounded-md text-gray-900 bg-white placeholder-gray-500 focus:outline-none focus:ring focus:ring-blue focus:border-blue-300 transition duration-150 ease-in-out lg:max-w-xs\"\n                placeholder=\"Enter your email\"\n              />\n              <span className=\"mt-2 lg:mt-0 lg:ml-3 flex-shrink-0 inline-flex rounded-md shadow-sm\">\n                <button\n                  type=\"button\"\n                  className=\"inline-flex items-center px-4 py-2 border border-transparent text-base leading-6 font-medium rounded-md text-white bg-blue-600 hover:bg-blue-500 focus:outline-none focus:border-blue-700 focus:ring focus:ring-blue active:bg-blue-700 transition ease-in-out duration-150\"\n                >\n                  Notify me\n                </button>\n              </span>\n            </form>\n          </div>\n        </div>\n        <div className=\"mt-8 border-t border-gray-200 pt-8 lg:flex lg:items-center lg:justify-between\">\n          <div className=\"mt-8 text-base leading-6  lg:mt-0 lg:order-1\">\n            <ExternalLink href=\"https://formium.io?utm_source=formik-site&utm_medium=footer-logo&utm_campaign=formik-website\">\n              <FormiumLogo />\n            </ExternalLink>\n            <div className=\"text-gray-400 text-xs pt-1\">\n              Copyright &copy; 2020 Formium, Inc. All rights reserved.{' '}\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  );\n};\n\nFooter.displayName = 'Footer';\n"
  },
  {
    "path": "website/src/components/FormiumLogo.tsx",
    "content": "import * as React from 'react';\n\nexport const FormiumLogo: React.FC<React.JSX.IntrinsicElements['svg']> = props => {\n  return (\n    <svg\n      width={'101px'}\n      height=\"28px\"\n      viewBox={'0 0 303 84'}\n      fill=\"currentColor\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...props}\n    >\n      <path\n        d=\"M83.37 59C83.0567 59 82.7747 58.8903 82.524 58.671C82.3047 58.4203 82.195 58.1383 82.195 57.825V27.322C82.195 26.9773 82.3047 26.6953 82.524 26.476C82.7434 26.2253 83.0254 26.1 83.37 26.1H105.225C105.57 26.1 105.852 26.2253 106.071 26.476C106.322 26.6953 106.447 26.9773 106.447 27.322V32.304C106.447 32.6487 106.322 32.9307 106.071 33.15C105.852 33.3693 105.57 33.479 105.225 33.479H90.843V40.012H104.285C104.63 40.012 104.912 40.1373 105.131 40.388C105.382 40.6073 105.507 40.8893 105.507 41.234V46.216C105.507 46.5607 105.382 46.8427 105.131 47.062C104.912 47.2813 104.63 47.391 104.285 47.391H90.843V57.825C90.843 58.1383 90.7334 58.4203 90.514 58.671C90.2947 58.8903 90.0127 59 89.668 59H83.37ZM124.787 59.47C120.338 59.47 116.828 58.389 114.259 56.227C111.69 54.065 110.327 50.8847 110.17 46.686C110.139 45.8087 110.123 44.4613 110.123 42.644C110.123 40.8267 110.139 39.4637 110.17 38.555C110.295 34.419 111.658 31.2387 114.259 29.014C116.891 26.758 120.4 25.63 124.787 25.63C129.142 25.63 132.62 26.758 135.221 29.014C137.853 31.2387 139.232 34.419 139.357 38.555C139.42 40.3723 139.451 41.7353 139.451 42.644C139.451 43.584 139.42 44.9313 139.357 46.686C139.2 50.8847 137.837 54.065 135.268 56.227C132.73 58.389 129.236 59.47 124.787 59.47ZM124.787 52.42C126.416 52.42 127.717 51.9343 128.688 50.963C129.659 49.9603 130.176 48.4407 130.239 46.404C130.302 44.5867 130.333 43.2863 130.333 42.503C130.333 41.7197 130.302 40.4507 130.239 38.696C130.176 36.6593 129.659 35.1553 128.688 34.184C127.717 33.1813 126.416 32.68 124.787 32.68C123.126 32.68 121.81 33.1813 120.839 34.184C119.868 35.1553 119.351 36.6593 119.288 38.696C119.257 39.5733 119.241 40.8423 119.241 42.503C119.241 44.195 119.257 45.4953 119.288 46.404C119.351 48.4407 119.868 49.9603 120.839 50.963C121.81 51.9343 123.126 52.42 124.787 52.42ZM145.93 59C145.616 59 145.334 58.8903 145.084 58.671C144.864 58.4203 144.755 58.1383 144.755 57.825V27.322C144.755 26.9773 144.864 26.6953 145.084 26.476C145.303 26.2253 145.585 26.1 145.93 26.1H158.855C162.991 26.1 166.218 27.04 168.537 28.92C170.887 30.8 172.062 33.4477 172.062 36.863C172.062 39.0563 171.545 40.9207 170.511 42.456C169.508 43.9913 168.114 45.182 166.328 46.028L172.673 57.496C172.767 57.684 172.814 57.8563 172.814 58.013C172.814 58.2637 172.72 58.4987 172.532 58.718C172.344 58.906 172.109 59 171.827 59H165.2C164.291 59 163.649 58.577 163.273 57.731L158.103 47.532H153.591V57.825C153.591 58.1697 153.465 58.4517 153.215 58.671C152.995 58.8903 152.713 59 152.369 59H145.93ZM158.808 40.623C160.155 40.623 161.173 40.294 161.863 39.636C162.583 38.9467 162.944 38.0067 162.944 36.816C162.944 35.6253 162.583 34.6697 161.863 33.949C161.173 33.2283 160.155 32.868 158.808 32.868H153.591V40.623H158.808ZM178.656 59C178.312 59 178.014 58.8903 177.763 58.671C177.544 58.4517 177.434 58.1697 177.434 57.825V27.322C177.434 26.9773 177.544 26.6953 177.763 26.476C178.014 26.2253 178.312 26.1 178.656 26.1H183.967C184.751 26.1 185.315 26.4447 185.659 27.134L193.743 41.61L201.874 27.134C202.219 26.4447 202.783 26.1 203.566 26.1H208.877C209.222 26.1 209.504 26.2253 209.723 26.476C209.974 26.6953 210.099 26.9773 210.099 27.322V57.825C210.099 58.1697 209.974 58.4517 209.723 58.671C209.504 58.8903 209.222 59 208.877 59H202.908C202.595 59 202.313 58.8903 202.062 58.671C201.843 58.4203 201.733 58.1383 201.733 57.825V40.717L196.657 50.023C196.25 50.7437 195.702 51.104 195.012 51.104H192.474C191.848 51.104 191.299 50.7437 190.829 50.023L185.8 40.717V57.825C185.8 58.1697 185.675 58.4517 185.424 58.671C185.205 58.8903 184.923 59 184.578 59H178.656ZM217.669 59C217.356 59 217.074 58.8903 216.823 58.671C216.604 58.4203 216.494 58.1383 216.494 57.825V27.275C216.494 26.9303 216.604 26.6483 216.823 26.429C217.074 26.2097 217.356 26.1 217.669 26.1H224.39C224.735 26.1 225.017 26.2097 225.236 26.429C225.455 26.6483 225.565 26.9303 225.565 27.275V57.825C225.565 58.1383 225.455 58.4203 225.236 58.671C225.017 58.8903 224.735 59 224.39 59H217.669ZM245.921 59.47C241.471 59.47 237.978 58.389 235.44 56.227C232.933 54.065 231.68 50.822 231.68 46.498V27.322C231.68 26.9773 231.789 26.6953 232.009 26.476C232.228 26.2253 232.51 26.1 232.855 26.1H239.294C239.638 26.1 239.92 26.2253 240.14 26.476C240.39 26.6953 240.516 26.9773 240.516 27.322V46.404C240.516 48.3467 240.97 49.8037 241.879 50.775C242.819 51.7463 244.15 52.232 245.874 52.232C247.597 52.232 248.913 51.7463 249.822 50.775C250.762 49.7723 251.232 48.3153 251.232 46.404V27.322C251.232 26.9773 251.341 26.6953 251.561 26.476C251.811 26.2253 252.109 26.1 252.454 26.1H258.846C259.19 26.1 259.472 26.2253 259.692 26.476C259.942 26.6953 260.068 26.9773 260.068 27.322V46.498C260.068 50.822 258.814 54.065 256.308 56.227C253.801 58.389 250.339 59.47 245.921 59.47ZM267.378 59C267.033 59 266.736 58.8903 266.485 58.671C266.266 58.4517 266.156 58.1697 266.156 57.825V27.322C266.156 26.9773 266.266 26.6953 266.485 26.476C266.736 26.2253 267.033 26.1 267.378 26.1H272.689C273.472 26.1 274.036 26.4447 274.381 27.134L282.465 41.61L290.596 27.134C290.941 26.4447 291.505 26.1 292.288 26.1H297.599C297.944 26.1 298.226 26.2253 298.445 26.476C298.696 26.6953 298.821 26.9773 298.821 27.322V57.825C298.821 58.1697 298.696 58.4517 298.445 58.671C298.226 58.8903 297.944 59 297.599 59H291.63C291.317 59 291.035 58.8903 290.784 58.671C290.565 58.4203 290.455 58.1383 290.455 57.825V40.717L285.379 50.023C284.972 50.7437 284.423 51.104 283.734 51.104H281.196C280.569 51.104 280.021 50.7437 279.551 50.023L274.522 40.717V57.825C274.522 58.1697 274.397 58.4517 274.146 58.671C273.927 58.8903 273.645 59 273.3 59H267.378Z\"\n        fill=\"currentColor\"\n      />\n      <path\n        d=\"M38.8688 0L48.5628 5.57462L10.3866 27.5283L0.692639 21.9536L38.8688 0Z\"\n        fill=\"currentColor\"\n      />\n      <path\n        d=\"M48.9537 6.74507L11.0179 28.5506L11.0166 39.5831L48.9525 17.7776L48.9537 6.74507Z\"\n        fill=\"currentColor\"\n      />\n      <path\n        d=\"M33.6985 28.2757L11.0976 41.2669L11.0964 52.2997L33.6972 39.3084L33.6985 28.2757Z\"\n        fill=\"currentColor\"\n      />\n      <path\n        d=\"M25.0346 45.7171L11.0441 53.7592L11.0428 64.7922L25.0334 56.7501L25.0346 45.7171Z\"\n        fill=\"currentColor\"\n      />\n      <path\n        d=\"M0.00375833 23.0173L9.75474 28.622L9.75099 39.6571L0 34.0525L0.00375833 23.0173Z\"\n        fill=\"currentColor\"\n      />\n      <path\n        d=\"M0.0965426 35.6574L9.72924 41.1941L9.72548 52.2292L0.0927843 46.6926L0.0965426 35.6574Z\"\n        fill=\"currentColor\"\n      />\n      <path\n        d=\"M0.0922985 48.2214L9.72824 53.76L9.72423 65.523L0.0882924 59.9844L0.0922985 48.2214Z\"\n        fill=\"currentColor\"\n      />\n      <path\n        d=\"M21.5645 84L11.8705 78.4254L49.6134 56.7209L59.3073 62.2955L21.5645 84Z\"\n        fill=\"currentColor\"\n      />\n      <path\n        d=\"M11.102 77.4713L48.9809 55.6985L48.9821 44.666L11.1032 66.4388L11.102 77.4713Z\"\n        fill=\"currentColor\"\n      />\n      <path\n        d=\"M26.3002 55.9735L48.901 42.9822L48.9023 31.9495L26.3014 44.9407L26.3002 55.9735Z\"\n        fill=\"currentColor\"\n      />\n      <path\n        d=\"M34.9641 38.532L48.9546 30.4899L48.9558 19.457L34.9653 27.4991L34.9641 38.532Z\"\n        fill=\"currentColor\"\n      />\n      <path\n        d=\"M59.9962 61.3058L50.2453 55.7012L50.249 44.666L60 50.2706L59.9962 61.3058Z\"\n        fill=\"currentColor\"\n      />\n      <path\n        d=\"M59.9041 48.5947L50.2714 43.058L50.2751 32.0229L59.9078 37.5595L59.9041 48.5947Z\"\n        fill=\"currentColor\"\n      />\n      <path\n        d=\"M59.9077 36.0307L50.2717 30.4921L50.2756 18.9405L59.9116 24.479L59.9077 36.0307Z\"\n        fill=\"currentColor\"\n      />\n    </svg>\n  );\n};\n"
  },
  {
    "path": "website/src/components/Highlight2.tsx",
    "content": "import * as React from 'react';\nimport Highlight, { defaultProps } from 'prism-react-renderer';\nimport { TWButton } from './TWButton';\nimport { useClipboard } from './useClipboard';\n\n// Original: https://raw.githubusercontent.com/PrismJS/prism-themes/master/themes/prism-ghcolors.css\n\n/*:: import type { PrismTheme } from '../src/types' */\n\nconst theme /*: PrismTheme */ = {\n  plain: {\n    color: '#293742',\n    borderRadius: 12,\n    fontFamily: `SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace`,\n    fontSize: 14,\n    lineHeight: '1.5',\n  },\n  styles: [\n    {\n      types: ['comment', 'prolog', 'doctype', 'cdata'],\n      style: {\n        color: '#A7B6C2',\n        fontStyle: 'italic',\n      },\n    },\n    {\n      types: ['namespace'],\n      style: {\n        opacity: 0.7,\n      },\n    },\n    {\n      types: ['string', 'attr-value'],\n      style: {\n        color: '#DB2C6F',\n      },\n    },\n    {\n      types: ['punctuation', 'operator'],\n      style: {\n        color: '#394B59',\n      },\n    },\n    {\n      types: [\n        'entity',\n        'url',\n        'symbol',\n        'number',\n        'boolean',\n        'variable',\n        'constant',\n        'property',\n        'regex',\n        'inserted',\n      ],\n      style: {\n        color: '#36acaa',\n      },\n    },\n    {\n      types: ['atrule', 'keyword', 'attr-name', 'selector'],\n      style: {\n        color: '#00B3A4',\n      },\n    },\n    {\n      types: ['function', 'deleted', 'tag'],\n      style: {\n        color: '#DB2C6F',\n      },\n    },\n    {\n      types: ['function-variable'],\n      style: {\n        color: '#634DBF',\n      },\n    },\n    {\n      types: ['tag', 'selector', 'keyword'],\n      style: {\n        color: '#1a56db',\n      },\n    },\n  ],\n};\n\nconst Code = ({\n  children,\n  codeString,\n  className = 'language-js',\n  ...props\n}: any) => {\n  const language = className.replace(/language-/, '');\n  const [hasCopied, onCopy] = useClipboard(children.trim());\n  return (\n    <>\n      {/* @ts-ignore */}\n      <Highlight\n        {...defaultProps}\n        code={children.trim()}\n        language={language}\n        theme={theme as any}\n      >\n        {({ className, style, tokens, getLineProps, getTokenProps }) => (\n          <div className=\"relative\">\n            <div className=\"absolute top-0 right-0 p-2\">\n              <TWButton size=\"xs\" className=\"font-sans\" onClick={onCopy}>\n                {hasCopied ? 'Copied!' : 'Copy'}\n              </TWButton>\n            </div>\n            <pre\n              className={\n                className + ' bg-gray-50 pb-4 pt-4 pr-4 overflow-scroll mb-4'\n              }\n              style={{\n                ...style,\n                border: '1px solid #eee',\n                fontSize: 13,\n                lineHeight: '1.5',\n              }}\n            >\n              {tokens.map((line, i) => (\n                <div key={i} {...getLineProps({ line, key: i })}>\n                  {tokens.length > 1 ? (\n                    <span\n                      aria-hidden=\"true\"\n                      className=\"inline-block w-5 mx-2 text-right text-gray-300 select-none\"\n                    >\n                      {i + 1}\n                    </span>\n                  ) : (\n                    <span className=\"w-5 mx-2\" />\n                  )}{' '}\n                  {line.map((token, key) => (\n                    <span key={key} {...getTokenProps({ token, key })} />\n                  ))}\n                </div>\n              ))}\n            </pre>\n          </div>\n        )}\n      </Highlight>\n    </>\n  );\n};\n\nexport default Code;\n"
  },
  {
    "path": "website/src/components/LayoutDocs.tsx",
    "content": "import * as React from 'react';\nimport { MDXProvider } from '@mdx-js/react';\nimport { Banner } from 'components/Banner';\nimport { Nav } from 'components/Nav';\nimport { Sidebar } from 'components/Sidebar';\nimport { SidebarCategory } from 'components/SidebarCategory';\nimport { SidebarHeading } from 'components/SidebarHeading';\nimport { SidebarMobile } from 'components/SidebarMobile';\nimport { SidebarPost } from 'components/SidebarPost';\nimport { Sticky } from 'components/Sticky';\nimport { useIsMobile } from 'components/useIsMobile';\nimport { findRouteByPath } from 'lib/docs/findRouteByPath';\nimport { removeFromLast } from 'lib/docs/utils';\nimport { getRouteContext } from 'lib/get-route-context';\nimport { Page, RouteItem } from 'lib/types';\nimport { useRouter } from 'next/router';\nimport { Toc } from './Toc';\nimport s from './markdown.module.css';\nimport { Footer } from './Footer';\nimport { DocsPageFooter } from './DocsPageFooter';\nimport { Seo } from './Seo';\nimport MDXComponents from './MDXComponents';\nimport Head from 'next/head';\nimport { getManifest } from 'manifests/getManifest';\nimport { Inter } from 'next/font/google';\n\n// If loading a variable font, you don't need to specify the font weight\nconst inter = Inter({ subsets: ['latin'] });\ninterface DocsProps {\n  page: Page;\n  routes: RouteItem[];\n  route: RouteItem;\n  children: React.ReactNode;\n  meta?: any;\n}\n\nconst getSlugAndTag = (path: string) => {\n  const parts = path.split('/');\n\n  if (parts[2] === '1.5.8' || parts[2] === '2.1.4') {\n    return { tag: parts[2], slug: `/docs/${parts.slice(2).join('/')}` };\n  }\n  return { slug: path };\n};\n\nconst addTagToSlug = (slug: string, tag?: string) => {\n  return tag ? `/docs/${tag}/${slug.replace('/docs/', '')}` : slug;\n};\n\nexport const LayoutDocs: React.FC<DocsProps> = props => {\n  const router = useRouter();\n  const { slug, tag } = getSlugAndTag(router.asPath);\n  const { routes } = getManifest(tag);\n  const _route = findRouteByPath(removeFromLast(slug, '#'), routes);\n  // @ts-ignore\n  const isMobile = useIsMobile();\n  const { route, prevRoute, nextRoute } = getRouteContext(_route, routes);\n  const title = route && `${route.title}`;\n  return (\n    <>\n      {tag && (\n        <Head>\n          <meta name=\"robots\" content=\"noindex\" />\n        </Head>\n      )}\n      <div className={inter.className}>\n        <Banner />\n        {isMobile ? (\n          <Nav />\n        ) : (\n          <Sticky>\n            <Nav />\n          </Sticky>\n        )}\n        <Seo\n          title={title || props.meta.title}\n          description={props.meta.description}\n        />\n        <div className=\"block\">\n          <>\n            <Sticky shadow>\n              <SidebarMobile>\n                <SidebarRoutes isMobile={true} routes={routes} />\n              </SidebarMobile>\n            </Sticky>\n\n            <div className=\"container mx-auto pb-12 pt-6 content\">\n              <div className=\"flex relative\">\n                <Sidebar fixed>\n                  <SidebarRoutes routes={routes} />\n                </Sidebar>\n\n                <div className={s['markdown'] + ' w-full docs'}>\n                  <h1>{props.meta.title}</h1>\n                  <MDXProvider components={MDXComponents}>\n                    {props.children}\n                  </MDXProvider>\n                  <DocsPageFooter\n                    href={route?.path || ''}\n                    route={route!}\n                    prevRoute={prevRoute}\n                    nextRoute={nextRoute}\n                  />\n                </div>\n                {!route?.path?.includes('example') ? (\n                  <div\n                    className=\"hidden xl:block ml-10 flex-shrink-0\"\n                    style={{ width: 200 }}\n                  >\n                    <div className=\"sticky top-24 \">\n                      <h4 className=\"font-semibold uppercase text-sm mb-2 mt-2 text-gray-500\">\n                        On this page\n                      </h4>\n                      <Toc />\n                    </div>\n                  </div>\n                ) : null}\n              </div>\n            </div>\n          </>\n        </div>\n      </div>\n      <Footer />\n      <style jsx>{`\n        .docs {\n          min-width: calc(100% - 300px - 1rem - 200px);\n        }\n      `}</style>\n    </>\n  );\n};\n\nfunction getCategoryPath(routes: RouteItem[]) {\n  const route = routes.find(r => r.path);\n  return route && removeFromLast(route.path!, '/');\n}\n\nfunction SidebarRoutes({\n  isMobile,\n  routes: currentRoutes,\n  level = 1,\n}: {\n  isMobile?: boolean;\n  routes: RouteItem[];\n  level?: number;\n}) {\n  const { asPath } = useRouter();\n  let { slug, tag } = getSlugAndTag(asPath);\n  return (currentRoutes as RouteItem[]).map(\n    ({ path, title, routes, heading, open }) => {\n      if (routes) {\n        const pathname = getCategoryPath(routes);\n\n        const selected = slug.startsWith(pathname as any);\n\n        const opened = selected || isMobile ? false : open;\n\n        if (heading) {\n          return (\n            <SidebarHeading key={pathname} title={title}>\n              <SidebarRoutes\n                isMobile={isMobile}\n                routes={routes}\n                level={level + 1}\n              />\n            </SidebarHeading>\n          );\n        }\n\n        return (\n          <SidebarCategory\n            key={pathname}\n            isMobile={isMobile}\n            level={level}\n            title={title}\n            selected={selected}\n            opened={opened}\n          >\n            <SidebarRoutes\n              isMobile={isMobile}\n              routes={routes}\n              level={level + 1}\n            />\n          </SidebarCategory>\n        );\n      }\n\n      const pagePath = removeFromLast(path!, '.');\n      const pathname = addTagToSlug(pagePath, tag!);\n\n      const selected = slug.startsWith(pagePath);\n      const route = { href: pagePath, path, title, pathname, selected };\n\n      return (\n        <SidebarPost\n          key={title}\n          isMobile={isMobile}\n          level={level}\n          route={route}\n        />\n      );\n    }\n  ) as any;\n}\n\nLayoutDocs.displayName = 'LayoutDocs';\n"
  },
  {
    "path": "website/src/components/Logo.tsx",
    "content": "import * as React from 'react';\n\nexport function Logo() {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=\"182\"\n      height=\"41\"\n      fill=\"none\"\n      viewBox=\"0 0 367 84\"\n    >\n      <path\n        fill=\"#172B4D\"\n        d=\"M83.3701 59C83.0567 59 82.7747 58.8903 82.5241 58.671C82.3047 58.4203 82.1951 58.1383 82.1951 57.825V27.322C82.1951 26.9773 82.3047 26.6953 82.5241 26.476C82.7434 26.2253 83.0254 26.1 83.3701 26.1H105.225C105.57 26.1 105.852 26.2253 106.071 26.476C106.322 26.6953 106.447 26.9773 106.447 27.322V32.304C106.447 32.6487 106.322 32.9307 106.071 33.15C105.852 33.3693 105.57 33.479 105.225 33.479H90.8431V40.012H104.285C104.63 40.012 104.912 40.1373 105.131 40.388C105.382 40.6073 105.507 40.8893 105.507 41.234V46.216C105.507 46.5607 105.382 46.8427 105.131 47.062C104.912 47.2813 104.63 47.391 104.285 47.391H90.8431V57.825C90.8431 58.1383 90.7334 58.4203 90.5141 58.671C90.2947 58.8903 90.0127 59 89.6681 59H83.3701Z\"\n      />\n      <path\n        fill=\"#172B4D\"\n        d=\"M124.787 59.47C120.338 59.47 116.828 58.389 114.259 56.227C111.69 54.065 110.327 50.8847 110.17 46.686C110.139 45.8087 110.123 44.4613 110.123 42.644C110.123 40.8267 110.139 39.4637 110.17 38.555C110.295 34.419 111.658 31.2387 114.259 29.014C116.891 26.758 120.4 25.63 124.787 25.63C129.142 25.63 132.62 26.758 135.221 29.014C137.853 31.2387 139.232 34.419 139.357 38.555C139.42 40.3723 139.451 41.7353 139.451 42.644C139.451 43.584 139.42 44.9313 139.357 46.686C139.2 50.8847 137.837 54.065 135.268 56.227C132.73 58.389 129.236 59.47 124.787 59.47ZM124.787 52.42C126.416 52.42 127.717 51.9343 128.688 50.963C129.659 49.9603 130.176 48.4407 130.239 46.404C130.302 44.5867 130.333 43.2863 130.333 42.503C130.333 41.7197 130.302 40.4507 130.239 38.696C130.176 36.6593 129.659 35.1553 128.688 34.184C127.717 33.1813 126.416 32.68 124.787 32.68C123.126 32.68 121.81 33.1813 120.839 34.184C119.868 35.1553 119.351 36.6593 119.288 38.696C119.257 39.5733 119.241 40.8423 119.241 42.503C119.241 44.195 119.257 45.4953 119.288 46.404C119.351 48.4407 119.868 49.9603 120.839 50.963C121.81 51.9343 123.126 52.42 124.787 52.42Z\"\n      />\n      <path\n        fill=\"#172B4D\"\n        d=\"M145.93 59C145.616 59 145.334 58.8903 145.084 58.671C144.864 58.4203 144.755 58.1383 144.755 57.825V27.322C144.755 26.9773 144.864 26.6953 145.084 26.476C145.303 26.2253 145.585 26.1 145.93 26.1H158.855C162.991 26.1 166.218 27.04 168.537 28.92C170.887 30.8 172.062 33.4477 172.062 36.863C172.062 39.0563 171.545 40.9207 170.511 42.456C169.508 43.9913 168.114 45.182 166.328 46.028L172.673 57.496C172.767 57.684 172.814 57.8563 172.814 58.013C172.814 58.2637 172.72 58.4987 172.532 58.718C172.344 58.906 172.109 59 171.827 59H165.2C164.291 59 163.649 58.577 163.273 57.731L158.103 47.532H153.591V57.825C153.591 58.1697 153.465 58.4517 153.215 58.671C152.995 58.8903 152.713 59 152.369 59H145.93ZM158.808 40.623C160.155 40.623 161.173 40.294 161.863 39.636C162.583 38.9467 162.944 38.0067 162.944 36.816C162.944 35.6253 162.583 34.6697 161.863 33.949C161.173 33.2283 160.155 32.868 158.808 32.868H153.591V40.623H158.808Z\"\n      />\n      <path\n        fill=\"#172B4D\"\n        d=\"M178.656 59C178.312 59 178.014 58.8903 177.763 58.671C177.544 58.4517 177.434 58.1697 177.434 57.825V27.322C177.434 26.9773 177.544 26.6953 177.763 26.476C178.014 26.2253 178.312 26.1 178.656 26.1H183.967C184.751 26.1 185.315 26.4447 185.659 27.134L193.743 41.61L201.874 27.134C202.219 26.4447 202.783 26.1 203.566 26.1H208.877C209.222 26.1 209.504 26.2253 209.723 26.476C209.974 26.6953 210.099 26.9773 210.099 27.322V57.825C210.099 58.1697 209.974 58.4517 209.723 58.671C209.504 58.8903 209.222 59 208.877 59H202.908C202.595 59 202.313 58.8903 202.062 58.671C201.843 58.4203 201.733 58.1383 201.733 57.825V40.717L196.657 50.023C196.25 50.7437 195.702 51.104 195.012 51.104H192.474C191.848 51.104 191.299 50.7437 190.829 50.023L185.8 40.717V57.825C185.8 58.1697 185.675 58.4517 185.424 58.671C185.205 58.8903 184.923 59 184.578 59H178.656Z\"\n      />\n      <path\n        fill=\"#172B4D\"\n        d=\"M217.669 59C217.356 59 217.074 58.8903 216.823 58.671C216.604 58.4203 216.494 58.1383 216.494 57.825V27.275C216.494 26.9303 216.604 26.6483 216.823 26.429C217.074 26.2097 217.356 26.1 217.669 26.1H224.39C224.735 26.1 225.017 26.2097 225.236 26.429C225.455 26.6483 225.565 26.9303 225.565 27.275V57.825C225.565 58.1383 225.455 58.4203 225.236 58.671C225.017 58.8903 224.735 59 224.39 59H217.669Z\"\n      />\n      <path\n        fill=\"#172B4D\"\n        d=\"M233.137 59C232.823 59 232.541 58.8903 232.291 58.671C232.071 58.4203 231.962 58.1383 231.962 57.825V27.322C231.962 26.9773 232.071 26.6953 232.291 26.476C232.51 26.2253 232.792 26.1 233.137 26.1H239.435C239.779 26.1 240.061 26.2253 240.281 26.476C240.5 26.6953 240.61 26.9773 240.61 27.322V37.568L248.929 27.04C249.273 26.4133 249.884 26.1 250.762 26.1H257.953C258.203 26.1 258.423 26.2097 258.611 26.429C258.83 26.617 258.94 26.8363 258.94 27.087C258.94 27.3377 258.877 27.5257 258.752 27.651L247.801 41.845L259.645 57.449C259.77 57.5743 259.833 57.7623 259.833 58.013C259.833 58.2637 259.723 58.4987 259.504 58.718C259.316 58.906 259.081 59 258.799 59H251.42C250.918 59 250.511 58.906 250.198 58.718C249.884 58.4987 249.665 58.2793 249.54 58.06L240.61 46.592V57.825C240.61 58.1383 240.5 58.4203 240.281 58.671C240.061 58.8903 239.779 59 239.435 59H233.137Z\"\n      />\n      <path\n        fill=\"#4C9AFF\"\n        d=\"M282.3 59.47C279.01 59.47 276.534 58.4047 274.874 56.274C273.244 54.1433 272.367 51.4487 272.242 48.19L272.195 46.78L272.242 45.37C272.367 42.1427 273.26 39.4637 274.921 37.333C276.581 35.171 279.041 34.09 282.3 34.09C285.558 34.09 288.096 35.2493 289.914 37.568V26.711C289.914 26.3977 290.008 26.147 290.196 25.959C290.415 25.7397 290.681 25.63 290.995 25.63H293.11C293.423 25.63 293.674 25.7397 293.862 25.959C294.081 26.147 294.191 26.3977 294.191 26.711V57.919C294.191 58.2323 294.081 58.4987 293.862 58.718C293.674 58.906 293.423 59 293.11 59H291.089C290.775 59 290.525 58.906 290.337 58.718C290.149 58.4987 290.055 58.2323 290.055 57.919V55.898C288.269 58.2793 285.684 59.47 282.3 59.47ZM283.193 55.804C285.386 55.804 287.031 55.0833 288.128 53.642C289.224 52.1693 289.82 50.4303 289.914 48.425C289.945 48.0803 289.961 47.485 289.961 46.639C289.961 45.7617 289.945 45.1507 289.914 44.806C289.851 42.8947 289.24 41.2497 288.081 39.871C286.953 38.461 285.323 37.756 283.193 37.756C280.937 37.756 279.292 38.461 278.258 39.871C277.224 41.281 276.66 43.1297 276.566 45.417L276.519 46.78C276.519 52.796 278.743 55.804 283.193 55.804Z\"\n      />\n      <path\n        fill=\"#4C9AFF\"\n        d=\"M309.193 59.47C305.746 59.47 303.083 58.4987 301.203 56.556C299.354 54.6133 298.367 52.0283 298.242 48.801L298.195 46.78L298.242 44.759C298.367 41.5317 299.37 38.9467 301.25 37.004C303.161 35.0613 305.809 34.09 309.193 34.09C312.577 34.09 315.209 35.0613 317.089 37.004C319 38.9467 320.019 41.5317 320.144 44.759C320.207 45.4483 320.238 46.122 320.238 46.78C320.238 47.438 320.207 48.1117 320.144 48.801C320.019 52.0283 319.016 54.6133 317.136 56.556C315.287 58.4987 312.64 59.47 309.193 59.47ZM309.193 55.945C311.198 55.945 312.781 55.3183 313.94 54.065C315.131 52.7803 315.773 50.9473 315.867 48.566C315.898 48.2527 315.914 47.6573 315.914 46.78C315.914 45.9027 315.898 45.3073 315.867 44.994C315.773 42.6127 315.131 40.7953 313.94 39.542C312.781 38.2573 311.198 37.615 309.193 37.615C307.188 37.615 305.59 38.2573 304.399 39.542C303.24 40.7953 302.613 42.6127 302.519 44.994L302.472 46.78L302.519 48.566C302.613 50.9473 303.24 52.7803 304.399 54.065C305.59 55.3183 307.188 55.945 309.193 55.945Z\"\n      />\n      <path\n        fill=\"#4C9AFF\"\n        d=\"M333.949 59.47C330.596 59.47 327.98 58.53 326.1 56.65C324.22 54.7387 323.233 52.0753 323.139 48.66L323.092 46.78L323.139 44.9C323.233 41.4847 324.22 38.837 326.1 36.957C327.98 35.0457 330.596 34.09 333.949 34.09C336.205 34.09 338.1 34.4973 339.635 35.312C341.202 36.0953 342.361 37.0823 343.113 38.273C343.897 39.4637 344.32 40.6543 344.382 41.845C344.414 42.127 344.304 42.3777 344.053 42.597C343.834 42.8163 343.583 42.926 343.301 42.926H341.233C340.92 42.926 340.685 42.8633 340.529 42.738C340.372 42.5813 340.215 42.315 340.059 41.939C339.495 40.4037 338.711 39.3227 337.709 38.696C336.737 38.038 335.5 37.709 333.996 37.709C332.022 37.709 330.455 38.32 329.296 39.542C328.136 40.764 327.51 42.6283 327.416 45.135L327.368 46.78L327.416 48.425C327.51 50.9317 328.136 52.796 329.296 54.018C330.455 55.24 332.022 55.851 333.996 55.851C335.531 55.851 336.784 55.5377 337.756 54.911C338.727 54.253 339.495 53.1563 340.059 51.621C340.215 51.245 340.372 50.9943 340.529 50.869C340.685 50.7123 340.92 50.634 341.233 50.634H343.301C343.583 50.634 343.834 50.7437 344.053 50.963C344.304 51.1823 344.414 51.433 344.382 51.715C344.32 52.8743 343.897 54.0493 343.113 55.24C342.361 56.4307 341.202 57.4333 339.635 58.248C338.1 59.0627 336.205 59.47 333.949 59.47Z\"\n      />\n      <path\n        fill=\"#4C9AFF\"\n        d=\"M356.379 59.47C354.217 59.47 352.384 59.1253 350.88 58.436C349.408 57.7153 348.311 56.9007 347.59 55.992C346.87 55.0833 346.509 54.3313 346.509 53.736C346.509 53.4227 346.619 53.1877 346.838 53.031C347.058 52.843 347.293 52.749 347.543 52.749H349.517C349.705 52.749 349.846 52.7803 349.94 52.843C350.066 52.9057 350.222 53.0467 350.41 53.266C351.131 54.1433 351.93 54.8327 352.807 55.334C353.716 55.8353 354.922 56.086 356.426 56.086C358.118 56.086 359.466 55.7727 360.468 55.146C361.502 54.5193 362.019 53.6107 362.019 52.42C362.019 51.6367 361.8 51.01 361.361 50.54C360.923 50.07 360.186 49.647 359.152 49.271C358.15 48.895 356.646 48.4877 354.64 48.049C351.914 47.4537 349.987 46.592 348.859 45.464C347.731 44.336 347.167 42.879 347.167 41.093C347.167 39.9337 347.512 38.8213 348.201 37.756C348.891 36.6593 349.909 35.782 351.256 35.124C352.635 34.4347 354.264 34.09 356.144 34.09C358.118 34.09 359.795 34.419 361.173 35.077C362.583 35.735 363.633 36.5027 364.322 37.38C365.043 38.2573 365.403 38.9937 365.403 39.589C365.403 39.871 365.294 40.106 365.074 40.294C364.886 40.482 364.651 40.576 364.369 40.576H362.583C362.145 40.576 361.831 40.4037 361.643 40.059C361.111 39.4637 360.656 39.0093 360.28 38.696C359.936 38.3513 359.419 38.0693 358.729 37.85C358.04 37.5993 357.178 37.474 356.144 37.474C354.609 37.474 353.434 37.803 352.619 38.461C351.805 39.0877 351.397 39.9337 351.397 40.999C351.397 41.657 351.57 42.221 351.914 42.691C352.259 43.1297 352.917 43.5527 353.888 43.96C354.86 44.336 356.301 44.7277 358.212 45.135C361.189 45.7617 363.288 46.6547 364.51 47.814C365.764 48.9733 366.39 50.4617 366.39 52.279C366.39 53.6263 365.999 54.8483 365.215 55.945C364.463 57.0417 363.32 57.9033 361.784 58.53C360.28 59.1567 358.479 59.47 356.379 59.47Z\"\n      />\n      <path\n        fill=\"#172B4D\"\n        d=\"M38.8688 0L48.5628 5.57462L10.3866 27.5283L0.692639 21.9536L38.8688 0Z\"\n      />\n      <path\n        fill=\"#172B4D\"\n        d=\"M48.9537 6.74507L11.0179 28.5506L11.0166 39.5831L48.9525 17.7776L48.9537 6.74507Z\"\n      />\n      <path\n        fill=\"#172B4D\"\n        d=\"M33.6985 28.2757L11.0976 41.2669L11.0964 52.2997L33.6972 39.3084L33.6985 28.2757Z\"\n      />\n      <path\n        fill=\"#172B4D\"\n        d=\"M25.0346 45.7171L11.0441 53.7592L11.0428 64.7922L25.0334 56.7501L25.0346 45.7171Z\"\n      />\n      <path\n        fill=\"#172B4D\"\n        d=\"M0.00375833 23.0173L9.75474 28.622L9.75099 39.6571L0 34.0525L0.00375833 23.0173Z\"\n      />\n      <path\n        fill=\"#172B4D\"\n        d=\"M0.0965426 35.6574L9.72924 41.1941L9.72548 52.2292L0.0927843 46.6926L0.0965426 35.6574Z\"\n      />\n      <path\n        fill=\"#172B4D\"\n        d=\"M0.0922985 48.2214L9.72824 53.76L9.72423 65.523L0.0882924 59.9844L0.0922985 48.2214Z\"\n      />\n      <path\n        fill=\"#172B4D\"\n        d=\"M21.5645 84L11.8705 78.4254L49.6134 56.7209L59.3073 62.2955L21.5645 84Z\"\n      />\n      <path\n        fill=\"#172B4D\"\n        d=\"M11.102 77.4713L48.9809 55.6985L48.9821 44.666L11.1032 66.4388L11.102 77.4713Z\"\n      />\n      <path\n        fill=\"#172B4D\"\n        d=\"M26.3002 55.9735L48.901 42.9822L48.9023 31.9495L26.3014 44.9407L26.3002 55.9735Z\"\n      />\n      <path\n        fill=\"#172B4D\"\n        d=\"M34.9641 38.532L48.9546 30.4899L48.9558 19.457L34.9653 27.4991L34.9641 38.532Z\"\n      />\n      <path\n        fill=\"#172B4D\"\n        d=\"M59.9962 61.3058L50.2453 55.7012L50.249 44.666L60 50.2706L59.9962 61.3058Z\"\n      />\n      <path\n        fill=\"#172B4D\"\n        d=\"M59.9041 48.5947L50.2714 43.058L50.2751 32.0229L59.9078 37.5595L59.9041 48.5947Z\"\n      />\n      <path\n        fill=\"#172B4D\"\n        d=\"M59.9077 36.0307L50.2717 30.4921L50.2756 18.9405L59.9116 24.479L59.9077 36.0307Z\"\n      />\n    </svg>\n  );\n}\n"
  },
  {
    "path": "website/src/components/MDXComponents.tsx",
    "content": "import * as React from 'react';\nimport dynamic from 'next/dynamic';\nimport Image from 'next/image';\nimport Head from 'next/head';\nimport Link from 'next/link';\n\nconst Img = (props: any) => (\n  <Image\n    {...props}\n    loading=\"lazy\"\n    sizes=\"100vw\"\n    style={{\n      width: '100%',\n      height: 'auto',\n    }}\n  />\n);\n\nexport default {\n  // default tags\n  pre: (p: any) => <div {...p} />,\n  img: Img,\n  code: dynamic(() => import('./Highlight2')),\n  a: Link,\n  Head,\n};\n"
  },
  {
    "path": "website/src/components/Nav.tsx",
    "content": "import Link from 'next/link';\nimport { useRouter } from 'next/router';\nimport * as React from 'react';\nimport { siteConfig } from 'siteConfig';\nimport { ExternalLink } from './ExternalLink';\nimport { Logo } from './Logo';\n\nexport const Nav: React.FC = () => {\n  const router = useRouter();\n  return (\n    <div className=\"bg-white border-b border-gray-200\">\n      <div className=\"container px-4 lg:px-0 mx-auto\">\n        <div className=\"grid grid-cols-1 md:grid-cols-12 md:gap-8\">\n          <div className=\"md:col-span-3 flex items-center justify-between h-16\">\n            <div>\n              <Link href=\"/\">\n                <span className=\"sr-only\">Home</span>\n                <Logo />\n              </Link>\n            </div>\n          </div>\n          <div className=\"md:col-span-9 items-center flex justify-between md:justify-end  space-x-6 h-16\">\n            <div className=\"flex justify-between md:justify-end items-center flex-1 md:space-x-2\">\n              <div>\n                <Link\n                  href=\"/docs/overview\"\n                  className=\"rounded-md py-2 px-3 inline-flex items-center leading-5 font-medium text-gray-900 hover:bg-gray-50 hover:text-gray-900 outline-none focus:text-gray-900 focus:bg-gray-50 transition duration-150 ease-in-out\"\n                >\n                  Docs\n                </Link>\n              </div>\n              <div>\n                <Link\n                  href=\"/blog\"\n                  className=\"rounded-md py-2 px-3 inline-flex items-center leading-5 font-medium text-gray-900 hover:bg-gray-50 hover:text-gray-900 outline-none focus:text-gray-900 focus:bg-gray-50 transition duration-150 ease-in-out\"\n                >\n                  Blog\n                </Link>\n              </div>\n              <div>\n                <Link\n                  href=\"/users\"\n                  className=\"rounded-md py-2 px-3 inline-flex items-center leading-5 font-medium text-gray-900 hover:bg-gray-50 hover:text-gray-900 outline-none focus:text-gray-900 focus:bg-gray-50 transition duration-150 ease-in-out\"\n                >\n                  Users\n                </Link>\n              </div>\n\n              <div>\n                <ExternalLink\n                  href=\"https://formium.io/contact/sales?utm_source=formik-site&utm_medium=navbar&utm_campaign=formik-website\"\n                  className=\"rounded-md py-2 px-3 inline-flex items-center leading-5 font-medium text-gray-900 hover:bg-gray-50 hover:text-gray-900 focus:outline-none focus:text-gray-900 focus:bg-gray-50 transition duration-150 ease-in-out\"\n                >\n                  Enterprise\n                </ExternalLink>\n              </div>\n              <div className=\"hidden lg:block\">\n                <ExternalLink\n                  href=\"https://forms.formium.io/f/5f06126f5b703c00012005fa\"\n                  className=\"rounded-md py-2 px-3 inline-flex items-center leading-5 font-medium text-gray-900 hover:bg-gray-50 hover:text-gray-900 focus:outline-none focus:text-gray-900 focus:bg-gray-50 transition duration-150 ease-in-out\"\n                >\n                  Feedback\n                </ExternalLink>\n              </div>\n              <div>\n                <ExternalLink\n                  href={siteConfig.repoUrl}\n                  className=\"rounded-md py-2 px-3 inline-flex items-center leading-5 font-medium text-gray-900 hover:bg-gray-50 hover:text-gray-900 focus:outline-none focus:text-gray-900 focus:bg-gray-50 transition duration-150 ease-in-out\"\n                >\n                  <span className=\"sr-only\">GitHub</span>\n                  <svg\n                    className=\"fill-current w-5 h-5\"\n                    xmlns=\"http://www.w3.org/2000/svg\"\n                    viewBox=\"0 0 20 20\"\n                  >\n                    <title>GitHub</title>\n                    <path d=\"M10 0a10 10 0 0 0-3.16 19.49c.5.1.68-.22.68-.48l-.01-1.7c-2.78.6-3.37-1.34-3.37-1.34-.46-1.16-1.11-1.47-1.11-1.47-.9-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.9 1.52 2.34 1.08 2.91.83.1-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.94 0-1.1.39-1.99 1.03-2.69a3.6 3.6 0 0 1 .1-2.64s.84-.27 2.75 1.02a9.58 9.58 0 0 1 5 0c1.91-1.3 2.75-1.02 2.75-1.02.55 1.37.2 2.4.1 2.64.64.7 1.03 1.6 1.03 2.69 0 3.84-2.34 4.68-4.57 4.93.36.31.68.92.68 1.85l-.01 2.75c0 .26.18.58.69.48A10 10 0 0 0 10 0\" />\n                  </svg>\n                </ExternalLink>\n              </div>\n\n              <div className=\"hidden lg:block\">\n                <ExternalLink\n                  href={siteConfig.twitterUrl}\n                  className=\"rounded-md py-2 px-3 inline-flex items-center leading-5 font-medium text-gray-900 hover:bg-gray-50 hover:text-gray-900 focus:outline-none focus:text-gray-900 focus:bg-gray-50 transition duration-150 ease-in-out\"\n                >\n                  <span className=\"sr-only\">Twitter</span>\n                  <svg\n                    className=\"fill-current w-5 h-5\"\n                    xmlns=\"http://www.w3.org/2000/svg\"\n                    viewBox=\"0 0 20 20\"\n                  >\n                    <title>Twitter</title>\n                    <path d=\"M6.29 18.25c7.55 0 11.67-6.25 11.67-11.67v-.53c.8-.59 1.49-1.3 2.04-2.13-.75.33-1.54.55-2.36.65a4.12 4.12 0 0 0 1.8-2.27c-.8.48-1.68.81-2.6 1a4.1 4.1 0 0 0-7 3.74 11.65 11.65 0 0 1-8.45-4.3 4.1 4.1 0 0 0 1.27 5.49C2.01 8.2 1.37 8.03.8 7.7v.05a4.1 4.1 0 0 0 3.3 4.03 4.1 4.1 0 0 1-1.86.07 4.1 4.1 0 0 0 3.83 2.85A8.23 8.23 0 0 1 0 16.4a11.62 11.62 0 0 0 6.29 1.84\"></path>\n                  </svg>\n                </ExternalLink>\n              </div>\n              <div>\n                <ExternalLink\n                  href={siteConfig.discordUrl}\n                  className=\"rounded-md py-2 px-3 inline-flex items-center leading-5 font-medium text-gray-900 hover:bg-gray-50 hover:text-gray-900 focus:outline-none focus:text-gray-900 focus:bg-gray-50 transition duration-150 ease-in-out\"\n                >\n                  <span className=\"sr-only\">Discord</span>\n                  <svg\n                    className=\"fill-current w-5 h-5\"\n                    xmlns=\"http://www.w3.org/2000/svg\"\n                    viewBox=\"0 0 146 146\"\n                  >\n                    <title>Discord</title>\n                    <path\n                      d=\"M107.75 125.001s-4.5-5.375-8.25-10.125c16.375-4.625 22.625-14.875 22.625-14.875-5.125 3.375-10 5.75-14.375 7.375-6.25 2.625-12.25 4.375-18.125 5.375-12 2.25-23 1.625-32.375-.125-7.125-1.375-13.25-3.375-18.375-5.375-2.875-1.125-6-2.5-9.125-4.25-.375-.25-.75-.375-1.125-.625-.25-.125-.375-.25-.5-.375-2.25-1.25-3.5-2.125-3.5-2.125s6 10 21.875 14.75c-3.75 4.75-8.375 10.375-8.375 10.375-27.625-.875-38.125-19-38.125-19 0-40.25 18-72.875 18-72.875 18-13.5 35.125-13.125 35.125-13.125l1.25 1.5c-22.5 6.5-32.875 16.375-32.875 16.375s2.75-1.5 7.375-3.625c13.375-5.875 24-7.5 28.375-7.875.75-.125 1.375-.25 2.125-.25 7.625-1 16.25-1.25 25.25-.25 11.875 1.375 24.625 4.875 37.625 12 0 0-9.875-9.375-31.125-15.875l1.75-2S110 19.626 128 33.126c0 0 18 32.625 18 72.875 0 0-10.625 18.125-38.25 19zM49.625 66.626c-7.125 0-12.75 6.25-12.75 13.875s5.75 13.875 12.75 13.875c7.125 0 12.75-6.25 12.75-13.875.125-7.625-5.625-13.875-12.75-13.875zm45.625 0c-7.125 0-12.75 6.25-12.75 13.875s5.75 13.875 12.75 13.875c7.125 0 12.75-6.25 12.75-13.875s-5.625-13.875-12.75-13.875z\"\n                      fillRule=\"nonzero\"\n                    ></path>\n                  </svg>\n                </ExternalLink>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  );\n};\n"
  },
  {
    "path": "website/src/components/ReactionForm.tsx",
    "content": "import va from '@vercel/analytics';\nimport cn from 'classnames';\nimport { useRouter } from 'next/router';\nimport * as React from 'react';\nimport { mergeProps, useButton, useHover } from 'react-aria';\n\nexport interface FeedbackButtonProps {\n  intent: 'tears' | 'meh' | 'happy' | 'awesome';\n  onPress: () => void;\n}\n\nconst mapIntentToSource = {\n  tears: '/twemoji/1f62d.svg',\n  meh: '/twemoji/1f615.svg',\n  happy: '/twemoji/1f600.svg',\n  awesome: '/twemoji/1f929.svg',\n};\n\nexport function FeedbackButton({ intent, ...props }: FeedbackButtonProps) {\n  const ref = React.useRef<HTMLButtonElement | null>(null);\n  const { buttonProps } = useButton(props, ref);\n  const { isHovered, hoverProps } = useHover({});\n  const mergedProps = mergeProps(hoverProps, buttonProps);\n  return (\n    <>\n      <button\n        {...mergedProps}\n        ref={ref}\n        className={cn(\n          'inline-flex items-center justify-center py-2',\n          isHovered\n            ? ' none transition duration-150 scale-125   ease-in-out '\n            : ' grayed transition duration-150 scale-100  ease-in-out '\n        )}\n      >\n        <img src={mapIntentToSource[intent]} height=\"24\" width=\"24\" />\n      </button>\n      <style jsx>{`\n        .grayed {\n          filter: grayscale(100%);\n        }\n        .none {\n          filter: none;\n        }\n      `}</style>\n    </>\n  );\n}\n\nFeedbackButton.displayName = 'FeedbackButton';\n\nexport function ReactionForm() {\n  const [feedbackGiven, setFeedbackGiven] = React.useState(false);\n\n  const { asPath } = useRouter();\n  React.useEffect(() => {\n    setFeedbackGiven(false);\n  }, [asPath, setFeedbackGiven]);\n\n  const makeTrackedHandler = (value: number) => () => {\n    va.track('Feedback Button', {\n      category: 'Feedback Button',\n      action: 'feedback',\n      name: 'feedback',\n      label: window.location.pathname,\n      value,\n    });\n    setFeedbackGiven(true);\n  };\n\n  if (feedbackGiven) {\n    return (\n      <div className=\"mb-4 text-lg font-semibold text-center \">\n        Thanks for letting us know!\n      </div>\n    );\n  } else {\n    return (\n      <>\n        <div className=\"mb-4 text-lg font-semibold text-center \">\n          Was this page helpful?\n        </div>\n        <div className=\"grid w-64 grid-cols-4 gap-2 mx-auto\">\n          <FeedbackButton intent=\"tears\" onPress={makeTrackedHandler(0)} />\n          <FeedbackButton intent=\"meh\" onPress={makeTrackedHandler(1)} />\n          <FeedbackButton intent=\"happy\" onPress={makeTrackedHandler(2)} />\n          <FeedbackButton intent=\"awesome\" onPress={makeTrackedHandler(3)} />\n        </div>\n      </>\n    );\n  }\n}\n\nReactionForm.displayName = 'ReactionForm';\n"
  },
  {
    "path": "website/src/components/Search.tsx",
    "content": "import * as React from 'react';\nimport { createPortal } from 'react-dom';\nimport Router from 'next/router';\nimport Link from 'next/link';\nimport Head from 'next/head';\nimport { useDocSearchKeyboardEvents } from '@docsearch/react';\nimport { siteConfig } from 'siteConfig';\n\nexport interface SearchProps {\n  appId?: string;\n  apiKey?: string;\n  indexName?: string;\n  searchParameters?: any;\n  renderModal?: boolean;\n}\n\nfunction Hit({ hit, children }: any) {\n  return <Link href={hit.url.replace()}>{children}</Link>;\n}\n\nconst options = {\n  appId: siteConfig.algolia.appId,\n  apiKey: siteConfig.algolia.apiKey,\n  indexName: siteConfig.algolia.indexName,\n};\n\nlet DocSearchModal: any = null;\n\nexport const Search: React.FC<SearchProps> = () => {\n  const searchButtonRef = React.useRef<HTMLButtonElement | null>(null);\n  const [isShowing, setIsShowing] = React.useState(false);\n  const [initialQuery, setInitialQuery] = React.useState<string | null>(null);\n\n  const importDocSearchModalIfNeeded = React.useCallback(\n    function importDocSearchModalIfNeeded() {\n      if (DocSearchModal) {\n        return Promise.resolve();\n      }\n\n      return Promise.resolve(import('@docsearch/react/modal')).then(\n        ({ DocSearchModal: Modal }) => {\n          DocSearchModal = Modal;\n        }\n      );\n    },\n    []\n  );\n\n  const onOpen = React.useCallback(\n    function onOpen() {\n      importDocSearchModalIfNeeded().then(() => {\n        // We check that no other DocSearch modal is showing before opening this\n        // one (we use one instance for desktop and one instance for mobile).\n        if (document.body.classList.contains('DocSearch--active')) {\n          return;\n        }\n\n        setIsShowing(true);\n      });\n    },\n    [importDocSearchModalIfNeeded, setIsShowing]\n  );\n\n  const onClose = React.useCallback(\n    function onClose() {\n      setIsShowing(false);\n    },\n    [setIsShowing]\n  );\n\n  const onInput = React.useCallback(\n    (event: KeyboardEvent) => {\n      importDocSearchModalIfNeeded().then(() => {\n        setIsShowing(true);\n        setInitialQuery(event.key);\n      });\n    },\n    [importDocSearchModalIfNeeded, setIsShowing, setInitialQuery]\n  );\n\n  useDocSearchKeyboardEvents({\n    isOpen: isShowing,\n    onOpen,\n    onClose,\n    onInput,\n    searchButtonRef,\n  });\n\n  return (\n    <>\n      <Head>\n        <link\n          rel=\"preconnect\"\n          href={`https://${options.appId}-dsn.algolia.net`}\n          crossOrigin=\"anonymous\"\n        />\n      </Head>\n\n      <div>\n        <button\n          ref={searchButtonRef}\n          type=\"button\"\n          className=\"flex items-center w-full px-2 py-2 text-sm leading-6 text-left text-gray-500 align-middle transition duration-150 ease-in-out border rounded-lg group hover:text-gray-600 hover:border-gray-300 pointer bg-gray-50 focus:border-blue-300 focus:ring focus:ring-blue-200 focus:ring-opacity-50\"\n          onClick={onOpen}\n        >\n          <svg\n            width=\"1em\"\n            height=\"1em\"\n            className=\"flex-shrink-0 mr-3 text-gray-600 align-middle group-hover:text-gray-700\"\n            style={{ marginBottom: 2 }}\n            viewBox=\"0 0 20 20\"\n          >\n            <path\n              d=\"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z\"\n              stroke=\"currentColor\"\n              fill=\"none\"\n              strokeWidth=\"2\"\n              fillRule=\"evenodd\"\n              strokeLinecap=\"round\"\n              strokeLinejoin=\"round\"\n            ></path>\n          </svg>\n          Search docs\n          <span className=\"ml-auto\">\n            <kbd\n              className=\"inline-flex items-center justify-center p-0 mr-0 mr-1 text-xs text-center align-middle transition duration-150 ease-in-out bg-gray-100 border border-gray-300 rounded group-hover:border-gray-300 \"\n              style={{ minWidth: '1.8em' }}\n            >\n              ⌘\n            </kbd>\n            <kbd\n              className=\"inline-flex items-center justify-center p-0 ml-auto mr-0 text-xs text-center align-middle transition duration-150 ease-in-out bg-gray-100 border border-gray-300 rounded group-hover:border-gray-300 \"\n              style={{ minWidth: '1.8em' }}\n            >\n              K\n            </kbd>\n          </span>\n        </button>\n      </div>\n      {isShowing &&\n        createPortal(\n          <DocSearchModal\n            {...options}\n            initialQuery={initialQuery}\n            onClose={onClose}\n            navigator={{\n              navigate({ suggestionUrl }: any) {\n                Router.push(suggestionUrl);\n              },\n            }}\n            transformItems={(items: any[]) => {\n              return items.map(item => {\n                const url = new URL(item.url);\n                return {\n                  ...item,\n                  url: item.url\n                    .replace(url.origin, '')\n                    .replace('/docs/#', '/docs/overview#'),\n                };\n              });\n            }}\n            hitComponent={Hit}\n          />,\n          document.body\n        )}\n    </>\n  );\n};\n\nSearch.displayName = 'Search';\n"
  },
  {
    "path": "website/src/components/Seo.tsx",
    "content": "import React from 'react';\nimport Head from 'next/head';\nimport { useRouter } from 'next/router';\n\nexport interface SeoProps {\n  title: string;\n  description?: string;\n  image?: string;\n  // jsonld?: JsonLDType | Array<JsonLDType>;\n  children?: React.ReactNode;\n}\n\nexport const Seo: React.FC<SeoProps> = ({\n  title,\n  description,\n  image = '/images/formik-og.png',\n  children,\n}: SeoProps) => {\n  const router = useRouter();\n  return (\n    <Head>\n      {/* DEFAULT */}\n\n      {title != undefined && <title key=\"title\">{title}</title>}\n      {description != undefined && (\n        <meta name=\"description\" key=\"description\" content={description} />\n      )}\n      <link rel=\"icon\" type=\"image/x-icon\" href=\"/images/favicon.png\" />\n      <link rel=\"apple-touch-icon\" href=\"/images/favicon.png\" />\n\n      {/* OPEN GRAPH */}\n      <meta property=\"og:type\" key=\"og:type\" content=\"website\" />\n      <meta\n        property=\"og:url\"\n        key=\"og:url\"\n        content={`https://formik.org${router.pathname}`}\n      />\n      {title != undefined && (\n        <meta property=\"og:title\" content={title} key=\"og:title\" />\n      )}\n      {description != undefined && (\n        <meta\n          property=\"og:description\"\n          key=\"og:description\"\n          content={description}\n        />\n      )}\n      {image != undefined && (\n        <meta\n          property=\"og:image\"\n          key=\"og:image\"\n          content={`https://formik.org${image}`}\n        />\n      )}\n\n      {/* TWITTER */}\n      <meta\n        name=\"twitter:card\"\n        key=\"twitter:card\"\n        content=\"summary_large_image\"\n      />\n      <meta name=\"twitter:site\" key=\"twitter:site\" content=\"@formikhq\" />\n      <meta name=\"twitter:creator\" key=\"twitter:creator\" content=\"@formikhq\" />\n      {title != undefined && (\n        <meta name=\"twitter:title\" key=\"twitter:title\" content={title} />\n      )}\n      {description != undefined && (\n        <meta\n          name=\"twitter:description\"\n          key=\"twitter:description\"\n          content={description}\n        />\n      )}\n      {image != undefined && (\n        <meta\n          name=\"twitter:image\"\n          key=\"twitter:image\"\n          content={`https://formik.org${image}`}\n        />\n      )}\n\n      {children}\n    </Head>\n  );\n};\n"
  },
  {
    "path": "website/src/components/Sidebar.tsx",
    "content": "import { useState } from 'react';\nimport cn from 'classnames';\nimport { Search } from './Search';\n\nexport const Sidebar: React.FC<{\n  active?: boolean;\n  fixed?: boolean;\n  children: React.ReactNode;\n}> = ({ active, children, fixed }) => {\n  const [searching, setSearching] = useState(false);\n\n  return (\n    <aside\n      className={cn('sidebar bg-white top-24 flex-shrink-0 pr-2', {\n        active,\n        ['pb-0 flex flex-col z-1 sticky']: fixed,\n        fixed,\n        searching,\n      })}\n    >\n      <div className=\"sidebar-search my-2\">\n        <Search />\n      </div>\n      <div className=\"sidebar-content overflow-y-auto pb-4\">{children}</div>\n      <style jsx>{`\n        .sidebar {\n          -webkit-overflow-scrolling: touch;\n        }\n        .sidebar.fixed {\n          width: 300px;\n          padding-right: 2.5rem;\n          /* Full page - content margin - header size - banner */\n          height: calc(100vh - 1.5rem - 64px - 42px);\n        }\n        .sidebar.fixed.searching > .sidebar-content {\n          display: none;\n        }\n        .sidebar-search {\n          position: relative;\n          z-index: 1;\n        }\n        @media screen and (max-width: 1024px) {\n          .sidebar,\n          .sidebar.fixed {\n            display: none;\n          }\n          .sidebar.active {\n            display: block;\n          }\n        }\n      `}</style>\n    </aside>\n  );\n};\n"
  },
  {
    "path": "website/src/components/SidebarCategory.tsx",
    "content": "import { useRef, useState, useEffect } from 'react';\nimport cn from 'classnames';\nimport { FiChevronDown } from 'react-icons/fi';\n\nexport function SidebarCategory({\n  isMobile,\n  level = 1,\n  title,\n  selected,\n  opened,\n  children,\n}: any) {\n  const ref = useRef<HTMLDivElement | null>(null);\n  const [{ toggle, shouldScroll = false }, setToggle] = useState<{\n    toggle: boolean;\n    shouldScroll?: boolean;\n  }>({\n    toggle: selected || opened,\n  });\n  const toggleCategory = () => {\n    setToggle({ toggle: !toggle, shouldScroll: true });\n  };\n  const levelClass = `level-${level}`;\n\n  // If a category is selected indirectly, open it. This can happen when using the search input\n  useEffect(() => {\n    if (selected) {\n      setToggle({ toggle: true });\n    }\n  }, [selected]);\n\n  // Navigate to the start of the category when manually opened\n  useEffect(() => {\n    if (toggle && shouldScroll && ref.current != null) {\n      const content = document.querySelector(\n        isMobile ? '.docs-dropdown' : '.sidebar-content'\n      );\n      if (content) {\n        // 10 is added for better margin\n        const height =\n          ref.current.offsetTop - (isMobile ? 10 : (content as any).offsetTop);\n\n        content.scrollTop = height;\n        setToggle({ toggle });\n      }\n    }\n  }, [toggle, shouldScroll, isMobile]);\n\n  return (\n    <div\n      ref={ref}\n      className={cn('category', levelClass, { open: toggle, selected })}\n    >\n      <a className=\"label\" onClick={toggleCategory}>\n        {title}\n        <FiChevronDown className=\"text-gray-600\" />\n      </a>\n      <div className=\"posts\">{children}</div>\n      <style jsx>{`\n        .category {\n          margin: 12px 0;\n        }\n        .category:first-child {\n          margin-top: 0;\n        }\n        .category:last-child {\n          margin-bottom: 0;\n        }\n        .label {\n          font-size: 1rem;\n          line-height: 1.5rem;\n          font-weight: 400;\n          cursor: pointer;\n          display: flex;\n          align-items: center;\n          justify-content: space-between;\n          color: #4b5563;\n        }\n        .label > :global(svg) {\n          margin-right: 16px;\n          transform-origin: center;\n          transition: transform 0.15s ease;\n        }\n        .selected > .label {\n          font-weight: 600;\n          color: #161e2e;\n        }\n        .open > .label {\n          color: #161e2e;\n        }\n        .open > .label > :global(svg) {\n          margin-left: 1px;\n          transform-origin: center;\n          transform: rotate(180deg);\n        }\n        .level-2 .label {\n          text-transform: none;\n          letter-spacing: 0;\n        }\n        .label:hover {\n          color: #1a202c;\n        }\n        .separated {\n          margin-bottom: 32px;\n        }\n        .posts {\n          border-left: 1px solid #e5e7eb;\n          margin-top: 0;\n          height: 0;\n          overflow: hidden;\n          padding-left: 19px;\n          margin-left: 3px;\n        }\n        .open > .posts {\n          margin-top: 12px;\n          height: auto;\n        }\n        @media screen and (max-width: 950px) {\n          .category {\n            margin: 24px 0;\n          }\n        }\n      `}</style>\n    </div>\n  );\n}\n"
  },
  {
    "path": "website/src/components/SidebarHeading.tsx",
    "content": "import * as React from 'react';\n\nexport const SidebarHeading: React.FC<{\n  title: string;\n  children: React.ReactNode;\n}> = ({ title, children }) => {\n  return (\n    // <div>\n    //   <h4 className=\"font-semibold uppercase text-sm my-4\">{title}</h4>\n    //   <div>{children}</div>\n    // </div>\n    <div className=\"heading\">\n      <h4>{title}</h4>\n      <div>{children}</div>\n      <style jsx>{`\n        h4 {\n          margin: 1.25rem 0;\n          font-size: 1.2rem;\n          font-weight: 600;\n        }\n      `}</style>\n    </div>\n  );\n};\n\nSidebarHeading.displayName = 'SidebarHeading';\n"
  },
  {
    "path": "website/src/components/SidebarMobile.tsx",
    "content": "import * as React from 'react';\n\nimport {\n  disableBodyScroll,\n  enableBodyScroll,\n  clearAllBodyScrollLocks,\n} from 'body-scroll-lock';\nimport cn from 'classnames';\nimport { Container } from './Container';\nimport { FiChevronRight as ArrowRightSidebar } from 'react-icons/fi';\nimport { Search } from './Search';\nimport { useRouter } from 'next/router';\n\nexport function SidebarMobile({ children }: { children: React.ReactNode }) {\n  const [opened, setOpen] = React.useState(false);\n  const menuRef = React.useRef<HTMLDivElement>(null);\n  const searchRef = React.useRef<HTMLDivElement>(null);\n  const router = useRouter();\n  const openMenu = () => {\n    if (menuRef.current != null) {\n      disableBodyScroll(menuRef.current);\n      setOpen(true);\n    }\n  };\n  const closeMenu = () => {\n    if (menuRef.current != null) {\n      enableBodyScroll(menuRef.current);\n      setOpen(false);\n    }\n  };\n  const toggleOpen = () => {\n    if (opened) {\n      closeMenu();\n    } else {\n      openMenu();\n    }\n  };\n\n  const onRouteChange = () => {\n    closeMenu();\n  };\n\n  React.useEffect(() => {\n    onRouteChange();\n    return () => {\n      clearAllBodyScrollLocks();\n    };\n  }, [router.asPath]);\n\n  return (\n    <div className=\"lg:hidden\">\n      <Container className=\"px-4\">\n        <div className=\"sidebar-search py-2 z-10\">\n          <Search />\n        </div>\n        <label htmlFor=\"dropdown-input\" className={cn('w-full', { opened })}>\n          <input\n            id=\"dropdown-input\"\n            className=\"hidden\"\n            type=\"checkbox\"\n            checked={opened}\n            onChange={toggleOpen}\n          />\n          <div className=\"docs-select flex w-full items-center\">\n            <ArrowRightSidebar className=\"text-gray-600 -ml-1\" />\n            Menu\n          </div>\n        </label>\n        <div className=\"docs-dropdown shadow-xl\" ref={menuRef}>\n          <Container className=\"px-4\">\n            <nav>{children}</nav>\n          </Container>\n        </div>\n        <style jsx>{`\n          .docs-select {\n            display: flex;\n            height: 2.5rem;\n            width: 100%;\n            line-height: 3rem;\n            align-items: center;\n            text-align: left;\n            cursor: pointer;\n          }\n          .docs-dropdown {\n            position: absolute;\n            left: 0;\n            right: 0;\n            top: 100%;\n            bottom: 100%;\n            background: white;\n            overflow-y: auto;\n            -webkit-overflow-scrolling: touch;\n          }\n          .docs-dropdown nav {\n            padding: 10px 0;\n          }\n          .opened ~ .docs-dropdown {\n            min-height: 80px;\n            bottom: calc(153px - 90vh);\n            border-top: 1px solid #eaeaea;\n          }\n          .docs-select :global(svg) {\n            margin-left: 1px;\n            margin-right: 14px;\n            transition: transform 0.15s ease;\n          }\n          .opened > .docs-select :global(svg) {\n            transform: rotate(90deg);\n          }\n\n          @media screen and (max-width: 640px) {\n            .opened ~ .docs-dropdown {\n              bottom: calc(203px - 90vh);\n            }\n          }\n        `}</style>\n      </Container>\n    </div>\n  );\n}\n"
  },
  {
    "path": "website/src/components/SidebarNavLink.tsx",
    "content": "import * as React from 'react';\nimport Link from 'next/link';\nimport { useRouter } from 'next/router';\nimport cn from 'classnames';\n\nexport interface SidebarNavLinkProps {\n  route: any;\n  level: number;\n  onClick?: () => void;\n  categorySelected?: string;\n  scrollSelectedIntoView?: boolean;\n}\n\nexport function SidebarNavLink({\n  route: { href, pathname, title, selected },\n  onClick,\n}: SidebarNavLinkProps) {\n  const router = useRouter();\n  const onlyHashChange = pathname === router.pathname;\n\n  return (\n    <div className={cn('nav-link', { selected })}>\n      {\n        // NOTE: use just anchor element for triggering `hashchange` event\n        onlyHashChange ? (\n          <a className={selected ? 'selected' : ''} href={pathname}>\n            {title}\n          </a>\n        ) : (\n          <Link href={pathname}>{title}</Link>\n        )\n      }\n      <style jsx>{`\n        div.selected {\n          box-sizing: border-box;\n        }\n        .nav-link {\n          display: flex;\n          width: 100%;\n        }\n        .nav-link :global(a) {\n          text-decoration: none;\n          font-size: 1rem;\n          line-height: 1.5rem;\n          color: #4b5563;\n          width: 100%;\n          box-sizing: border-box;\n        }\n        .selected :global(a) {\n          font-weight: 600;\n          color: #161e2e;\n        }\n        .nav-link:hover :global(a) {\n          color: #161e2e;\n        }\n        span {\n          color: #a0aec0;\n        }\n        @media screen and (max-width: 950px) {\n          div {\n            padding-top: 0;\n            padding-left: 0;\n            padding-bottom: 0;\n          }\n          div.selected {\n            border-left: none;\n            padding-left: 0;\n          }\n          .nav-link :global(a) {\n            display: flex;\n            align-items: center;\n          }\n        }\n      `}</style>\n    </div>\n  );\n}\n\nSidebarNavLink.displayName = 'SidebarNavLink';\n"
  },
  {
    "path": "website/src/components/SidebarPost.tsx",
    "content": "import * as React from 'react';\nimport { SidebarNavLink } from './SidebarNavLink';\nimport cn from 'classnames';\n\nexport const SidebarPost: React.FC<{\n  isMobile?: boolean;\n  level: number;\n  route: {\n    selected: boolean;\n    href: string;\n    path: string | undefined;\n    title: string;\n    pathname: string;\n  };\n  onClick?: () => void;\n  categorySelected?: string;\n  scrollSelectedIntoView?: boolean;\n}> = ({ isMobile, route, level = 1, onClick, ...props }) => {\n  const selectedRef = React.useRef<HTMLDivElement>(null);\n  const ref = route.selected ? selectedRef : null;\n  React.useEffect(() => {\n    if (ref && ref.current && !isMobile) {\n      const content = document.querySelector('.sidebar-content');\n      // 32 is the top and bottom margin for `.link`\n      const height = ref.current.offsetTop - 32;\n      if (content) {\n        content.scrollTop = height - (content as any).offsetHeight / 2;\n      }\n    }\n  }, [ref, isMobile]);\n  return (\n    <div ref={ref} className={cn('link', `level-${level}`)}>\n      <SidebarNavLink\n        route={route}\n        scrollSelectedIntoView={props.scrollSelectedIntoView}\n        categorySelected={props.categorySelected}\n        level={level}\n        onClick={onClick}\n      />\n      <style jsx>{`\n        .link {\n          margin: 12px 0;\n          display: flex;\n          align-items: center;\n        }\n\n        .link:first-child {\n          margin-top: 0;\n        }\n        .link:last-child {\n          margin-bottom: 0;\n        }\n        @media screen and (max-width: 950px) {\n          .link {\n            margin: 24px 0;\n          }\n        }\n      `}</style>\n    </div>\n  );\n};\n"
  },
  {
    "path": "website/src/components/Sticky.tsx",
    "content": "import * as React from 'react';\n\nimport cn from 'classnames';\n\nexport interface StickyProps {\n  offset?: number;\n  className?: string;\n  shadow?: boolean;\n  children: React.ReactNode;\n}\n\nexport const Sticky: React.FC<StickyProps> = ({ offset, children, shadow }) => {\n  return (\n    <div style={{ top: offset || 0 }} className={cn({ shadow }, 'z-10')}>\n      {children}\n\n      <style jsx>{`\n        div {\n          background: #fff;\n          position: sticky;\n        }\n        div.shadow {\n          box-shadow: rgba(0, 0, 0, 0.06) 0px 6px 20px;\n        }\n      `}</style>\n    </div>\n  );\n};\n\nSticky.displayName = 'Sticky';\n"
  },
  {
    "path": "website/src/components/TWButton.tsx",
    "content": "import * as React from 'react';\nimport { forwardRefWithAs } from './forwardRefWithAs';\nimport cx from 'classnames';\nimport { useButton } from 'react-aria';\nexport interface TWButtonProps {\n  /**\n   * Intent of the button\n   * @default none\n   */\n  intent?: 'none' | 'primary' | 'warning' | 'danger' | 'success';\n  /**\n   * Color of the button\n   */\n  color?: 'blue' | 'green' | 'red';\n  /**\n   * Button size\n   * @default md\n   */\n  size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n  /**\n   * Minimal appearance?\n   */\n  minimal?: boolean;\n  /**\n   * Left icon\n   */\n  icon?: React.ReactElement;\n  /** Right icon */\n  iconRight?: React.ReactElement;\n  /** Click handler */\n  onClick?: () => void;\n}\n\nconst mapIntentToColor = {\n  primary: 'blue',\n  success: 'green',\n  danger: 'red',\n  warning: 'yellow',\n};\n\nexport const TWButton = forwardRefWithAs<TWButtonProps, 'button'>(\n  (\n    {\n      as: is = 'button',\n      color,\n      intent = 'none',\n      size = 'md',\n      className,\n      icon,\n      minimal,\n\n      iconRight,\n      ...props\n    },\n    ref\n  ) => {\n    const { children } = props;\n    const tailwindColor = mapIntentToColor[intent] ?? color;\n    const iconIsOnlyChild: boolean = !!(\n      (icon && !iconRight && !children) ||\n      (iconRight && !icon && !children)\n    );\n    let sizeClasses;\n    let iconClasses;\n    if (size === 'xs') {\n      sizeClasses = 'text-xs rounded-md leading-4';\n      sizeClasses += iconIsOnlyChild ? ' p-1.5' : ' py-1.5 px-2.5';\n      iconClasses = 'h-3 w-3';\n    }\n    if (size === 'sm') {\n      sizeClasses = 'text-sm rounded-md leading-4';\n      sizeClasses += iconIsOnlyChild ? ' p-2' : ' py-2 px-3';\n      iconClasses = 'h-3 w-3';\n    }\n    if (size === 'md') {\n      sizeClasses = 'text-sm rounded-md leading-5';\n      sizeClasses += iconIsOnlyChild ? ' p-2' : ' py-2 px-4';\n      iconClasses = 'h-5 w-5';\n    }\n    if (size === 'lg') {\n      sizeClasses = 'text-base rounded-md leading-6';\n      sizeClasses += iconIsOnlyChild ? ' p-2' : ' py-2 px-4';\n      iconClasses = 'h-6 w-6';\n    }\n    if (size === 'xl') {\n      sizeClasses = 'text-base rounded-md leading-6';\n      sizeClasses += iconIsOnlyChild ? ' p-3' : ' py-3 px-6';\n      iconClasses = 'h-6 w-6';\n    }\n\n    const leftIcon = icon\n      ? React.cloneElement(icon, {\n          ...icon.props,\n          height: '1em',\n          width: '1em',\n          className: cx(\n            'block',\n            {\n              'text-white': !!tailwindColor && !minimal,\n              [`text-${tailwindColor}-700`]: !!tailwindColor && !!minimal,\n              'text-gray-600': !tailwindColor,\n              '-ml-1 mr-2': !iconIsOnlyChild,\n            },\n            iconClasses,\n            icon?.props.className\n          ),\n        })\n      : null;\n    const rightIcon = iconRight\n      ? React.cloneElement(iconRight, {\n          ...iconRight.props,\n          height: '1em',\n          width: '1em',\n          className: cx(\n            'block ',\n            {\n              'text-white': !!tailwindColor && !minimal,\n              [`text-${tailwindColor}-700`]: !!tailwindColor && !!minimal,\n              'text-gray-600': !tailwindColor,\n              '-mr-1 ml-2': !iconIsOnlyChild,\n            },\n            iconClasses,\n            iconRight?.props.className\n          ),\n        })\n      : null;\n\n    const propsToPass = {\n      ...props,\n      className: cx(\n        'font-medium inline-flex items-center  focus:outline-none transition duration-150 ease-in-out',\n        {\n          [`ring-1 ring-black ring-opacity-5  border border-transparent text-white bg-${tailwindColor}-600 hover:bg-${tailwindColor}-500 focus:border-${tailwindColor}-700 focus:ring focus:ring-${tailwindColor} active:border-${tailwindColor}-700`]:\n            !!tailwindColor && !minimal,\n          [`ring-1 ring-black ring-opacity-5 border border-gray-300 text-gray-700 bg-white hover:text-gray-500  focus:ring focus:ring-blue focus:border-blue-300 active:text-gray-800 active:bg-gray-50`]:\n            !tailwindColor && !minimal,\n          [`hover:bg-${tailwindColor}-100 active:bg-${tailwindColor}-200 text-${tailwindColor}-700 focus:ring focus:ring-${tailwindColor} border-transparent`]:\n            minimal && tailwindColor,\n          [`hover:bg-gray-200 active:bg-gray-300 text-gray-900 focus:ring focus:ring-blue border-transparent`]:\n            minimal && !tailwindColor,\n        },\n        sizeClasses,\n        className\n      ),\n      children: (\n        <>\n          {leftIcon}\n          {children}\n          {rightIcon}\n        </>\n      ),\n    };\n\n    let { buttonProps } = useButton(\n      {\n        ...props,\n        elementType: is,\n      } as any,\n      ref\n    );\n\n    return React.createElement(is, {\n      ...propsToPass,\n      ...buttonProps,\n      ref,\n      className: propsToPass.className,\n    });\n  }\n);\n\nTWButton.displayName = 'TWButton';\n"
  },
  {
    "path": "website/src/components/Toc.module.css",
    "content": "/* purgecss start ignore */\n.contents__link {\n  @apply text-gray-700;\n}\n\n.contents__link:hover {\n  @apply text-blue-600;\n}\n\n.contents__link--active {\n  @apply font-medium text-blue-700;\n}\n/* purgecss end ignore */\n"
  },
  {
    "path": "website/src/components/Toc.tsx",
    "content": "import * as React from 'react';\nimport cx from 'classnames';\nimport { useTocHighlight } from './useTocHighlight';\nimport { Post } from 'lib/types';\nimport styles from './Toc.module.css';\n\nconst TOP_OFFSET = 100;\n\nfunction getHeaderAnchors(): Element[] {\n  return Array.prototype.filter.call(\n    document.getElementsByClassName('anchor'),\n    function (testElement) {\n      return (\n        testElement.parentNode.nodeName === 'H2' ||\n        testElement.parentNode.nodeName === 'H3'\n      );\n    }\n  );\n}\nfunction getHeaderDataFromAnchors(el: Element) {\n  return {\n    url: el.getAttribute('href'),\n    text: el.parentElement?.innerText,\n    depth: Number(el.parentElement?.nodeName.replace('H', '')),\n  };\n}\n\nexport const Toc: React.FC<{}> = () => {\n  const headings = useTocHighlight(\n    styles.contents__link,\n    styles['contents__link--active'],\n    TOP_OFFSET,\n    getHeaderAnchors,\n    getHeaderDataFromAnchors,\n    el => el?.parentElement?.id\n  );\n  return (\n    <ul className=\"space-y-3\">\n      {headings &&\n        headings.length > 0 &&\n        headings.map((h, i) =>\n          h.url ? (\n            <li\n              key={`heading-${h.url}-${i}`}\n              className={cx('text-sm ', {\n                ['pl-2']: h?.depth === 3,\n                ['hidden']: h.depth && h.depth > 3,\n              })}\n            >\n              <a className={styles.contents__link} href={h.url}>\n                {h.text}\n              </a>\n            </li>\n          ) : null\n        )}\n    </ul>\n  );\n};\n"
  },
  {
    "path": "website/src/components/addRouterEvents.tsx",
    "content": "import type { NextRouter } from 'next/router';\n\nfunction hasModifier(event: any) {\n  return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n}\n/**\n * Util to add router events to anchors that weren't added with React Components\n */\nexport default function addRouterEvents(\n  node: Node,\n  router: NextRouter,\n  { href }: { href: string }\n) {\n  function onClick(e: any) {\n    const linkTarget = e.currentTarget.target;\n    if (\n      !(\n        e.defaultPrevented ||\n        hasModifier(e) ||\n        (linkTarget && linkTarget !== '_self')\n      )\n    ) {\n      e.preventDefault();\n      router.push(href).then(success => {\n        if (success) {\n          window.scrollTo(0, 0);\n          document.body.focus();\n        }\n      });\n    }\n  }\n  function onMouseEnter() {\n    router.prefetch(href, href, { priority: true });\n  }\n  node.addEventListener('click', onClick as any); // EventListener\n  node.addEventListener('mouseenter', onMouseEnter);\n  return () => {\n    node.removeEventListener('click', onClick); // EventListener\n    node.removeEventListener('mouseenter', onMouseEnter);\n  };\n}\n"
  },
  {
    "path": "website/src/components/clients/Client.tsx",
    "content": "import React from 'react';\nimport Image from 'next/image';\n\ninterface ClientProps {\n  name: string;\n  image: string;\n  className?: string;\n  style?: React.CSSProperties;\n}\n\nexport const Client = React.memo<ClientProps>(\n  ({ name, image, style, ...rest }) => (\n    <span title={name} {...rest}>\n      <Image\n        src={image}\n        alt={name}\n        width={style?.width ?? style?.maxWidth ?? (175 as any)}\n        height={style?.height ?? (75 as any)}\n        loading=\"lazy\"\n        className=\"inline\"\n        style={{\n          maxWidth: '100%',\n          height: 'auto',\n        }}\n      />\n    </span>\n  )\n);\n"
  },
  {
    "path": "website/src/components/clients/ClientsMarquee.tsx",
    "content": "import React from 'react';\nimport { Client } from './Client';\nimport { users } from 'users';\n\nconst pinnedLogos = users.filter(p => p.pinned);\n\nexport const ClientsMarquee = React.memo(props => {\n  return (\n    <div className=\"overflow-x-hidden\">\n      <div className=\"relative\" {...props}>\n        <div className=\"inline-block wrapper\">\n          {pinnedLogos.map(({ caption, infoLink, image, style }) => (\n            <Client\n              className=\"mx-8 align-middle opacity-50\"\n              key={caption}\n              style={style}\n              name={caption}\n              image={image}\n            />\n          ))}\n        </div>\n\n        <style jsx global>{`\n          @keyframes slidein {\n            from {\n              transform: translate3d(0, 0, 0);\n            }\n\n            to {\n              transform: translate3d(-100%, 0, 0);\n            }\n          }\n          .wrapper {\n            position: relative;\n            white-space: nowrap;\n            display: inline-block;\n            animation: slidein 60s linear infinite;\n            filter: grayscale(100%);\n          }\n        `}</style>\n      </div>\n    </div>\n  );\n});\n\n(ClientsMarquee as any).displayName = 'ClientsMarquee';\n"
  },
  {
    "path": "website/src/components/clients/Filters.tsx",
    "content": "import React from 'react';\n\nexport const Filters: React.FC<{}> = () => (\n  <>\n    <svg width={0} height={0}>\n      <defs>\n        <filter id=\"high-threshold\">\n          <feColorMatrix type=\"saturate\" values=\"0\" />\n          <feComponentTransfer>\n            <feFuncR type=\"discrete\" tableValues=\"0\" />\n            <feFuncG type=\"discrete\" tableValues=\"0\" />\n            <feFuncB type=\"discrete\" tableValues=\"0\" />\n          </feComponentTransfer>\n        </filter>\n      </defs>\n    </svg>\n    <svg width={0} height={0}>\n      <defs>\n        <filter id=\"medium-threshold\">\n          <feColorMatrix type=\"saturate\" values=\"0\" />\n          <feComponentTransfer>\n            <feFuncR type=\"discrete\" tableValues=\"0 1\" />\n            <feFuncG type=\"discrete\" tableValues=\"0 1\" />\n            <feFuncB type=\"discrete\" tableValues=\"0 1\" />\n          </feComponentTransfer>\n        </filter>\n      </defs>\n    </svg>\n    <svg width={0} height={0}>\n      <defs>\n        <filter id=\"low-threshold\">\n          <feColorMatrix type=\"saturate\" values=\"0\" />\n          <feComponentTransfer>\n            <feFuncR type=\"discrete\" tableValues=\"0 0 0 0 1\" />\n            <feFuncG type=\"discrete\" tableValues=\"0 0 0 0 1\" />\n            <feFuncB type=\"discrete\" tableValues=\"0 0 0 0 1\" />\n          </feComponentTransfer>\n        </filter>\n      </defs>\n    </svg>\n  </>\n);\n"
  },
  {
    "path": "website/src/components/forwardRefWithAs.tsx",
    "content": "import * as React from 'react';\n\n/**\n * React.Ref uses the readonly type `React.RefObject` instead of\n * `React.MutableRefObject`, We pretty much always assume ref objects are\n * mutable (at least when we create them), so this type is a workaround so some\n * of the weird mechanics of using refs with TS.\n */\nexport type AssignableRef<ValueType> =\n  | {\n      bivarianceHack(instance: ValueType | null): void;\n    }['bivarianceHack']\n  | React.MutableRefObject<ValueType | null>\n  | null;\n\n////////////////////////////////////////////////////////////////////////////////\n// The following types help us deal with the `as` prop.\n// I kind of hacked around until I got this to work using some other projects,\n// as a rough guide, but it does seem to work so, err, that's cool? Yay TS! 🙃\n// P = additional props\n// T = type of component to render\n\nexport type As<BaseProps = any> = React.ElementType<BaseProps>;\n\nexport type PropsWithAs<\n  ComponentType extends As,\n  ComponentProps\n> = ComponentProps &\n  Omit<\n    React.ComponentPropsWithRef<ComponentType>,\n    'as' | keyof ComponentProps\n  > & {\n    as?: ComponentType;\n  };\n\nexport type PropsFromAs<\n  ComponentType extends As,\n  ComponentProps\n> = (PropsWithAs<ComponentType, ComponentProps> & { as: ComponentType }) &\n  PropsWithAs<ComponentType, ComponentProps>;\n\nexport type ComponentWithForwardedRef<\n  ElementType extends React.ElementType,\n  ComponentProps\n> = React.ForwardRefExoticComponent<\n  ComponentProps &\n    React.HTMLProps<React.ElementType<ElementType>> &\n    React.ComponentPropsWithRef<ElementType>\n>;\n\nexport interface ComponentWithAs<ComponentType extends As, ComponentProps> {\n  // These types are a bit of a hack, but cover us in cases where the `as` prop\n  // is not a JSX string type. Makes the compiler happy so 🤷‍♂️\n  <TT extends As>(\n    props: PropsWithAs<TT, ComponentProps>\n  ): React.ReactElement | null;\n  (\n    props: PropsWithAs<ComponentType, ComponentProps>\n  ): React.ReactElement | null;\n\n  displayName?: string;\n  propTypes?: React.WeakValidationMap<\n    PropsWithAs<ComponentType, ComponentProps>\n  >;\n  contextTypes?: React.ValidationMap<any>;\n  defaultProps?: Partial<PropsWithAs<ComponentType, ComponentProps>>;\n}\n\n/**\n * This is a hack for sure. The thing is, getting a component to intelligently\n * infer props based on a component or JSX string passed into an `as` prop is\n * kind of a huge pain. Getting it to work and satisfy the constraints of\n * `forwardRef` seems dang near impossible. To avoid needing to do this awkward\n * type song-and-dance every time we want to forward a ref into a component\n * that accepts an `as` prop, we abstract all of that mess to this function for\n * the time time being.\n *\n * TODO: Eventually we should probably just try to get the type defs above\n * working across the board, but ain't nobody got time for that mess!\n *\n * @param Comp\n */\nexport function forwardRefWithAs<Props, ComponentType extends As>(\n  comp: (\n    props: PropsFromAs<ComponentType, Props>,\n    ref: React.RefObject<any>\n  ) => React.ReactElement | null\n) {\n  return (React.forwardRef(comp as any) as unknown) as ComponentWithAs<\n    ComponentType,\n    Props\n  >;\n}\n\n/*\nTest components to make sure our dynamic As prop components work as intended \ntype PopupProps = {\n  lol: string;\n  children?: React.ReactNode | ((value?: number) => React.JSX.Element);\n};\nexport const Popup = forwardRefWithAs<PopupProps, 'input'>(\n  ({ as: Comp = 'input', lol, className, children, ...props }, ref) => {\n    return (\n      <Comp ref={ref} {...props}>\n        {typeof children === 'function' ? children(56) : children}\n      </Comp>\n    );\n  }\n);\nexport const TryMe1: React.FC = () => {\n  return <Popup as=\"input\" lol=\"lol\" name=\"me\" />;\n};\nexport const TryMe2: React.FC = () => {\n  let ref = React.useRef(null);\n  return <Popup ref={ref} as=\"div\" lol=\"lol\" />;\n};\n\nexport const TryMe4: React.FC = () => {\n  return <Popup as={Whoa} lol=\"lol\" test=\"123\" name=\"boop\" />;\n};\nexport const Whoa: React.FC<{\n  help?: boolean;\n  lol: string;\n  name: string;\n  test: string;\n}> = props => {\n  return <input {...props} />;\n};\n*/\n// export const TryMe3: React.FC = () => {\n//   return <Popup as={Cool} lol=\"lol\" name=\"me\" test=\"123\" />;\n// };\n// let Cool = styled(Whoa)`\n//   padding: 10px;\n// `\n"
  },
  {
    "path": "website/src/components/markdown.module.css",
    "content": "/* purgecss start ignore */\n.markdown {\n  @apply leading-relaxed text-gray-700 text-base;\n}\n\n/* \n  Add fake margin to offset the nav. This technique is stolen right from the Tailwind docs \n  @see https://tailwindcss.com/docs/customizing-colors/#app\n*/\n.markdown > h1:before,\n.markdown > a > h1:before,\n.markdown > h2:before,\n.markdown > a > h2:before,\n.markdown > h3:before,\n.markdown > a > h3:before,\n.markdown > h4:before,\n.markdown > a > h4:before,\n.markdown > h5:before,\n.markdown > a > h5:before,\n.markdown > h6:before,\n.markdown > a > h6:before {\n  display: block;\n  height: 6rem;\n  margin-top: -6rem;\n  visibility: hidden;\n  content: '';\n}\n\n.markdown > h1,\n.markdown > a > h1 {\n  @apply mb-6 text-4xl font-semibold leading-snug tracking-tight text-gray-900;\n}\n\n.markdown > h2,\n.markdown > a > h2 {\n  @apply mt-12 mb-4 text-2xl font-semibold  text-gray-900;\n}\n\n.markdown > h2 code,\n.markdown > a > h2 code {\n  @apply text-xl;\n}\n\n.markdown > h3,\n.markdown > a > h3 {\n  @apply mt-8 mb-3 text-xl font-semibold  text-gray-900;\n}\n\n.markdown > h3 code,\n.markdown > a > h3 code {\n  @apply text-lg;\n}\n\n.markdown > h4,\n.markdown > a > h4 {\n  @apply pt-8 mb-3 text-lg font-semibold  text-gray-900;\n}\n\n.markdown > h4 code,\n.markdown > a > h4 code {\n  @apply text-base;\n}\n\n.markdown > p > a,\n.markdown > ul > li > a,\n.markdown > ol > li > a,\n.markdown > table > tbody > tr > td > a {\n  @apply text-blue-600 transition-colors duration-150 ease-out;\n}\n\n.markdown > p > a:hover,\n.markdown > ul > li > a:hover,\n.markdown > ol > li > a:hover,\n.markdown > table > tbody > tr > td > a:hover {\n  @apply text-blue-700  duration-150 ease-out underline;\n}\n\n.markdown strong {\n  @apply font-semibold;\n}\n\n.markdown > p,\n.markdown > ul,\n.markdown > ol,\n.markdown > blockquote,\n.markdown > pre,\n.markdown > div > .code-block {\n  @apply mb-4;\n}\n\n.markdown > ul,\n.markdown > ul > li > ul {\n  @apply ml-8 list-disc;\n}\n\n.markdown > ol {\n  @apply ml-8 list-decimal;\n}\n\n.markdown > pre,\n.markdown > div > .code-block > pre {\n  color: #f8f8f2;\n  overflow: auto;\n}\n\n.markdown > table {\n  @apply mb-6 w-full text-gray-700 text-sm;\n}\n\n.markdown > table > thead > tr {\n  @apply border-b border-t;\n}\n\n.markdown > table > thead > tr > th {\n  @apply px-3 py-2 text-left text-sm font-semibold bg-gray-100 text-gray-700;\n}\n\n.markdown > table > tbody > tr {\n  @apply border-b;\n}\n\n.markdown > table > tbody > tr > td {\n  @apply p-3;\n}\n\n.markdown > :not(pre):not(h3) > code,\n.markdown > ul > li > code,\n.markdown > blockquote > code,\n.markdown > blockquote > p > code,\n.markdown > ul > li > ul > li > code,\n.markdown > ol > li > code,\n.markdown > ol > li > ol > li > code,\n.markdown > p a > code,\n.markdown > table > tbody > tr > td:not(:first-child) > code {\n  @apply bg-gray-100 ring-1 ring-black ring-opacity-5 rounded px-1;\n  margin-left: 2px;\n  margin-right: 2px;\n  padding-top: 2px;\n  padding-bottom: 2px;\n  word-break: keep-all;\n  font-size: 0.875em;\n}\n\n.markdown > table > tbody > tr > td:not(:first-child) > code {\n  @apply text-xs;\n}\n\n.markdown > table > tbody > tr > td > a > code,\n.markdown > table > tbody > tr > td > code {\n  @apply text-sm;\n}\n\n.markdown > h2 > code {\n  @apply text-xl;\n}\n\n.markdown > .markdown ul {\n  @apply list-disc;\n}\n\n.markdown > hr {\n  @apply my-6 block border-b;\n}\n\n/* Blockquotes */\n.markdown blockquote {\n  @apply p-3 bg-blue-50 rounded-lg text-sm leading-5 text-blue-700;\n}\n.markdown blockquote > p {\n  @apply mb-0;\n}\n\n.markdown pre {\n  @apply p-4 rounded-lg text-sm;\n}\n/* purgecss end ignore */\n"
  },
  {
    "path": "website/src/components/useBoolean.tsx",
    "content": "import { useState, useCallback } from 'react';\n\ninterface BooleanUpdater {\n  setValue: (value: boolean) => void;\n  toggle: () => void;\n  setTrue: () => void;\n  setFalse: () => void;\n}\n\nexport const useBoolean = (initial: boolean) => {\n  const [value, setValue] = useState(initial);\n  return [\n    value,\n    {\n      setValue,\n      toggle: useCallback(() => setValue(v => !v), []),\n      setTrue: useCallback(() => setValue(true), []),\n      setFalse: useCallback(() => setValue(false), []),\n    },\n  ] as [boolean, BooleanUpdater];\n};\n"
  },
  {
    "path": "website/src/components/useClipboard.tsx",
    "content": "import * as React from 'react';\nimport copy from 'copy-to-clipboard';\n\n/**\n * React hook to copy content to clipboard\n *\n * @param text the text or value to copy\n * @param timeout delay (in ms) to switch back to initial state once copied.\n */\nexport function useClipboard(text: string, timeout = 1500) {\n  const [hasCopied, setHasCopied] = React.useState(false);\n\n  const onCopy = React.useCallback(() => {\n    const didCopy = copy(text);\n    setHasCopied(didCopy);\n  }, [text]);\n\n  // @ts-ignore\n  React.useEffect(() => {\n    if (hasCopied) {\n      const id = setTimeout(() => {\n        setHasCopied(false);\n      }, timeout);\n\n      return () => clearTimeout(id);\n    }\n  }, [timeout, hasCopied]);\n\n  return [hasCopied, onCopy] as const;\n}\n"
  },
  {
    "path": "website/src/components/useIsMobile.tsx",
    "content": "import { useState, useCallback, useEffect } from 'react';\n\nconst useMediaQuery = (width: number) => {\n  const [targetReached, setTargetReached] = useState(false);\n\n  const updateTarget = useCallback((e: any) => {\n    if (e.matches) {\n      setTargetReached(true);\n    } else {\n      setTargetReached(false);\n    }\n  }, []);\n\n  useEffect(() => {\n    const media = window.matchMedia(`(max-width: ${width}px)`);\n    media.addListener(updateTarget);\n\n    // Check on mount (callback is not called until a change occurs)\n    if (media.matches) {\n      setTargetReached(true);\n    }\n\n    return () => media.removeListener(updateTarget);\n  }, []);\n\n  return targetReached;\n};\n\nconst useIsMobile = () => {\n  return useMediaQuery(640);\n};\n\nexport { useMediaQuery, useIsMobile };\n"
  },
  {
    "path": "website/src/components/useOverScroll.tsx",
    "content": "import * as React from 'react';\nimport {\n  useViewportScroll,\n  motion,\n  useTransform,\n  HTMLMotionProps,\n} from 'framer-motion';\nimport { throttle } from './utils/throttle';\n\nconst throttleFn = (cb: Function) => throttle(cb, 100);\n\nexport const useOverScroll = () => {\n  const { scrollY } = useViewportScroll();\n  const ref = React.useRef<HTMLDivElement>(null);\n  const refInner = React.useRef<HTMLDivElement>(null);\n  const [height, setHeight] = React.useState(\n    typeof window !== 'undefined' ? window.innerHeight : 0\n  );\n  const [rect, setRect] = React.useState<DOMRect>({\n    top: 0,\n    left: 0,\n    right: 0,\n    bottom: 0,\n    x: 0,\n    y: 0,\n  } as any);\n  const [rectInner, setRectInner] = React.useState<DOMRect>({\n    top: 0,\n    left: 0,\n    right: 0,\n    bottom: 0,\n    x: 0,\n    y: 0,\n  } as any);\n  const y = useTransform(\n    scrollY,\n    [rect.bottom - height, rect.top + 300],\n    [0, -rectInner.height + rect.height]\n  );\n  React.useEffect(() => {\n    if (ref.current) {\n      setRect(ref.current.getBoundingClientRect());\n    }\n  }, [setRect, ref]);\n\n  React.useEffect(() => {\n    if (refInner.current) {\n      setRectInner(refInner.current.getBoundingClientRect());\n    }\n  }, [setRectInner, refInner]);\n\n  return { ref, refInner, y };\n};\n"
  },
  {
    "path": "website/src/components/useTocHighlight.tsx",
    "content": "import React from 'react';\n\ninterface HeadingData {\n  text?: string | null;\n  url?: string | null;\n  depth?: number;\n}\n/**\n * Sets up Table of Contents highlighting. It requires that\n */\nexport function useTocHighlight(\n  linkClassName: string,\n  linkActiveClassName: string,\n  topOffset: number,\n  getHeaderAnchors: () => Element[],\n  getHeaderDataFromAnchor: (el: Element) => HeadingData,\n  getAnchorHeaderIdentifier: (el: Element) => string | undefined\n) {\n  const [lastActiveLink, setLastActiveLink] = React.useState<\n    Element | undefined\n  >(undefined);\n  const [headings, setHeadings] = React.useState<HeadingData[]>([]);\n\n  React.useEffect(() => {\n    setHeadings(getHeaderAnchors().map(getHeaderDataFromAnchor));\n  }, [setHeadings]);\n\n  React.useEffect(() => {\n    let headersAnchors: any[] = [];\n    let links: any[] = [];\n\n    function setActiveLink() {\n      function getActiveHeaderAnchor() {\n        let index = 0;\n        let activeHeaderAnchor = null;\n\n        headersAnchors = getHeaderAnchors();\n        while (index < headersAnchors.length && !activeHeaderAnchor) {\n          const headerAnchor = headersAnchors[index];\n          const { top } = headerAnchor.getBoundingClientRect();\n\n          if (top >= 0 && top <= topOffset) {\n            activeHeaderAnchor = headerAnchor;\n          }\n\n          index += 1;\n        }\n\n        return activeHeaderAnchor;\n      }\n\n      const activeHeaderAnchor = getActiveHeaderAnchor();\n\n      if (activeHeaderAnchor) {\n        let index = 0;\n        let itemHighlighted = false;\n\n        links = document.getElementsByClassName(linkClassName) as any;\n\n        while (index < links.length && !itemHighlighted) {\n          const link = links[index];\n          const { href } = link;\n          const anchorValue = decodeURIComponent(\n            href.substring(href.indexOf('#') + 1)\n          );\n\n          if (getAnchorHeaderIdentifier(activeHeaderAnchor) === anchorValue) {\n            if (lastActiveLink) {\n              lastActiveLink.classList.remove(linkActiveClassName);\n            }\n\n            link.classList.add(linkActiveClassName);\n            setLastActiveLink(link);\n            itemHighlighted = true;\n          }\n\n          index += 1;\n        }\n      }\n    }\n\n    document.addEventListener('scroll', setActiveLink);\n    document.addEventListener('resize', setActiveLink);\n\n    setActiveLink();\n\n    return () => {\n      document.removeEventListener('scroll', setActiveLink);\n      document.removeEventListener('resize', setActiveLink);\n    };\n  });\n\n  return headings;\n}\n"
  },
  {
    "path": "website/src/components/utils/throttle.ts",
    "content": "export const throttle = (func: any, limit: any) => {\n  let inThrottle: any;\n  return function () {\n    const args = arguments;\n    // @ts-ignore\n    const context = this;\n    if (!inThrottle) {\n      func.apply(context, args);\n      inThrottle = true;\n      setTimeout(() => (inThrottle = false), limit);\n    }\n  };\n};\n"
  },
  {
    "path": "website/src/index.d.ts",
    "content": "declare module 'remark-html';\ndeclare module 'remark-toc';\ndeclare module 'remark-footnotes';\ndeclare module 'remark-github';\ndeclare module 'remark-slug';\ndeclare module 'remark-autolink-headings';\ndeclare module 'remark-images';\ndeclare module 'rehype-shiki';\ndeclare module 'remark-rehype';\ndeclare module 'rehype-format';\ndeclare module 'rehype-img-size';\ndeclare module 'rehype-stringify';\ndeclare module 'classnames';\ndeclare module 'docsearch.js';\ndeclare module '@docsearch/react';\ndeclare module '@docsearch/react/modal';\ndeclare module 'prismjs';\ndeclare module 'async-sema';\ndeclare module 'node-fetch';\ndeclare module '@zeit/react-jsx-parser';\ndeclare module 'github-slugger';\ndeclare module '@reactions/component';\n"
  },
  {
    "path": "website/src/lib/blog/mdxUtils.ts",
    "content": "import fs from 'fs';\nimport path from 'path';\n\n// POSTS_PATH is useful when you want to get the path to a specific file\nexport const POSTS_PATH = path.join(process.cwd(), 'src', 'blog');\n\n// postFilePaths is the list of all mdx files inside the POSTS_PATH directory\nexport const postFilePaths = fs\n  .readdirSync(POSTS_PATH)\n  // Only include md(x) files\n  .filter(path => /\\.mdx?$/.test(path));\n"
  },
  {
    "path": "website/src/lib/docs/config.ts",
    "content": "// Default tag if the latest release was not found\nexport const TAG = 'v2.4.0';\n// If a version different from the latest release is required, update TAG with the wanted\n// version and set this to `true`\nexport const FORCE_TAG = true;\n"
  },
  {
    "path": "website/src/lib/docs/findRouteByPath.tsx",
    "content": "import { removeFromLast } from './utils';\nimport { RouteItem } from '../types';\n\n// @ts-ignore\nexport function findRouteByPath(path: string, routes: RouteItem[]): RouteItem {\n  // eslint-disable-next-line\n  for (const route of routes) {\n    if (route.path && removeFromLast(route.path, '.') === path) {\n      return route;\n    }\n    const childPath = route.routes && findRouteByPath(path, route.routes);\n    if (childPath) return childPath;\n  }\n}\n"
  },
  {
    "path": "website/src/lib/docs/md-loader.js",
    "content": "const fm = require('gray-matter');\n\n// makes mdx in next.js suck less by injecting necessary exports so that\n// the docs are still readable on github\n// (Shamelessly stolen from Expo.io docs)\n// @see https://github.com/expo/expo/blob/master/docs/common/md-loader.js\nmodule.exports = async function (src) {\n  const callback = this.async();\n  const { content, data } = fm(src);\n  const layout = data.layout || 'Docs';\n  const code =\n    `import { Layout${layout} } from 'components/Layout${layout}';\n\nexport default function Wrapper ({ children, ...props }) { return (\n  <Layout${layout} meta={${JSON.stringify(\n      data\n    )}} {...props}>{children}</Layout${layout}>\n);\n}\n\n\n` + content;\n\n  return callback(null, code);\n};\n"
  },
  {
    "path": "website/src/lib/docs/page.tsx",
    "content": "import { getLatestTag } from '../github/api';\nimport { getRawFileFromRepo } from '../github/raw';\nimport { removeFromLast } from './utils';\nimport { TAG, FORCE_TAG } from './config';\nimport { RouteItem } from '../types';\nimport util from 'util';\nimport fs from 'fs';\nimport { join } from 'path';\n\nconst read = util.promisify(fs.readFile);\n\nexport async function getCurrentTag(tag?: string) {\n  if (tag) return tag;\n  if (FORCE_TAG) return TAG;\n  return getLatestTag();\n}\n\nconst postsDirectory = join(process.cwd(), '../.');\n\nexport async function getRawFileFromLocal(path: string) {\n  const fullPath = join(postsDirectory, path);\n  const fileContents = await read(fullPath, 'utf8');\n  return fileContents;\n}\n\nexport async function fetchLocalDocsManifest() {\n  const routes = await getRawFileFromLocal('/docs/manifest.json');\n  return JSON.parse(routes);\n}\n\nexport async function fetchRemoteDocsManifest(tag: string) {\n  const res = await getRawFileFromRepo('/docs/manifest.json', tag);\n  return JSON.parse(res);\n}\n\nexport function getPaths(\n  nextRoutes: RouteItem[],\n  carry: string[] = []\n): string[] {\n  nextRoutes.forEach(({ path, routes }) => {\n    if (path) {\n      carry.push(removeFromLast(path, '.'));\n    } else if (routes) {\n      getPaths(routes, carry);\n    }\n  });\n\n  return carry;\n}\n"
  },
  {
    "path": "website/src/lib/docs/rehype-docs.js",
    "content": "import { resolve } from 'url';\nimport visit from 'unist-util-visit';\nimport toString from 'mdast-util-to-string';\nimport GithubSlugger from 'github-slugger';\nimport { GITHUB_URL, REPO_NAME } from '../github/constants';\n\nconst ABSOLUTE_URL = /^https?:\\/\\/|^\\/\\//i;\nconst SITE_URL = /^(https?:\\/\\/|^\\/\\/)formik\\.org/i;\n// The headers will be updated to include a link to their hash\nconst HEADINGS = ['h2', 'h3', 'h4', 'h5', 'h6'];\n\nfunction removeExt(path) {\n  const basePath = path.split(/#|\\?/)[0];\n  const i = basePath.lastIndexOf('.');\n\n  if (i === -1 || i === 0) return path;\n  return basePath.substring(0, i) + path.substring(basePath.length);\n}\n\nfunction visitCard(node) {\n  if (\n    !node.children ||\n    !node.properties ||\n    !node.properties.className ||\n    !node.properties.className.includes('card')\n  )\n    return;\n\n  const anchor = node.children.find(n => n.tagName === 'a');\n\n  if (!anchor || !anchor.children) return;\n\n  const title = anchor.children.find(n => n.tagName === 'b');\n  const text = anchor.children.find(n => n.tagName === 'small');\n\n  if (!title || !text) return;\n\n  const titleText = title.children.pop();\n\n  // Remove `:` from the title if it ends with it\n  if (titleText && titleText.value && titleText.value.endsWith(':')) {\n    titleText.value = titleText.value.slice(0, -1);\n  }\n\n  title.children.push(titleText);\n  anchor.children = [{ ...title, tagName: 'h4' }, text];\n}\n\nexport default function rehypeDocs({ filePath, tag }) {\n  const slugger = new GithubSlugger();\n  const anchorSlugger = new GithubSlugger();\n  // Don't use the custom tag here, relative URLs to repo files should always go to canary\n  const blobUrl = `${GITHUB_URL}/${REPO_NAME}/blob/main`;\n\n  function visitAnchor(node) {\n    const props = node.properties;\n    const href = props?.href;\n\n    if (!href) return;\n\n    props.href = href.replace(SITE_URL, '');\n\n    const isDocs = href.startsWith('/docs') || href.startsWith('.');\n\n    if (props.href === href) {\n      const isAbsoluteUrl = ABSOLUTE_URL.test(href);\n      const isHash = href[0] === '#';\n      const isRepoUrl = !isHash && !isDocs;\n      if (\n        props.className &&\n        props.className.includes &&\n        props.className.includes('anchor')\n      ) {\n        return;\n      }\n      if (isAbsoluteUrl || isRepoUrl) {\n        props.className = 'absolute-link';\n        props.target = '_blank';\n        props.rel = 'noopener noreferrer';\n\n        if (!isAbsoluteUrl) {\n          // Turn any relative URL that's not handled by the Next.js site into an absolute URL\n          props.href = blobUrl + resolve(filePath, href);\n        }\n        return;\n      }\n    }\n\n    const [relativePath, hash] = props.href.split('#');\n\n    // Reset the slugger because single pages can have multiple urls to the same hash\n    anchorSlugger.reset();\n    // The URL is relative at this point\n    props.className = 'relative-link';\n    // Update the hash used by anchors to match the one set for headers\n    props.href = hash\n      ? `${relativePath}#${anchorSlugger.slug(hash)}`\n      : relativePath;\n\n    //turn URL to absolute path for correct doc route\n    if (isDocs) {\n      let absolutePath = resolve(filePath, relativePath);\n      // Reset the slugger because single pages can have multiple urls to the same hash\n      anchorSlugger.reset();\n      props.href = hash\n        ? `${absolutePath}#${anchorSlugger.slug(hash)}`\n        : absolutePath;\n      props.className = 'absolute-link';\n      props.href = removeExt(\n        tag ? props.href.replace('/docs', `/docs/tag/${tag}`) : props.href\n      );\n    }\n  }\n\n  function visitHeading(node) {\n    const text = toString(node);\n\n    if (!text) return;\n\n    const id = slugger.slug(text);\n\n    node.properties.className = 'heading';\n    node.children = [\n      {\n        type: 'element',\n        tagName: 'span',\n        properties: { id },\n      },\n      {\n        type: 'element',\n        tagName: 'a',\n        properties: {\n          href: `#${id}`,\n        },\n        children: node.children,\n      },\n      {\n        type: 'element',\n        tagName: 'span',\n        properties: { className: 'permalink' },\n        children: [permalinkIcon],\n      },\n    ];\n  }\n\n  return function transformer(tree) {\n    visit(tree, node => node.tagName === 'a', visitAnchor);\n    // visit(tree, (node) => HEADINGS.includes(node.tagName), visitHeading);\n    visit(tree, node => node.tagName === 'div', visitCard);\n  };\n}\n"
  },
  {
    "path": "website/src/lib/docs/remark-paragraph-alerts.js",
    "content": "const is = require('unist-util-is');\nconst visit = require('unist-util-visit');\n\nconst sigils = {\n  '=>': 'success',\n  '->': 'info',\n  '~>': 'warning',\n  '!>': 'danger',\n};\n\nmodule.exports = function paragraphCustomAlertsPlugin() {\n  return function transformer(tree) {\n    visit(tree, 'paragraph', (pNode, _, parent) => {\n      visit(pNode, 'text', textNode => {\n        Object.keys(sigils).forEach(symbol => {\n          if (textNode.value.startsWith(`${symbol} `)) {\n            // Remove the literal sigil symbol from string contents\n            textNode.value = textNode.value.replace(`${symbol} `, '');\n\n            // Wrap matched nodes with <div> (containing proper attributes)\n            parent.children = parent.children.map(node => {\n              return is(pNode, node)\n                ? {\n                    type: 'wrapper',\n                    children: [node],\n                    data: {\n                      hName: 'div',\n                      hProperties: {\n                        className: ['alert', `alert-${sigils[symbol]}`],\n                        role: 'alert',\n                      },\n                    },\n                  }\n                : node;\n            });\n          }\n        });\n      });\n    });\n  };\n};\n"
  },
  {
    "path": "website/src/lib/docs/remark-plugins.js",
    "content": "module.exports = [\n  require('remark-slug'),\n  require('./remark-paragraph-alerts'),\n  [\n    require('remark-autolink-headings'),\n    {\n      behavior: 'append',\n      linkProperties: {\n        class: ['anchor'],\n        title: 'Direct link to heading',\n      },\n    },\n  ],\n  [\n    require('remark-toc'),\n    {\n      skip: 'Reference',\n      maxDepth: 6,\n    },\n  ],\n  require('remark-emoji'),\n  require('remark-footnotes'),\n  require('remark-images'),\n];\n"
  },
  {
    "path": "website/src/lib/docs/utils.ts",
    "content": "import { NextRouter } from 'next/router';\n\nexport function getSlug({ slug }: { slug: string[] }) {\n  if (!slug) {\n    return { slug: '/docs/overview.md' };\n  }\n  if (slug[0] === 'tag') {\n    return {\n      tag: slug[1],\n      slug: `/docs/${slug.slice(2).join('/')}`,\n    };\n  }\n  return { slug: `/docs/${slug && slug.join('/')}` };\n}\n\nexport function removeFromLast(path: string, key: string) {\n  const i = path.lastIndexOf(key);\n  return i === -1 ? path : path.substring(0, i);\n}\n\nexport function addTagToSlug(slug: string, tag?: string) {\n  return tag ? slug.replace('/docs', `/docs/tag/${tag}`) : slug;\n}\n"
  },
  {
    "path": "website/src/lib/fs-utils.tsx",
    "content": "import fs from 'fs';\nimport { promisify } from 'util';\n\nexport const readFile = promisify(fs.readFile);\nexport const writeFile = promisify(fs.writeFile);\n"
  },
  {
    "path": "website/src/lib/get-route-context.tsx",
    "content": "import { RouteItem, Routes } from './types';\n\nexport interface RouteContext {\n  parent?: RouteItem;\n  prevRoute?: RouteItem;\n  nextRoute?: RouteItem;\n  route?: RouteItem;\n}\n/**\n * Returns the siblings of a specific route (that is the previous and next routes).\n */\nexport function getRouteContext(\n  _route: RouteItem,\n  routes: RouteItem[],\n  ctx: RouteContext = {}\n) {\n  if (!_route) {\n    return ctx;\n  }\n\n  const { path } = _route;\n  const { parent } = ctx;\n\n  for (let i = 0; i < routes.length; i += 1) {\n    const route = routes[i];\n\n    if (route.routes) {\n      ctx.parent = route;\n      ctx = getRouteContext(_route, route.routes, ctx);\n\n      // If the active route and the next route was found in nested routes, return it\n      if (ctx.nextRoute) return ctx;\n    }\n    if (!route) continue;\n    if (!route.path) continue;\n\n    if (ctx.route) {\n      ctx.nextRoute =\n        parent && i === 0\n          ? {\n              ...route,\n              title: `${_route.title} | ${parent.title}`,\n            }\n          : route;\n\n      return ctx;\n    }\n\n    if (route && route.path === path) {\n      ctx.route = {\n        ..._route,\n        title:\n          parent && !parent.heading\n            ? `${_route.title} | ${parent.title}`\n            : _route.title,\n      };\n      // Continue the loop until we know the next route\n      continue;\n    }\n\n    ctx.prevRoute =\n      parent && !parent.heading && !routes[i + 1]?.path\n        ? {\n            ...route,\n            title: `${route.title} | ${parent.title}`,\n          }\n        : route;\n  }\n\n  // The loop ended and the previous route was found, or nothing\n  return ctx;\n}\n"
  },
  {
    "path": "website/src/lib/github/api.tsx",
    "content": "import path from 'path';\nimport fetch from 'isomorphic-unfetch';\nimport { readFile, writeFile } from '../fs-utils';\nimport { GITHUB_API_URL, REPO_NAME } from './constants';\n\nconst USE_CACHE = process.env.USE_CACHE === 'true';\nconst TAG_CACHE_PATH = path.resolve('.github-latest-tag');\n\nexport async function getLatestTag() {\n  let cachedTag;\n\n  if (USE_CACHE) {\n    try {\n      cachedTag = await readFile(TAG_CACHE_PATH, 'utf8');\n    } catch (error) {\n      // A cached file is not required\n    }\n  }\n\n  if (!cachedTag) {\n    const res = await fetch(\n      `${GITHUB_API_URL}/repos/${REPO_NAME}/releases/latest`\n    );\n\n    if (res.ok) {\n      const data = await res.json();\n      const tag = data.tag_name;\n\n      if (USE_CACHE) {\n        try {\n          await writeFile(TAG_CACHE_PATH, tag, 'utf8');\n        } catch (error) {\n          // A cached file is not required\n        }\n      }\n\n      cachedTag = tag;\n    }\n  }\n\n  return cachedTag;\n}\n"
  },
  {
    "path": "website/src/lib/github/constants.tsx",
    "content": "export const GITHUB_URL = 'https://github.com';\n\nexport const GITHUB_API_URL = 'https://api.github.com';\n\nexport const RAW_GITHUB_URL = 'https://raw.githubusercontent.com';\n\nexport const REPO_NAME = 'formik/formik';\n"
  },
  {
    "path": "website/src/lib/github/raw.tsx",
    "content": "import fetch from 'isomorphic-unfetch';\nimport { RAW_GITHUB_URL, REPO_NAME } from './constants';\n\nfunction getErrorText(res: Response) {\n  try {\n    return res.text();\n  } catch (err) {\n    return res.statusText;\n  }\n}\n\ntype GHError = Error & { status?: Response['status']; headers?: any };\n\nasync function getError(res: Response): Promise<GHError> {\n  const errorText = await getErrorText(res);\n  const error: GHError = new Error(\n    `GitHub raw download error (${res.status}): ${errorText}`\n  );\n\n  error.status = res.status;\n  error.headers = (res.headers as any).raw();\n\n  return error;\n}\n\nexport async function getRawFileFromGitHub(path: string) {\n  const res = await fetch(RAW_GITHUB_URL + path);\n\n  if (res.ok) return res.text();\n  throw await getError(res);\n}\n\nexport async function getRawFileFromRepo(path: string, tag: string) {\n  return getRawFileFromGitHub(`/${REPO_NAME}/${tag}${path}`);\n}\n"
  },
  {
    "path": "website/src/lib/types.tsx",
    "content": "export interface RouteItem {\n  title: string;\n  path?: string;\n  open?: boolean;\n  heading?: boolean;\n  routes?: RouteItem[];\n}\n\nexport interface Routes {\n  routes: RouteItem[];\n}\n\nexport interface Page {\n  id: string;\n  mdxSource: any;\n  title: string;\n  toc: any;\n  description?: string;\n}\n\nexport interface Post {\n  slug: string;\n  content: string;\n  title: string;\n  date: string;\n  author: string;\n  toc: any;\n  ogImage: {\n    url: string;\n  };\n  coverImage: string;\n}\n\n/*\nexport const routes: Routes = {\n  routes: [\n    {\n      title: 'Documentation',\n      heading: true,\n      routes: [\n        { title: 'Getting Started', path: '/docs/getting-started.md' },\n        {\n          title: 'Basic Features',\n          open: true,\n          routes: [\n            {\n              title: 'Pages',\n              path: '/docs/basic-features/pages.md',\n            },\n            {\n              title: 'Data fetching',\n              path: '/docs/basic-features/data-fetching.md',\n            },\n            {\n              title: 'Built-in CSS Support',\n              path: '/docs/basic-features/built-in-css-support.md',\n            },\n            {\n              title: 'Static File Serving',\n              path: '/docs/basic-features/static-file-serving.md',\n            },\n            {\n              title: 'TypeScript',\n              path: '/docs/basic-features/typescript.md',\n            },\n          ],\n        },\n        {\n          title: 'Routing',\n          routes: [\n            {\n              title: 'Introduction',\n              path: '/docs/routing/introduction.md',\n            },\n            {\n              title: 'Dynamic Routes',\n              path: '/docs/routing/dynamic-routes.md',\n            },\n            {\n              title: 'Imperatively',\n              path: '/docs/routing/imperatively.md',\n            },\n            {\n              title: 'Shallow Routing',\n              path: '/docs/routing/shallow-routing.md',\n            },\n          ],\n        },\n        {\n          title: 'API Routes',\n          routes: [\n            {\n              title: 'Introduction',\n              path: '/docs/api-routes/introduction.md',\n            },\n            {\n              title: 'Dynamic API Routes',\n              path: '/docs/api-routes/dynamic-api-routes.md',\n            },\n            {\n              title: 'API Middlewares',\n              path: '/docs/api-routes/api-middlewares.md',\n            },\n            {\n              title: 'Response Helpers',\n              path: '/docs/api-routes/response-helpers.md',\n            },\n          ],\n        },\n        {\n          title: 'Deployment',\n          path: '/docs/deployment.md',\n        },\n        {\n          title: 'Advanced Features',\n          routes: [\n            {\n              title: 'Preview Mode',\n              path: '/docs/advanced-features/preview-mode.md',\n            },\n            {\n              title: 'Dynamic Import',\n              path: '/docs/advanced-features/dynamic-import.md',\n            },\n            {\n              title: 'Automatic Static Optimization',\n              path: '/docs/advanced-features/automatic-static-optimization.md',\n            },\n            {\n              title: 'Static HTML Export',\n              path: '/docs/advanced-features/static-html-export.md',\n            },\n            {\n              title: 'AMP Support',\n              routes: [\n                {\n                  title: 'Introduction',\n                  path: '/docs/advanced-features/amp-support/introduction.md',\n                },\n                {\n                  title: 'Adding AMP Components',\n                  path:\n                    '/docs/advanced-features/amp-support/adding-amp-components.md',\n                },\n                {\n                  title: 'AMP Validation',\n                  path: '/docs/advanced-features/amp-support/amp-validation.md',\n                },\n                {\n                  title: 'AMP in Static HTML export',\n                  path:\n                    '/docs/advanced-features/amp-support/amp-in-static-html-export.md',\n                },\n                {\n                  title: 'TypeScript',\n                  path: '/docs/advanced-features/amp-support/typescript.md',\n                },\n              ],\n            },\n            {\n              title: 'Customizing Babel Config',\n              path: '/docs/advanced-features/customizing-babel-config.md',\n            },\n            {\n              title: 'Customizing PostCSS Config',\n              path: '/docs/advanced-features/customizing-postcss-config.md',\n            },\n            {\n              title: 'Custom Server',\n              path: '/docs/advanced-features/custom-server.md',\n            },\n            {\n              title: 'Custom `App`',\n              path: '/docs/advanced-features/custom-app.md',\n            },\n            {\n              title: 'Custom `Document`',\n              path: '/docs/advanced-features/custom-document.md',\n            },\n            {\n              title: 'Custom Error Page',\n              path: '/docs/advanced-features/custom-error-page.md',\n            },\n            {\n              title: '`src` Directory',\n              path: '/docs/advanced-features/src-directory.md',\n            },\n            {\n              title: 'Multi Zones',\n              path: '/docs/advanced-features/multi-zones.md',\n            },\n          ],\n        },\n        {\n          title: 'Upgrade Guide',\n          path: '/docs/upgrading.md',\n        },\n        { title: 'FAQ', path: '/docs/faq.md' },\n      ],\n    },\n    {\n      title: 'API Reference',\n      heading: true,\n      routes: [\n        { title: 'CLI', path: '/docs/api-reference/cli.md' },\n        {\n          title: 'next/router',\n          path: '/docs/api-reference/next/router.md',\n        },\n        {\n          title: 'next/link',\n          path: '/docs/api-reference/next/link.md',\n        },\n        {\n          title: 'next/head',\n          path: '/docs/api-reference/next/head.md',\n        },\n        {\n          title: 'next/amp',\n          path: '/docs/api-reference/next/amp.md',\n        },\n        {\n          title: 'Data Fetching',\n          routes: [\n            {\n              title: 'getInitialProps',\n              path: '/docs/api-reference/data-fetching/getInitialProps.md',\n            },\n          ],\n        },\n        {\n          title: 'next.config.js',\n          routes: [\n            {\n              title: 'Introduction',\n              path: '/docs/api-reference/next.config.js/introduction.md',\n            },\n            {\n              title: 'Environment Variables',\n              path:\n                '/docs/api-reference/next.config.js/environment-variables.md',\n            },\n            {\n              title: 'Custom Page Extensions',\n              path:\n                '/docs/api-reference/next.config.js/custom-page-extensions.md',\n            },\n            {\n              title: 'CDN Support with Asset Prefix',\n              path:\n                '/docs/api-reference/next.config.js/cdn-support-with-asset-prefix.md',\n            },\n            {\n              title: 'Build Target',\n              path: '/docs/api-reference/next.config.js/build-target.md',\n            },\n            {\n              title: 'Custom Webpack Config',\n              path:\n                '/docs/api-reference/next.config.js/custom-webpack-config.md',\n            },\n            {\n              title: 'Compression',\n              path: '/docs/api-reference/next.config.js/compression.md',\n            },\n            {\n              title: 'Static Optimization Indicator',\n              path:\n                '/docs/api-reference/next.config.js/static-optimization-indicator.md',\n            },\n            {\n              title: 'Runtime Configuration',\n              path:\n                '/docs/api-reference/next.config.js/runtime-configuration.md',\n            },\n            {\n              title: 'Disabling x-powered-by',\n              path:\n                '/docs/api-reference/next.config.js/disabling-x-powered-by.md',\n            },\n            {\n              title: 'Disabling ETag Generation',\n              path:\n                '/docs/api-reference/next.config.js/disabling-etag-generation.md',\n            },\n            {\n              title: 'Setting a custom build directory',\n              path:\n                '/docs/api-reference/next.config.js/setting-a-custom-build-directory.md',\n            },\n            {\n              title: 'Configuring the Build ID',\n              path:\n                '/docs/api-reference/next.config.js/configuring-the-build-id.md',\n            },\n            {\n              title: 'Configuring onDemandEntries',\n              path:\n                '/docs/api-reference/next.config.js/configuring-onDemandEntries.md',\n            },\n            {\n              title: 'Ignoring TypeScript Errors',\n              path:\n                '/docs/api-reference/next.config.js/ignoring-typescript-errors.md',\n            },\n            {\n              title: 'exportPathMap',\n              path: '/docs/api-reference/next.config.js/exportPathMap.md',\n            },\n          ],\n        },\n      ],\n    },\n  ],\n};\n */\n"
  },
  {
    "path": "website/src/manifests/getManifest.ts",
    "content": "import manifest from './manifest.json';\nimport manifest130 from './manifest-1.3.0.json';\nimport manifest214 from './manifest-2.1.4.json';\n\n// There is a better way to do this but whatever.\nconst versions = {\n  '2.1.4': manifest214,\n  '1.5.8': manifest130,\n};\n\nexport const versionList = Object.keys(versions);\n\nexport const getManifest = (tag?: string) => {\n  return tag ? versions[tag] : manifest;\n};\n"
  },
  {
    "path": "website/src/manifests/manifest-1.3.0.json",
    "content": "{\n  \"routes\": [\n    {\n      \"title\": \"Documentation\",\n      \"heading\": true,\n      \"routes\": [\n        {\n          \"title\": \"Getting Started\",\n          \"path\": \"/docs/overview.md\"\n        },\n        {\n          \"title\": \"Tutorial\",\n          \"path\": \"/docs/tutorial.md\"\n        },\n        {\n          \"title\": \"Resources\",\n          \"path\": \"/docs/resources.md\"\n        },\n\n        {\n          \"title\": \"Guides\",\n          \"open\": true,\n          \"routes\": [\n            {\n              \"title\": \"Validation\",\n              \"path\": \"/docs/guides/validation.md\"\n            },\n            {\n              \"title\": \"Arrays\",\n              \"path\": \"/docs/guides/arrays.md\"\n            },\n            {\n              \"title\": \"TypeScript\",\n              \"path\": \"/docs/guides/typescript.md\"\n            },\n            {\n              \"title\": \"React Native\",\n              \"path\": \"/docs/guides/react-native.md\"\n            },\n            {\n              \"title\": \"Form Submission\",\n              \"path\": \"/docs/guides/form-submission.md\"\n            }\n          ]\n        }\n      ]\n    },\n    {\n      \"title\": \"API Reference\",\n      \"heading\": true,\n      \"routes\": [\n        {\n          \"title\": \"<Formik />\",\n          \"path\": \"/docs/api/formik.md\"\n        },\n        {\n          \"title\": \"withFormik()\",\n          \"path\": \"/docs/api/withFormik.md\"\n        },\n        {\n          \"title\": \"<Field />\",\n          \"path\": \"/docs/api/field.md\"\n        },\n        {\n          \"title\": \"<FieldArray />\",\n          \"path\": \"/docs/api/fieldarray.md\"\n        },\n        {\n          \"title\": \"<Form />\",\n          \"path\": \"/docs/api/form.md\"\n        },\n        {\n          \"title\": \"<ErrorMessage />\",\n          \"path\": \"/docs/api/errormessage.md\"\n        },\n        {\n          \"title\": \"connect()\",\n          \"path\": \"/docs/api/connect.md\"\n        },\n        {\n          \"title\": \"<FastField />\",\n          \"path\": \"/docs/api/fastfield.md\"\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "website/src/manifests/manifest-2.1.4.json",
    "content": "{\n  \"routes\": [\n    {\n      \"title\": \"Documentation\",\n      \"heading\": true,\n      \"routes\": [\n        {\n          \"title\": \"Getting Started\",\n          \"path\": \"/docs/overview.md\"\n        },\n        {\n          \"title\": \"Tutorial\",\n          \"path\": \"/docs/tutorial.md\"\n        },\n        {\n          \"title\": \"Resources\",\n          \"path\": \"/docs/resources.md\"\n        },\n        {\n          \"title\": \"3rd-Party Bindings\",\n          \"path\": \"/docs/3rd-party-bindings.md\"\n        },\n        {\n          \"title\": \"Migrating from v1.x to v2.x\",\n          \"path\": \"/docs/migrating-v2.md\"\n        },\n        {\n          \"title\": \"Guides\",\n          \"open\": true,\n          \"routes\": [\n            {\n              \"title\": \"Validation\",\n              \"path\": \"/docs/guides/validation.md\"\n            },\n            {\n              \"title\": \"Arrays\",\n              \"path\": \"/docs/guides/arrays.md\"\n            },\n            {\n              \"title\": \"TypeScript\",\n              \"path\": \"/docs/guides/typescript.md\"\n            },\n            {\n              \"title\": \"React Native\",\n              \"path\": \"/docs/guides/react-native.md\"\n            },\n            {\n              \"title\": \"Form Submission\",\n              \"path\": \"/docs/guides/form-submission.md\"\n            }\n          ]\n        }\n      ]\n    },\n    {\n      \"title\": \"API Reference\",\n      \"heading\": true,\n      \"routes\": [\n        {\n          \"title\": \"connect()\",\n          \"path\": \"/docs/api/connect.md\"\n        },\n        {\n          \"title\": \"<ErrorMessage />\",\n          \"path\": \"/docs/api/errormessage.md\"\n        },\n        {\n          \"title\": \"<FastField />\",\n          \"path\": \"/docs/api/fastfield.md\"\n        },\n        {\n          \"title\": \"<Field />\",\n          \"path\": \"/docs/api/field.md\"\n        },\n        {\n          \"title\": \"<FieldArray />\",\n          \"path\": \"/docs/api/fieldarray.md\"\n        },\n        {\n          \"title\": \"<Form />\",\n          \"path\": \"/docs/api/form.md\"\n        },\n        {\n          \"title\": \"<Formik />\",\n          \"path\": \"/docs/api/formik.md\"\n        },\n        {\n          \"title\": \"useField()\",\n          \"path\": \"/docs/api/useField.md\"\n        },\n        {\n          \"title\": \"useFormik()\",\n          \"path\": \"/docs/api/useFormik.md\"\n        },\n        {\n          \"title\": \"useFormikContext()\",\n          \"path\": \"/docs/api/useFormikContext.md\"\n        },\n        {\n          \"title\": \"withFormik()\",\n          \"path\": \"/docs/api/withFormik.md\"\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "website/src/manifests/manifest.json",
    "content": "{\n  \"routes\": [\n    {\n      \"title\": \"Documentation\",\n      \"heading\": true,\n      \"routes\": [\n        {\n          \"title\": \"Getting Started\",\n          \"path\": \"/docs/overview.md\"\n        },\n        {\n          \"title\": \"Tutorial\",\n          \"path\": \"/docs/tutorial.md\"\n        },\n        {\n          \"title\": \"Resources\",\n          \"path\": \"/docs/resources.md\"\n        },\n        {\n          \"title\": \"3rd-Party Bindings\",\n          \"path\": \"/docs/3rd-party-bindings.md\"\n        },\n        {\n          \"title\": \"Migrating from v1.x to v2.x\",\n          \"path\": \"/docs/migrating-v2.md\"\n        },\n        {\n          \"title\": \"Guides\",\n          \"open\": true,\n          \"routes\": [\n            {\n              \"title\": \"Validation\",\n              \"path\": \"/docs/guides/validation.md\"\n            },\n            {\n              \"title\": \"Arrays\",\n              \"path\": \"/docs/guides/arrays.md\"\n            },\n            {\n              \"title\": \"TypeScript\",\n              \"path\": \"/docs/guides/typescript.md\"\n            },\n            {\n              \"title\": \"React Native\",\n              \"path\": \"/docs/guides/react-native.md\"\n            },\n            {\n              \"title\": \"Form Submission\",\n              \"path\": \"/docs/guides/form-submission.md\"\n            }\n          ]\n        },\n        {\n          \"title\": \"Examples\",\n          \"open\": true,\n          \"routes\": [\n            {\n              \"title\": \"Basic\",\n              \"path\": \"/docs/examples/basic.md\"\n            },\n            {\n              \"title\": \"TypeScript\",\n              \"path\": \"/docs/examples/typescript.md\"\n            },\n            {\n              \"title\": \"Async Submission\",\n              \"path\": \"/docs/examples/async-submission.md\"\n            },\n\n            {\n              \"title\": \"Checkboxes\",\n              \"path\": \"/docs/examples/checkboxes.md\"\n            },\n            {\n              \"title\": \"Radio Group\",\n              \"path\": \"/docs/examples/radio-group.md\"\n            },\n            {\n              \"title\": \"Dependent Fields\",\n              \"path\": \"/docs/examples/dependent-fields.md\"\n            },\n            {\n              \"title\": \"Dependent Fields with Async API Request\",\n              \"path\": \"/docs/examples/dependent-fields-async-api-request.md\"\n            },\n            {\n              \"title\": \"Arrays and Lists\",\n              \"path\": \"/docs/examples/field-arrays.md\"\n            },\n            {\n              \"title\": \"Instant Feedback\",\n              \"path\": \"/docs/examples/instant-feedback.md\"\n            },\n            {\n              \"title\": \"Material UI\",\n              \"path\": \"/docs/examples/with-material-ui.md\"\n            },\n            {\n              \"title\": \"More Examples\",\n              \"path\": \"/docs/examples/more-examples.md\"\n            }\n          ]\n        }\n      ]\n    },\n\n    {\n      \"title\": \"API Reference\",\n      \"heading\": true,\n      \"routes\": [\n        {\n          \"title\": \"connect()\",\n          \"path\": \"/docs/api/connect.md\"\n        },\n        {\n          \"title\": \"<ErrorMessage />\",\n          \"path\": \"/docs/api/errormessage.md\"\n        },\n        {\n          \"title\": \"<FastField />\",\n          \"path\": \"/docs/api/fastfield.md\"\n        },\n        {\n          \"title\": \"<Field />\",\n          \"path\": \"/docs/api/field.md\"\n        },\n        {\n          \"title\": \"<FieldArray />\",\n          \"path\": \"/docs/api/fieldarray.md\"\n        },\n        {\n          \"title\": \"<Form />\",\n          \"path\": \"/docs/api/form.md\"\n        },\n        {\n          \"title\": \"<Formik />\",\n          \"path\": \"/docs/api/formik.md\"\n        },\n        {\n          \"title\": \"useField()\",\n          \"path\": \"/docs/api/useField.md\"\n        },\n        {\n          \"title\": \"useFormik()\",\n          \"path\": \"/docs/api/useFormik.md\"\n        },\n        {\n          \"title\": \"useFormikContext()\",\n          \"path\": \"/docs/api/useFormikContext.md\"\n        },\n        {\n          \"title\": \"withFormik()\",\n          \"path\": \"/docs/api/withFormik.md\"\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "website/src/pages/_app.js",
    "content": "import '@docsearch/css';\nimport '../styles/index.css';\nimport { Analytics } from '@vercel/analytics/react';\n\nfunction MyApp({ Component, pageProps }) {\n  return (\n    <>\n      <Component {...pageProps} />\n      <Analytics />\n    </>\n  );\n}\n\nexport default MyApp;\n"
  },
  {
    "path": "website/src/pages/_document.js",
    "content": "import Document, { Html, Head, Main, NextScript } from 'next/document';\n\nclass MyDocument extends Document {\n  render() {\n    return (\n      <Html>\n        <Head />\n        <body className={`font-sans antialiased text-gray-900 `}>\n          <Main />\n          <NextScript />\n        </body>\n      </Html>\n    );\n  }\n}\n\nexport default MyDocument;\n"
  },
  {
    "path": "website/src/pages/blog/[slug].tsx",
    "content": "import { Banner } from 'components/Banner';\nimport { Footer } from 'components/Footer';\nimport styles from 'components/markdown.module.css';\nimport MDXComponents from 'components/MDXComponents';\nimport { Nav } from 'components/Nav';\nimport { Seo } from 'components/Seo';\nimport { Sticky } from 'components/Sticky';\nimport fs from 'fs';\nimport matter from 'gray-matter';\nimport { postFilePaths, POSTS_PATH } from 'lib/blog/mdxUtils';\nimport { MDXRemote } from 'next-mdx-remote';\nimport { serialize } from 'next-mdx-remote/serialize';\nimport path from 'path';\nimport imageSize from 'rehype-img-size';\nimport { Inter } from 'next/font/google';\nimport classNames from 'classnames';\n\nconst inter = Inter({ subsets: ['latin'] });\nexport default function PostPage({ source, frontMatter }: any) {\n  return (\n    <>\n      <div className={classNames('h-full min-h-full', inter.className)}>\n        <Banner />\n        <Sticky className=\"z-20\">\n          <Nav />\n        </Sticky>\n        <Seo title={frontMatter.title + ' | Blog'} />\n        <div className=\"container max-w-3xl px-4 pt-6 pb-12 mx-auto lg:px-8 max-w-screen\">\n          <div className=\"my-10 space-y-4\">\n            <div className=\"flex items-center \">\n              {frontMatter.authors && frontMatter.authors.length > 0 && (\n                <div className=\"mr-1 text-gray-700 authors\">\n                  By {frontMatter.authors.join(' ')}{' '}\n                </div>\n              )}\n              {frontMatter.date && (\n                <div className=\"text-gray-700 posted\">\n                  {' '}\n                  • {frontMatter.date}\n                </div>\n              )}\n            </div>\n            <h1 className=\"max-w-3xl text-5xl font-semibold leading-snug tracking-tighter text-gray-900\">\n              {frontMatter.title || ''}\n            </h1>\n          </div>\n          <div className=\"relative\">\n            <div className=\"mx-auto\">\n              <div className={styles['markdown']}>\n                <MDXRemote {...source} components={MDXComponents} />\n              </div>\n            </div>\n          </div>\n        </div>\n        <Footer />\n      </div>\n    </>\n  );\n}\n\nexport const getStaticProps = async ({ params }: any) => {\n  const postFilePath = path.join(POSTS_PATH, `${params.slug}.md`);\n  const source = fs.readFileSync(postFilePath);\n\n  const { content, data } = matter(source);\n\n  const mdxSource = await serialize(content, {\n    // Optionally pass remark/rehype plugins\n    mdxOptions: {\n      remarkPlugins: [],\n      rehypePlugins: [[imageSize, { dir: 'public' }]],\n    },\n    scope: data,\n  });\n\n  return {\n    props: {\n      source: mdxSource,\n      frontMatter: data,\n    },\n  };\n};\n\nexport const getStaticPaths = async () => {\n  const paths = postFilePaths\n    // Remove file extensions for page paths\n    .map(path => path.replace(/\\.mdx?$/, ''))\n    // Map the path into the static paths object required by Next.js\n    .map(slug => ({ params: { slug } }));\n\n  return {\n    paths,\n    fallback: false,\n  };\n};\n"
  },
  {
    "path": "website/src/pages/blog/index.tsx",
    "content": "import cn from 'classnames';\nimport { Banner } from 'components/Banner';\nimport { Footer } from 'components/Footer';\nimport markdownStyles from 'components/markdown.module.css';\nimport { Nav } from 'components/Nav';\nimport { Seo } from 'components/Seo';\nimport { Sticky } from 'components/Sticky';\nimport fs from 'fs';\nimport matter from 'gray-matter';\nimport { postFilePaths, POSTS_PATH } from 'lib/blog/mdxUtils';\nimport Link from 'next/link';\nimport path from 'path';\nimport { Inter } from 'next/font/google';\n\nconst inter = Inter({ subsets: ['latin'] });\n\nexport default function Index({ posts }: any) {\n  return (\n    <>\n      <div className={cn('h-full min-h-full', inter.className)}>\n        <Banner />\n        <Sticky>\n          <Nav />\n        </Sticky>\n        <Seo\n          title=\"Blog\"\n          description=\"The latest Formik news, announcements, articles, and resources.\"\n        />\n        <div className=\"container px-4 lg:px-0 pt-16 pb-20 mx-auto bg-white lg:pt-24 lg:pb-28\">\n          <div className=\"relative \">\n            <div>\n              <h1 className=\"text-3xl font-extrabold leading-9 tracking-tight text-gray-900 lg:text-5xl sm:text-4xl sm:leading-10 \">\n                Blog\n              </h1>\n              <div className=\"mt-3 sm:mt-4 lg:grid lg:grid-cols-2 lg:gap-5 lg:items-center\">\n                <p className=\"text-xl leading-7 text-gray-500\">\n                  Stories, tips, and tools to inspire you to build better\n                  software. Subscribe for updates.\n                </p>\n                <form\n                  action=\"https://api.formik.com/submit/palmerhq/formik-newsletter\"\n                  method=\"post\"\n                  className=\"flex mt-6 lg:mt-0 lg:justify-end\"\n                >\n                  <input type=\"hidden\" name=\"_honeypot\" value=\"\" />\n                  <input\n                    aria-label=\"Email address\"\n                    type=\"email\"\n                    name=\"email\"\n                    required={true}\n                    className=\"w-full px-4 py-2 text-base leading-6 text-gray-900 placeholder-gray-500 transition duration-150 ease-in-out bg-white border border-gray-300 rounded-md appearance-none focus:outline-none focus:ring focus:ring-blue focus:border-blue-300 lg:max-w-xs\"\n                    placeholder=\"Enter your email\"\n                  />\n                  <span className=\"inline-flex flex-shrink-0 ml-3 rounded-md shadow-sm\">\n                    <button\n                      type=\"button\"\n                      className=\"inline-flex items-center px-4 py-2 text-base font-medium leading-6 text-white transition duration-150 ease-in-out bg-blue-600 border border-transparent rounded-md hover:bg-blue-500 focus:outline-none focus:border-blue-700 focus:ring focus:ring-blue active:bg-blue-700\"\n                    >\n                      Notify me\n                    </button>\n                  </span>\n                </form>\n              </div>\n            </div>\n            <div className={markdownStyles['markdown']}>\n              {posts.length === 0 && <p>There are no posts yet</p>}\n              <div className=\"grid gap-16 pt-10 mt-6 border-t border-gray-100 lg:grid-cols-2 lg:gap-x-5 lg:gap-y-12\">\n                {posts.map((post: any) => {\n                  return (\n                    <div key={post.filePath} className=\"pb-6 space-y-2\">\n                      {post.data.date && (\n                        <div className=\"text-sm leading-5 text-gray-500 posted\">\n                          <time dateTime={post.data.date}>\n                            {post.data.date}\n                          </time>\n                        </div>\n                      )}\n                      <h3 className=\"mt-2 text-2xl font-semibold leading-7 text-gray-900\">\n                        <Link\n                          href={`/blog/${post.filePath.replace(/\\.mdx?$/, '')}`}\n                          className=\"block\"\n                        >\n                          <span className=\"cursor-pointer hover:underline\">\n                            {!post.data.published && (\n                              <span className=\"text-white bg-black rounded-xl\">\n                                Draft\n                              </span>\n                            )}\n                            {post.data.title}\n                          </span>\n                        </Link>\n                      </h3>\n                      <div className=\"mt-3 leading-6 text-gray-500 \">\n                        <div\n                          className={cn(\n                            markdownStyles.markdown,\n                            'text-gray-500'\n                          )}\n                        >\n                          {!post.data.preview || post.data.preview.length === 0\n                            ? 'No preview available'\n                            : post.data.preview}\n                        </div>\n                      </div>\n\n                      <div className=\"mt-3\">\n                        <Link\n                          href={`/blog/${post.filePath.replace(/\\.mdx?$/, '')}`}\n                          className=\"text-base font-semibold leading-6 text-blue-600 transition duration-150 ease-in-out hover:text-blue-500\"\n                        >\n                          Read More<span aria-hidden=\"true\">→</span>\n                        </Link>\n                      </div>\n                    </div>\n                  );\n                })}\n              </div>\n            </div>\n          </div>\n        </div>\n        <Footer />\n      </div>\n    </>\n  );\n}\n\nexport function getStaticProps() {\n  const posts = postFilePaths.map(filePath => {\n    const source = fs.readFileSync(path.join(POSTS_PATH, filePath));\n    const { content, data } = matter(source);\n\n    return {\n      content,\n      data,\n      filePath,\n    };\n  });\n\n  return { props: { posts } };\n}\n"
  },
  {
    "path": "website/src/pages/docs/[...slug].tsx",
    "content": "import matter from 'gray-matter';\nimport { GetStaticPaths, GetStaticProps } from 'next';\nimport ErrorPage from 'next/error';\nimport Head from 'next/head';\nimport { useRouter } from 'next/router';\nimport * as React from 'react';\n\nimport s from 'components/markdown.module.css';\nimport { Banner } from 'components/Banner';\nimport { SidebarCategory } from 'components/SidebarCategory';\nimport { SidebarPost } from 'components/SidebarPost';\nimport { Toc } from 'components/Toc';\nimport remarkPlugins from 'lib/docs/remark-plugins';\nimport {\n  getCurrentTag,\n  fetchRemoteDocsManifest,\n  fetchLocalDocsManifest,\n  getPaths,\n  getRawFileFromLocal,\n} from 'lib/docs/page';\nimport { findRouteByPath } from 'lib/docs/findRouteByPath';\nimport { addTagToSlug, getSlug, removeFromLast } from 'lib/docs/utils';\nimport { getRouteContext } from 'lib/get-route-context';\nimport { getRawFileFromRepo } from 'lib/github/raw';\nimport { RouteItem, Page } from 'lib/types';\nimport { SidebarHeading } from 'components/SidebarHeading';\nimport { Sidebar } from 'components/Sidebar';\nimport { SidebarMobile } from 'components/SidebarMobile';\nimport { Nav } from 'components/Nav';\nimport { Sticky } from 'components/Sticky';\nimport { useIsMobile } from 'components/useIsMobile';\nimport { Footer } from 'components/Footer';\nimport { Seo } from 'components/Seo';\nimport { DocsPageFooter } from 'components/DocsPageFooter';\nimport addRouterEvents from 'components/addRouterEvents';\nimport MDXComponents from 'components/MDXComponents';\nimport { serialize } from 'next-mdx-remote/serialize';\nimport { MDXRemote } from 'next-mdx-remote';\nimport rehypeDocs from 'lib/docs/rehype-docs';\nimport { Inter } from 'next/font/google';\n\nconst inter = Inter({ subsets: ['latin'] });\ninterface DocsProps {\n  page: Page;\n  routes: RouteItem[];\n  route: RouteItem;\n}\n\nexport default function Docs({ page, routes, route: _route }: DocsProps) {\n  const router = useRouter();\n  const { asPath, isFallback, query } = router;\n  const isMobile = useIsMobile();\n\n  // @ts-ignore\n  const { route, prevRoute, nextRoute } = getRouteContext(_route, routes);\n  const title = route && `${page.title || route.title} | Formik`;\n  const { tag } = getSlug(query as { slug: string[] });\n\n  // This effect adds `next/link`-like behavior to any non-hash relative link\n  // @source @timer\n  React.useEffect(() => {\n    const listeners: any[] = [];\n    document.querySelectorAll('.docs .relative-link').forEach(node => {\n      const href = node.getAttribute('href');\n      // Exclude paths like #setup and hashes that have the same current path\n      if (href && href[0] !== '#') {\n        // Handle any relative path\n        router.prefetch(href);\n\n        listeners.push(\n          addRouterEvents(node, router, {\n            href,\n          })\n        );\n      }\n    });\n    return () => {\n      listeners.forEach(cleanUpListener => cleanUpListener());\n    };\n  }, [router]);\n\n  if (!route && !isFallback) {\n    return <ErrorPage statusCode={404} />;\n  }\n\n  return (\n    <>\n      {tag && (\n        <Head>\n          <meta name=\"robots\" content=\"noindex\" />\n        </Head>\n      )}\n      <div className={inter.className}>\n        <Banner />\n        {isMobile ? (\n          <Nav />\n        ) : (\n          <Sticky>\n            <Nav />\n          </Sticky>\n        )}\n        {route ? (\n          <>\n            <Seo title={title || page.title} description={page.description} />\n            <div className=\"block\">\n              <>\n                <Sticky shadow>\n                  <SidebarMobile>\n                    <SidebarRoutes isMobile={true} routes={routes} />\n                  </SidebarMobile>\n                </Sticky>\n\n                <div className=\"container mx-auto pb-12 pt-6 px-4 lg:px-0 content\">\n                  <div className=\"flex relative\">\n                    <Sidebar fixed>\n                      <SidebarRoutes routes={routes} />\n                    </Sidebar>\n\n                    <div className={s['markdown'] + ' w-full docs'}>\n                      <h1>{page.title}</h1>\n                      <div className={s['markdown']}>\n                        {' '}\n                        <MDXRemote\n                          {...page.mdxSource}\n                          components={MDXComponents}\n                        />\n                      </div>\n                      <DocsPageFooter\n                        href={route?.path || ''}\n                        route={route!}\n                        prevRoute={prevRoute}\n                        nextRoute={nextRoute}\n                      />\n                    </div>\n                    {!route?.path?.includes('example') ? (\n                      <div\n                        className=\"hidden xl:block ml-10 flex-shrink-0\"\n                        style={{ width: 200 }}\n                      >\n                        <div className=\"sticky top-24 \">\n                          <h4 className=\"font-semibold uppercase text-sm mb-2 mt-2 text-gray-500\">\n                            On this page\n                          </h4>\n                          <Toc key={asPath} />\n                        </div>\n                      </div>\n                    ) : null}\n                  </div>\n                </div>\n              </>\n            </div>\n          </>\n        ) : (\n          <div>loading....</div>\n        )}\n      </div>\n      <Footer />\n      <style jsx>{`\n        .docs {\n          min-width: calc(100% - 300px - 1rem - 200px);\n        }\n      `}</style>\n    </>\n  );\n}\n\nfunction getCategoryPath(routes: RouteItem[]) {\n  const route = routes.find(r => r.path);\n  return route && removeFromLast(route.path!, '/');\n}\n\nfunction SidebarRoutes({\n  isMobile,\n  routes: currentRoutes,\n\n  level = 1,\n}: {\n  isMobile?: boolean;\n  routes: RouteItem[];\n\n  level?: number;\n}) {\n  const { query } = useRouter();\n  const { tag, slug } = getSlug(query as any);\n\n  return (currentRoutes as RouteItem[]).map(\n    ({ path, title, routes, heading, open }, idx) => {\n      if (routes) {\n        const pathname = getCategoryPath(routes);\n        const selected = slug.startsWith(pathname as any);\n        const opened = selected || isMobile ? false : open;\n\n        if (heading) {\n          return (\n            <SidebarHeading key={`${pathname}-heading-${idx}`} title={title}>\n              <SidebarRoutes\n                isMobile={isMobile}\n                routes={routes}\n                level={level + 1}\n              />\n            </SidebarHeading>\n          );\n        }\n\n        return (\n          <SidebarCategory\n            key={`${pathname}-category-${idx}`}\n            isMobile={isMobile}\n            level={level}\n            title={title}\n            selected={selected}\n            opened={opened}\n          >\n            <SidebarRoutes\n              isMobile={isMobile}\n              routes={routes}\n              level={level + 1}\n            />\n          </SidebarCategory>\n        );\n      }\n\n      const href = '/docs/[...slug]';\n      const pagePath = removeFromLast(path!, '.');\n      const pathname = addTagToSlug(pagePath, tag);\n      const selected = (slug === pagePath);\n      const route = { href, path, title, pathname, selected };\n      return (\n        <SidebarPost\n          key={title}\n          isMobile={isMobile}\n          level={level}\n          route={route}\n        />\n      );\n    }\n  ) as any;\n}\n\nexport const getStaticProps: GetStaticProps<any, { slug: string[] }> = async ({\n  params,\n}) => {\n  const { tag, slug } = getSlug(params ?? { slug: [] });\n  const currentTag = await getCurrentTag(tag);\n  // console.log('tag', tag);\n  // console.log('slug', slug);\n  // console.log('product', product);\n\n  let manifest;\n  if (tag) {\n    // console.log('remote');\n    manifest = await fetchRemoteDocsManifest(tag);\n  } else {\n    // console.log('local');\n    manifest = await fetchLocalDocsManifest();\n  }\n\n  if (!manifest) {\n    return { props: {}, notFound: true };\n  }\n\n  const route = manifest && findRouteByPath(slug, manifest.routes);\n\n  if (!route) {\n    return { props: {}, notFound: true };\n  }\n\n  let md;\n  if (tag) {\n    md = await getRawFileFromRepo(route.path!, currentTag);\n  } else {\n    md = await getRawFileFromLocal(route.path!);\n  }\n\n  const { content, data } = matter(md);\n\n  const mdxSource = await serialize(content ?? '', {\n    mdxOptions: {\n      remarkPlugins,\n      rehypePlugins: [[rehypeDocs as any, { filePath: route.path!, tag }]],\n    },\n  });\n  return {\n    props: {\n      route,\n      routes: manifest.routes,\n      page: {\n        mdxSource,\n        ...data,\n      },\n    },\n  };\n};\n\nexport const getStaticPaths: GetStaticPaths = async () => {\n  const manifest = await fetchLocalDocsManifest();\n  return {\n    paths: getPaths([...manifest.routes]),\n    fallback: 'blocking',\n  };\n};\n"
  },
  {
    "path": "website/src/pages/index.tsx",
    "content": "import * as React from 'react';\nimport { Banner } from 'components/Banner';\nimport { Sticky } from 'components/Sticky';\nimport { Nav } from 'components/Nav';\n\nimport { siteConfig } from 'siteConfig';\nimport Link from 'next/link';\nimport { Footer } from 'components/Footer';\nimport { ClientsMarquee } from 'components/clients/ClientsMarquee';\nimport { Seo } from 'components/Seo';\nimport Head from 'next/head';\nimport Image from 'next/image';\nimport { Inter } from 'next/font/google';\nimport cn from 'classnames';\n\nconst inter = Inter({ subsets: ['latin'] });\nexport interface HomeProps {}\n\nconst Home: React.FC<HomeProps> = props => {\n  return (\n    <>\n      <Seo\n        title=\"Formik\"\n        description=\"React hooks and components for hassle-free form validation. The world's leading companies use Formik to build forms and surveys in React and React Native.\"\n      />\n      <Head>\n        <title>Formik: Build forms in React, without the tears</title>\n      </Head>\n      <div className={cn('bg-gray-50 h-full min-h-full', inter.className)}>\n        <Banner />\n        <Sticky>\n          <Nav />\n        </Sticky>\n        <div className=\"relative bg-white overflow-hidden\">\n          <div className=\"hidden lg:block lg:absolute lg:inset-0\">\n            <svg\n              className=\"absolute top-0 left-1/2 transform translate-x-64 -translate-y-8\"\n              width=\"640\"\n              height=\"784\"\n              fill=\"none\"\n              viewBox=\"0 0 640 784\"\n            >\n              <defs>\n                <pattern\n                  id=\"9ebea6f4-a1f5-4d96-8c4e-4c2abf658047\"\n                  x=\"118\"\n                  y=\"0\"\n                  width=\"20\"\n                  height=\"20\"\n                  patternUnits=\"userSpaceOnUse\"\n                >\n                  <rect\n                    x=\"0\"\n                    y=\"0\"\n                    width=\"4\"\n                    height=\"4\"\n                    className=\"text-gray-200\"\n                    fill=\"currentColor\"\n                  />\n                </pattern>\n              </defs>\n              <rect\n                x=\"118\"\n                width=\"404\"\n                height=\"784\"\n                fill=\"url(#9ebea6f4-a1f5-4d96-8c4e-4c2abf658047)\"\n              />\n            </svg>\n          </div>\n\n          <div className=\"py-24 mx-auto container px-4 lg:px-0 sm:mt-12  relative\">\n            <div className=\"hidden lg:block absolute lg:w-3/5 right-0 lg:-rotate-[30deg] lg:translate-x-1/3 lg:-translate-y-16 md:w-1/2 sm:w-2/3 top-0  transform  -translate-y-12\">\n              <Image\n                alt=\"Formik Hero Background Image\"\n                src=\"/images/hero6.png\"\n                width={1042}\n                height={990}\n                priority={true}\n                style={{\n                  maxWidth: '100%',\n                  height: 'auto',\n                }}\n              />\n            </div>\n            <div className=\"lg:flex lg:max-w-md xl:max-w-xl lg:items-start lg:space-between\">\n              <div className=\"\">\n                <div className=\"text-center lg:text-left md:max-w-2xl md:mx-auto \">\n                  <h1 className=\"text-4xl tracking-tight leading-10 font-extrabold text-gray-900 sm:leading-none sm:text-6xl lg:text-5xl xl:text-6xl\">\n                    Build forms in React,\n                    <br className=\"hidden md:inline xl:hidden\" />{' '}\n                    <span>without the tears</span>\n                  </h1>\n                  <p className=\"mt-3 text-base text-gray-700 sm:mt-5 sm:text-xl lg:text-lg xl:text-xl\">\n                    Formik is the world's most popular open source form library\n                    for React and React Native.\n                  </p>\n\n                  <div className=\"mt-5  mx-auto sm:flex sm:justify-center lg:justify-start lg:mx-0 md:mt-8\">\n                    <div className=\"rounded-md shadow\">\n                      <Link\n                        href=\"/docs/overview\"\n                        className=\"w-full flex items-center justify-center px-8 py-3 border border-transparent text-base leading-6 font-medium rounded-md text-white bg-blue-600 hover:bg-blue-500 focus:outline-none focus:border-blue-700 focus:ring focus:ring-blue transition duration-150 ease-in-out md:py-4 md:text-lg md:px-10\"\n                      >\n                        Get Started\n                      </Link>\n                    </div>\n                    <div className=\"mt-3 rounded-md shadow sm:mt-0 sm:ml-3\">\n                      <a\n                        href={siteConfig.repoUrl}\n                        target=\"_blank\"\n                        rel=\"noopener noreferrer\"\n                        className=\"w-full flex items-center justify-center px-8 py-3 border border-transparent text-base leading-6 font-medium rounded-md text-blue-600 bg-white hover:text-blue-500 focus:outline-none focus:border-blue-300 focus:ring focus:ring-blue transition duration-150 ease-in-out md:py-4 md:text-lg md:px-10\"\n                      >\n                        GitHub\n                      </a>\n                    </div>\n                  </div>\n                </div>\n              </div>\n              <div />\n            </div>\n          </div>\n        </div>\n        <div className=\"text-lg border-t border-gray-100 bg-gray-50 \">\n          <div className=\"py-24  \">\n            <div className=\"mx-auto container px-4 lg:px-0\">\n              <div className=\"lg:grid lg:grid-cols-3 lg:gap-8\">\n                <div>\n                  <div>\n                    <h3 className=\"text-xl leading-6 xl:text-2xl font-bold text-gray-900\">\n                      Declarative\n                    </h3>\n                    <p className=\"mt-2 lg:mt-4 text-base xl:text-lg lg:leading-normal leading-6 text-gray-600\">\n                      Formik takes care of the repetitive and annoying\n                      stuff—keeping track of values/errors/visited fields,\n                      orchestrating validation, and handling submission—so you\n                      don't have to. This means you spend less time wiring up\n                      state and change handlers and more time focusing on your\n                      business logic.\n                    </p>\n                  </div>\n                </div>\n                <div className=\"mt-10 lg:mt-0\">\n                  <div>\n                    <h3 className=\"text-xl leading-6 xl:text-2xl font-bold text-gray-900\">\n                      Intuitive\n                    </h3>\n                    <p className=\"mt-2  lg:mt-4 text-base xl:text-lg lg:leading-normal leading-6 text-gray-600\">\n                      No fancy subscriptions or observables under the hood, just\n                      plain React state and props. By staying within the core\n                      React framework and away from magic, Formik makes\n                      debugging, testing, and reasoning about your forms a\n                      breeze. If you know React, and you know a bit about forms,\n                      you know Formik!\n                    </p>\n                  </div>\n                </div>\n                <div className=\"mt-10 lg:mt-0\">\n                  <div>\n                    <h3 className=\"text-xl leading-6 xl:text-2xl font-bold text-gray-900\">\n                      Adoptable\n                    </h3>\n                    <p className=\"mt-2  lg:mt-4 text-base xl:text-lg lg:leading-normal leading-6 text-gray-600\">\n                      Since form state is inherently local and ephemeral, Formik\n                      does not use external state management libraries like\n                      Redux or MobX. This also makes Formik easy to adopt\n                      incrementally and keeps bundle size to a minimum.\n                    </p>\n                  </div>\n                </div>\n              </div>\n            </div>\n          </div>\n          <div className=\"py-6\">\n            <div className=\"uppercase tracking-wider text-sm font-semibold text-center  text-gray-400\">\n              Trusted in Production by\n            </div>\n\n            <ClientsMarquee />\n          </div>\n        </div>\n\n        <div className=\"bg-gray-100 relative py-24 border-t border-gray-200 \">\n          <div className=\"px-4 sm:px-6 lg:px-8  mx-auto container max-w-3xl sm:text-center\">\n            <h3 className=\"text-3xl leading-8 font-extrabold tracking-tight text-gray-900 sm:text-4xl sm:leading-10 lg:leading-none mt-2\">\n              Less Code. Fewer Edge Cases.\n            </h3>\n            <p className=\"my-4 text-xl leading-7  text-gray-600\">\n              Formik comes with battle-tested solutions for input validation,\n              formatting, masking, arrays, and error handling. This means you\n              spend less time writing form code and more time building your next\n              big thing.\n            </p>\n          </div>\n          <div style={{ height: 224 }} />\n        </div>\n\n        <section className=\"bg-gray-900 body-font\">\n          <div className=\"container max-w-7xl px-4  mx-auto -mt-72 relative\">\n            <iframe\n              src=\"https://codesandbox.io/embed/dazzling-swanson-wne32?autoresize=1&codemirror=1&fontsize=14&hidenavigation=1&theme=dark\"\n              style={{\n                width: '100%',\n                height: '600px',\n                border: '0',\n                borderRadius: 8,\n                overflow: 'hidden',\n                position: 'static',\n                zIndex: 0,\n              }}\n              className=\"shadow-2xl\"\n              title=\"dazzling-swanson-wne32\"\n              allow=\"accelerometer; ambient-light-sensor; camera; encrypted-media; geolocation; gyroscope; hid; microphone; midi; payment; usb; vr; xr-spatial-tracking\"\n              sandbox=\"allow-autoplay allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts\"\n            ></iframe>\n          </div>\n          <div className=\"py-24 px-4 sm:px-6 lg:px-8  mx-auto container\">\n            <div className=\" sm:text-center pb-16\">\n              <h3 className=\"text-3xl mx-auto leading-tight font-extrabold tracking-tight text-white sm:text-4xl  lg:leading-none mt-2\">\n                Battery-pack Included.\n              </h3>\n              <p className=\"mt-4 text-xl max-w-3xl mx-auto leading-7 text-gray-300\">\n                With Formik, not only is the battery-pack included, but you're\n                taking advantage of our community's collective learnings in\n                security, accessibility, and user experience research.\n              </p>\n            </div>\n            <div>\n              <div className=\"grid grid-flow-row grid-cols-1 sm:grid-cols-2 md:grid-cols-3  gap-4 text-white max-w-screen-lg mx-auto text-lg\">\n                <a className=\"mb-2\">\n                  <span className=\"bg-blue-100 text-blue-500 w-4 h-4 mr-2 rounded-full inline-flex items-center justify-center\">\n                    <Check />\n                  </span>\n                  Form-level Validation\n                </a>\n                <a className=\"mb-2\">\n                  <span className=\"bg-blue-100 text-blue-500 w-4 h-4 mr-2 rounded-full inline-flex items-center justify-center\">\n                    <Check />\n                  </span>\n                  Error Messages\n                </a>\n                <a className=\"mb-2\">\n                  <span className=\"bg-blue-100 text-blue-500 w-4 h-4 mr-2 rounded-full inline-flex items-center justify-center\">\n                    <Check />\n                  </span>\n                  Wizards and multi-step forms\n                </a>\n                <a className=\"mb-2\">\n                  <span className=\"bg-blue-100 text-blue-500 w-4 h-4 mr-2 rounded-full inline-flex items-center justify-center\">\n                    <Check />\n                  </span>\n                  Field-level validation\n                </a>\n                <a className=\"mb-2\">\n                  <span className=\"bg-blue-100 text-blue-500 w-4 h-4 mr-2 rounded-full inline-flex items-center justify-center\">\n                    <Check />\n                  </span>\n                  Array Fields\n                </a>\n                <a className=\"mb-2\">\n                  <span className=\"bg-blue-100 text-blue-500 w-4 h-4 mr-2 rounded-full inline-flex items-center justify-center\">\n                    <Check />\n                  </span>\n                  API Errors\n                </a>\n                <a className=\"mb-2\">\n                  <span className=\"bg-blue-100 text-blue-500 w-4 h-4 mr-2 rounded-full inline-flex items-center justify-center\">\n                    <Check />\n                  </span>\n                  Custom Validation\n                </a>\n                <a className=\"mb-2\">\n                  <span className=\"bg-blue-100 text-blue-500 w-4 h-4 mr-2 rounded-full inline-flex items-center justify-center\">\n                    <Check />\n                  </span>\n                  Internationalization (i18n)\n                </a>\n                <a className=\"mb-2\">\n                  <span className=\"bg-blue-100 text-blue-500 w-4 h-4 mr-2 rounded-full inline-flex items-center justify-center\">\n                    <Check />\n                  </span>\n                  Auto-saving forms\n                </a>\n                <a className=\"mb-2\">\n                  <span className=\"bg-blue-100 text-blue-500 w-4 h-4 mr-2 rounded-full inline-flex items-center justify-center\">\n                    <Check />\n                  </span>\n                  Dependent Validation\n                </a>\n                <a className=\"mb-2\">\n                  <span className=\"bg-blue-100 text-blue-500 w-4 h-4 mr-2 rounded-full inline-flex items-center justify-center\">\n                    <Check />\n                  </span>\n                  Conditional Logic\n                </a>\n                <a className=\"mb-2\">\n                  <span className=\"bg-blue-100 text-blue-500 w-4 h-4 mr-2 rounded-full inline-flex items-center justify-center\">\n                    <Check />\n                  </span>\n                  Dynamic Fields\n                </a>\n                <a className=\"mb-2\">\n                  <span className=\"bg-blue-100 text-blue-500 w-4 h-4 mr-2 rounded-full inline-flex items-center justify-center\">\n                    <Check />\n                  </span>\n                  React Native\n                </a>\n                <a className=\"mb-2\">\n                  <span className=\"bg-blue-100 text-blue-500 w-4 h-4 mr-2 rounded-full inline-flex items-center justify-center\">\n                    <Check />\n                  </span>\n                  Tree shakeable\n                </a>\n              </div>\n            </div>\n          </div>\n        </section>\n        <div className=\"bg-gray-50 border-b border-gray-100\">\n          <div className=\"container mx-auto py-12 px-4 sm:px-6 lg:py-16 lg:px-8 lg:flex lg:items-center lg:justify-between\">\n            <h2 className=\"text-3xl leading-9 font-extrabold tracking-tight text-gray-900 sm:text-4xl sm:leading-10\">\n              Ready to dive in?\n            </h2>\n            <div className=\"mt-8 flex lg:flex-shrink-0 lg:mt-0\">\n              <div className=\"inline-flex rounded-md shadow\">\n                <Link\n                  href=\"/docs/overview\"\n                  className=\"inline-flex items-center justify-center px-5 py-3 border border-transparent text-base leading-6 font-medium rounded-md text-white bg-blue-600 hover:bg-blue-500 focus:outline-none focus:ring transition duration-150 ease-in-out\"\n                >\n                  Get Started\n                </Link>\n              </div>\n              <div className=\"ml-3 inline-flex rounded-md shadow\">\n                <a\n                  href={siteConfig.repoUrl}\n                  className=\"inline-flex items-center justify-center px-5 py-3 border border-transparent text-base leading-6 font-medium rounded-md text-blue-600 bg-white hover:text-blue-500 focus:outline-none focus:ring transition duration-150 ease-in-out\"\n                >\n                  GitHub\n                </a>\n              </div>\n            </div>\n          </div>\n        </div>\n        <Footer />\n        <style jsx global>{`\n          .gradient {\n            -webkit-mask-image: linear-gradient(\n              180deg,\n              transparent 0,\n              #000 30px,\n              #000 calc(100% - 200px),\n              transparent calc(100% - 100px)\n            );\n          }\n        `}</style>\n      </div>\n    </>\n  );\n};\n\nexport default Home;\n\nHome.displayName = 'Home';\n\nconst Check = React.memo(() => (\n  <svg\n    fill=\"none\"\n    stroke=\"currentColor\"\n    strokeLinecap=\"round\"\n    strokeLinejoin=\"round\"\n    strokeWidth=\"3\"\n    className=\"w-3 h-3\"\n    viewBox=\"0 0 24 24\"\n    aria-hidden=\"true\"\n  >\n    <path d=\"M20 6L9 17l-5-5\"></path>\n  </svg>\n));\n"
  },
  {
    "path": "website/src/pages/users.tsx",
    "content": "import * as React from 'react';\nimport { siteConfig } from 'siteConfig';\nimport { Footer } from 'components/Footer';\nimport { Banner } from 'components/Banner';\nimport { Sticky } from 'components/Sticky';\nimport { Nav } from 'components/Nav';\nimport { Container } from 'components/Container';\nimport { Seo } from 'components/Seo';\nimport { users } from 'users';\nimport { Inter } from 'next/font/google';\nimport cn from 'classnames';\nconst inter = Inter({ subsets: ['latin'] });\n\nexport interface UsersProps {}\n\nconst Users: React.FC<UsersProps> = props => {\n  const editUrl = `${siteConfig.repoUrl}/edit/master/website/src/users.ts`;\n  const showcase = users.map(user => (\n    <a\n      href={user.infoLink}\n      key={user.infoLink}\n      className=\"flex items-center justify-center\"\n    >\n      <img\n        src={user.image}\n        alt={user.caption}\n        title={user.caption}\n        style={user.style}\n      />\n    </a>\n  ));\n  return (\n    <div className={cn('h-full min-h-full', inter.className)}>\n      <Banner />\n      <Sticky>\n        <Nav />\n      </Sticky>\n      <Seo\n        title=\"User Showcase\"\n        description=\"Companies and projects using Formik in production.\"\n      />\n      <Container>\n        <div className=\"container px-4 lg:px-0 my-12 space-y-12\">\n          <div className=\"lg:text-center\">\n            <p className=\"text-base font-semibold leading-6 tracking-wide text-blue-600 uppercase\">\n              Showcase\n            </p>\n            <h1 className=\"mt-2 text-3xl font-extrabold leading-8 tracking-tight text-gray-900 sm:text-4xl sm:leading-10\">\n              Who's using Formik?\n            </h1>\n            <p className=\"max-w-2xl mt-4 text-xl leading-7 text-gray-500 lg:mx-auto\">\n              Formik is the world's most popular form library for React and\n              React Native. It's trusted by hundreds of thousands of developers\n              in production including teams at Airbnb, Walmart, Stripe, Lyft,\n              NASA, US Army and more.\n            </p>\n          </div>\n\n          <div className=\"px-4 grid items-center grid-cols-3 gap-16 sm:grid-cols-4 md:grid-cols-5 lg:grid-cols-6 \">\n            {showcase}\n          </div>\n          <div className=\"space-y-6 text-center md:space-y-10\">\n            <div className=\"max-w-2xl mt-4 text-2xl font-bold leading-7 text-gray-900 md:text-5xl lg:mx-auto\">\n              Are you using Formik?\n            </div>\n            <a\n              href={editUrl}\n              target=\"_blank\"\n              rel=\"noopener noreferrer\"\n              className=\"flex items-center justify-center max-w-sm px-8 py-3 mx-auto text-base text-xl font-medium leading-6 text-white transition duration-150 ease-in-out bg-blue-600 border border-transparent rounded-md hover:bg-blue-500 focus:outline-none focus:border-blue-700 focus:ring focus:ring-blue md:py-4 md:text-lg md:px-10\"\n            >\n              Add your company\n            </a>\n          </div>\n        </div>\n      </Container>\n\n      <Footer />\n    </div>\n  );\n};\n\nUsers.displayName = 'Users';\n\nexport default Users;\n"
  },
  {
    "path": "website/src/siteConfig.tsx",
    "content": "// List of projects/orgs using your project for the users page.\n\nexport const siteConfig = {\n  editUrl: 'https://github.com/formik/formik/edit/main',\n  copyright: `Copyright © ${new Date().getFullYear()} Jared Palmer. All Rights Reserved.`,\n  repoUrl: 'https://github.com/formik/formik',\n  discordUrl: 'https://discord.com/invite/pJSg287',\n  twitterUrl: 'https://twitter.com/formiumhq',\n  algolia: {\n    appId: 'BH4D9OD16A',\n    apiKey: '32fabc38a054677ee9b24e69d699fbd0',\n    indexName: 'formik',\n    // algoliaOptions: {\n    //   facetFilters: ['version:VERSION'],\n    // },\n  },\n};\n"
  },
  {
    "path": "website/src/styles/index.css",
    "content": "/* purgecss start ignore */\n@tailwind base;\n@tailwind components;\n/* purgecss end ignore */\n\nbody,\nhtml {\n  text-rendering: optimizeLegibility;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\n.top-24 {\n  top: 6rem;\n}\n\n.focus-ring {\n  outline: none;\n  @apply border-blue-400 ring ring-blue-400;\n}\n\ninput[type='search'] {\n  border: none;\n}\ninput[type='search']:focus {\n  border: none;\n  outline: none;\n  box-shadow: none;\n}\n/* purgecss start ignore */\n\n.embed-responsive {\n  position: relative;\n  display: block;\n  height: 0;\n  padding: 0;\n  overflow: hidden;\n}\n\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n  position: absolute;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  height: 100%;\n  width: 100%;\n  border: 0;\n}\n\n.aspect-ratio-square {\n  padding-top: 100%;\n}\n\n.aspect-ratio-16-9 {\n  padding-top: 56.25%;\n}\n\n.aspect-ratio-4-3 {\n  padding-top: 75%;\n}\n\n.aspect-ratio-21-9 {\n  padding-top: 42.86%;\n}\n\n.anchor {\n  @apply absolute pr-1 ml-2 text-gray-500 underline;\n}\n\n.anchor::after {\n  content: '#';\n  visibility: hidden;\n}\n\nh1:hover .anchor::after,\nh2:hover .anchor::after,\nh3:hover .anchor::after,\nh4:hover .anchor::after,\nh5:hover .anchor::after,\nh6:hover .anchor::after {\n  visibility: visible;\n}\n\n/* Algolia v3 overrides */\n:root {\n  --docsearch-highlight-color: #1965e0;\n  --docsearch-primary-color: #0052cc;\n  --docsearch-searchbox-shadow: 0 0 0 3px rgba(66, 153, 225, 0.5);\n  --ifm-z-index-fixed: 1000;\n  --docsearch-searchbox-height: 48px;\n  --docsearch-icon-stroke-width: 1.4;\n  --hover-overlay: rgba(0, 0, 0, 0.05);\n  --fds-animation-fade-in: cubic-bezier(0, 0, 1, 1);\n  --fds-animation-fade-out: cubic-bezier(0, 0, 1, 1);\n}\n\n.DocSearch--active #__next {\n  -webkit-filter: blur(2px);\n  filter: blur(2px);\n}\n.DocSearch-SearchBar {\n  @apply mb-2;\n}\n\n.DocSearch-Form {\n  @apply rounded-md;\n}\n\n.DocSearch-Search-Icon {\n  height: 20px;\n  width: 20px;\n  stroke-width: 1.6;\n  @apply text-gray-600;\n}\n\n/* Custom Remark alerts */\n.alert {\n  @apply p-4 mb-4 border-l-4;\n}\n\n.alert.alert-danger {\n  @apply text-red-800 border-red-500 bg-red-50;\n}\n\n.alert.alert-success {\n  @apply text-green-700 border-green-500 bg-green-50;\n}\n\n.alert.alert-warning {\n  @apply text-yellow-800 border-yellow-500 bg-yellow-50;\n}\n\n.alert.alert-info {\n  @apply text-blue-800 border-blue-500 bg-blue-50;\n}\n\n.font-mono {\n  font-family: monospace;\n}\n\ndetails > p > a,\ndetails > ul > li > a,\ndetails > ol > li > a,\ndetails > ul > li a,\ndetails > ol > li a,\ndetails > table > tbody > tr > td > a {\n  @apply font-semibold text-blue-600 transition-colors duration-150 ease-out;\n}\n\ndetails > p > a:hover,\ndetails > ul > li > a:hover,\ndetails > ol > li > a:hover,\ndetails > table > tbody > tr > td > a:hover {\n  @apply text-blue-800 transition-colors duration-150 ease-out;\n}\n\ndetails strong {\n  @apply font-bold;\n}\n\ndetails > p,\ndetails > ul,\ndetails > ol,\ndetails > blockquote,\ndetails > pre,\ndetails > div > .code-block {\n  @apply mb-4;\n}\ndetails > ul,\ndetails > ul > li > ul {\n  @apply ml-8 list-disc;\n}\n\ndetails > ol {\n  @apply ml-8 list-decimal;\n}\ndetails {\n  @apply p-3 mb-3 text-sm leading-5 border rounded-md shadow-sm bg-gray-50;\n}\ndetails > p {\n  @apply mt-2;\n}\ndetails > summary {\n  @apply text-base font-bold;\n}\n\n@tailwind utilities;\n/* purgecss end ignore */\n"
  },
  {
    "path": "website/src/users.ts",
    "content": "export const users = [\n  {\n    caption: 'Airbnb',\n    image: '/images/logos/airbnb.svg',\n    infoLink: 'https://airbnb.com',\n    pinned: true,\n  },\n  {\n    caption: 'Walmart',\n    image: '/images/logos/walmart.svg',\n    infoLink: 'https://walmart.com',\n    pinned: true,\n  },\n  {\n    caption: 'Lyft',\n    image: '/images/logos/lyft.svg',\n    infoLink: 'https://lyft.com',\n    pinned: true,\n    style: {\n      maxWidth: 75,\n    },\n  },\n  {\n    caption: 'Nasa',\n    image: '/images/logos/nasa.svg',\n    infoLink: 'https://www.nasa.gov',\n    pinned: true,\n    style: {\n      maxWidth: 80,\n    },\n  },\n  {\n    caption: 'Stripe',\n    image: '/images/logos/stripe.svg',\n    infoLink: 'https://stripe.com',\n    pinned: true,\n  },\n  {\n    caption: 'US Army',\n    image: '/images/logos/army.svg',\n    infoLink: 'https://www.army.mil',\n    pinned: true,\n    style: {\n      maxWidth: 80,\n    },\n  },\n  {\n    caption: 'OpenTable',\n    image: '/images/logos/opentable.svg',\n    infoLink: 'https://opentable.com',\n    pinned: true,\n  },\n  {\n    caption: 'Priceline.com',\n    image: '/images/logos/priceline.png',\n    infoLink: 'https://priceline.com',\n    pinned: true,\n    style: {\n      height: 150,\n      width: 200,\n    },\n  },\n  {\n    caption: 'Booking.com',\n    image: '/images/logos/booking.svg',\n    infoLink: 'https://booking.com',\n    pinned: true,\n  },\n  {\n    caption: 'NASDAQ',\n    image: '/images/logos/nasdaq.svg',\n    infoLink: 'https://www.nasdaq.com',\n    pinned: true,\n    style: {\n      width: 155,\n      height: 44,\n    },\n  },\n  {\n    caption: 'PWC',\n    image: '/images/logos/pwc.svg',\n    infoLink: 'https://www.pwc.com',\n    pinned: true,\n    style: {\n      maxWidth: 80,\n    },\n  },\n  {\n    caption: 'NOAA',\n    image: '/images/logos/noaa.svg',\n    infoLink: 'https://www.noaa.gov',\n    pinned: true,\n    style: {\n      maxWidth: 80,\n    },\n  },\n  {\n    caption: 'Docker',\n    image: '/images/logos/docker.svg',\n    infoLink: 'https://docker.com',\n    pinned: true,\n  },\n  {\n    caption: 'Viacom',\n    image: '/images/logos/viacom.svg',\n    infoLink: 'https://viacom.com',\n    pinned: true,\n  },\n  {\n    caption: 'Nokia',\n    image: '/images/logos/nokia.svg',\n    infoLink: 'https://nokia.com',\n    pinned: true,\n  },\n  {\n    caption: 'Sony',\n    image: '/images/logos/sony.svg',\n    infoLink: 'https://sony.com',\n    pinned: true,\n  },\n  {\n    caption: 'State Street',\n    image: '/images/logos/state-street.png',\n    infoLink: 'https://statestreet.com',\n  },\n  {\n    caption: 'Wayfair',\n    image: '/images/logos/wayfair.svg',\n    infoLink: 'https://wayfair.com',\n    pinned: true,\n  },\n  {\n    caption: 'Artsy',\n    image: '/images/logos/artsy.png',\n    infoLink: 'https://artsy.com',\n    pinned: true,\n  },\n  {\n    caption: 'Postmates',\n    image: '/images/logos/postmates.svg',\n    infoLink: 'https://postmates.com',\n    pinned: true,\n  },\n  {\n    caption: 'Capsule Health',\n    image: '/images/logos/capsule.svg',\n    infoLink: 'https://capsulecares.com',\n    pinned: true,\n  },\n  {\n    caption: 'Egghead',\n    image: '/images/logos/egghead.svg',\n    infoLink: 'https://egghead.io',\n    pinned: true,\n  },\n  {\n    caption: 'Frame.io',\n    image: '/images/logos/frameio.png',\n    infoLink: 'https://frame.io',\n  },\n  {\n    caption: 'RVshare',\n    image: '/images/logos/rvshare.svg',\n    infoLink: 'https://rvshare.com',\n  },\n  {\n    caption: 'Extendi',\n    image: '/images/logos/extendi.svg',\n    infoLink: 'https://www.extendi.it',\n  },\n  {\n    caption: 'Gusto',\n    image: '/images/logos/gusto.svg',\n    infoLink: 'https://gusto.com',\n  },\n  {\n    caption: 'Campusjäger',\n    image: '/images/logos/campusjaeger.png',\n    infoLink: 'https://www.campusjaeger.de/',\n  },\n  {\n    caption: 'Letgo',\n    image: '/images/logos/letgo-logo.png',\n    infoLink: 'https://we.letgo.com/',\n    style: {\n      maxWidth: 100,\n    },\n  },\n  {\n    caption: 'gitconnected',\n    image: '/images/logos/gitconnected-logo.png',\n    infoLink: 'https://gitconnected.com',\n  },\n  {\n    caption: 'zauberware',\n    image: '/images/logos/zauberware-logo.svg',\n    infoLink: 'https://www.zauberware.com',\n  },\n  {\n    caption: 'brightwheel',\n    image: '/images/logos/brightwheel.svg',\n    infoLink: 'https://mybrightwheel.com',\n  },\n  {\n    caption: 'restaurant365',\n    image: '/images/logos/restaurant365.svg',\n    infoLink: 'https://restaurant365.com',\n  },\n  {\n    caption: 'CarGurus',\n    image: '/images/logos/cargurus.svg',\n    infoLink: 'https://www.cargurus.com',\n  },\n  {\n    caption: 'Gremlin',\n    image: '/images/logos/gremlin.svg',\n    infoLink: 'https://www.gremlin.com',\n  },\n  {\n    caption: 'Ubidots',\n    image: '/images/logos/ubidots.svg',\n    infoLink: 'https://www.ubidots.com',\n  },\n  {\n    caption: 'SwissDev DevOps Jobs',\n    image: '/images/logos/swissdev-devops-jobs.svg',\n    infoLink: 'https://swissdevjobs.ch/jobs/Dev-Ops/All',\n    style: {\n      maxWidth: 100,\n    },\n  },\n  {\n    caption: 'Benchmark UAE',\n    image: '/images/logos/benchmark-uae.svg',\n    infoLink: 'https://benchmark.ae/',\n  },\n  {\n    caption: 'Authdog',\n    image: '/images/logos/authdog.svg',\n    infoLink: 'https://www.authdog.com',\n  },\n  {\n    caption: 'Techjobs.be IT jobs',\n    image: '/images/logos/techjobsbe.svg',\n    infoLink: 'https://techjobs.be',\n  },\n];\n"
  },
  {
    "path": "website/tailwind.config.js",
    "content": "// tailwind.config.js\n\nconst defaultTheme = require('tailwindcss/defaultTheme');\n\nmodule.exports = {\n  content: ['./src/**/*.ts', './src/**/*.tsx'],\n  theme: {\n    extends: {\n      colors: {\n        ...defaultTheme.colors,\n      },\n      screens: {\n        sm: '640px',\n        md: '768px',\n        lg: '1024px',\n        xl: '1400px',\n      },\n      rotate: {\n        ...defaultTheme.rotate,\n        '-30': '-30deg',\n      },\n      container: {\n        padding: '1rem',\n      },\n    },\n  },\n\n  plugins: [require('@tailwindcss/forms')],\n};\n"
  },
  {
    "path": "website/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"es5\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"strict\": true,\n    \"allowUnreachableCode\": false,\n    \"forceConsistentCasingInFileNames\": true,\n    \"noFallthroughCasesInSwitch\": true,\n    \"noImplicitAny\": true,\n    \"noImplicitReturns\": true,\n    \"noImplicitThis\": true,\n    \"removeComments\": true,\n    \"strictNullChecks\": true,\n    \"importHelpers\": true,\n    \"suppressImplicitAnyIndexErrors\": true,\n    \"noEmit\": true,\n    \"esModuleInterop\": true,\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"resolveJsonModule\": true,\n    \"isolatedModules\": true,\n    \"jsx\": \"preserve\",\n    \"baseUrl\": \"src\",\n    \"incremental\": true\n  },\n  \"exclude\": [\n    \"node_modules\"\n  ],\n  \"include\": [\n    \"next-env.d.ts\",\n    \"src\"\n  ]\n}\n"
  },
  {
    "path": "yarn.lock",
    "content": "# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.\n# yarn lockfile v1\n\n\n\"@algolia/cache-browser-local-storage@4.17.1\":\n  version \"4.17.1\"\n  resolved \"https://registry.yarnpkg.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.17.1.tgz#b2f204a436893b4856165670ec4dda12cdc055b8\"\n  integrity sha512-e91Jpu93X3t3mVdQwF3ZDjSFMFIfzSc+I76G4EX8nl9RYXgqcjframoL05VTjcD2YCsI18RIHAWVCBoCXVZnrw==\n  dependencies:\n    \"@algolia/cache-common\" \"4.17.1\"\n\n\"@algolia/cache-common@4.17.1\":\n  version \"4.17.1\"\n  resolved \"https://registry.yarnpkg.com/@algolia/cache-common/-/cache-common-4.17.1.tgz#f4877f6fdc594a29ce6d032fae96f0517bf80b1d\"\n  integrity sha512-fvi1WT8aSiGAKrcTw8Qg3RYgcwW8GZMHcqEm4AyDBEy72JZlFBSY80cTQ75MslINjCHXLDT+9EN8AGI9WVY7uA==\n\n\"@algolia/cache-in-memory@4.17.1\":\n  version \"4.17.1\"\n  resolved \"https://registry.yarnpkg.com/@algolia/cache-in-memory/-/cache-in-memory-4.17.1.tgz#7b3ab5f6de897677d92db549f8228966c62966d5\"\n  integrity sha512-NbBt6eBWlsXc5geSpfPRC5dkIB/0Ptthw8r0yM5Z7D3sPlYdnTZSO9y9XWXIptRMwmZe4cM8iBMN8y0tzbcBkA==\n  dependencies:\n    \"@algolia/cache-common\" \"4.17.1\"\n\n\"@algolia/client-account@4.17.1\":\n  version \"4.17.1\"\n  resolved \"https://registry.yarnpkg.com/@algolia/client-account/-/client-account-4.17.1.tgz#81747c0828d2688af4a98bbed3d3b0aa7daa25f6\"\n  integrity sha512-3rL/6ofJvyL+q8TiWM3qoM9tig+SY4gB1Vbsj+UeJPnJm8Khm+7OS+r+mFraqR6pTehYqN8yGYoE7x4diEn4aA==\n  dependencies:\n    \"@algolia/client-common\" \"4.17.1\"\n    \"@algolia/client-search\" \"4.17.1\"\n    \"@algolia/transporter\" \"4.17.1\"\n\n\"@algolia/client-analytics@4.17.1\":\n  version \"4.17.1\"\n  resolved \"https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-4.17.1.tgz#d6ecc75fd792fb1dee67c01497098ce175f1c4c9\"\n  integrity sha512-Bepr2w249vODqeBtM7i++tPmUsQ9B81aupUGbDWmjA/FX+jzQqOdhW8w1CFO5kWViNKTbz2WBIJ9U3x8hOa4bA==\n  dependencies:\n    \"@algolia/client-common\" \"4.17.1\"\n    \"@algolia/client-search\" \"4.17.1\"\n    \"@algolia/requester-common\" \"4.17.1\"\n    \"@algolia/transporter\" \"4.17.1\"\n\n\"@algolia/client-common@4.17.1\":\n  version \"4.17.1\"\n  resolved \"https://registry.yarnpkg.com/@algolia/client-common/-/client-common-4.17.1.tgz#a8b561c1e3a19cce2c24e9a49bd822477c2f56d9\"\n  integrity sha512-+r7kg4EgbFnGsDnoGSVNtXZO8xvZ0vzf1WAOV7sqV9PMf1bp6cpJP/3IuPrSk4t5w2KVl+pC8jfTM7HcFlfBEQ==\n  dependencies:\n    \"@algolia/requester-common\" \"4.17.1\"\n    \"@algolia/transporter\" \"4.17.1\"\n\n\"@algolia/client-personalization@4.17.1\":\n  version \"4.17.1\"\n  resolved \"https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-4.17.1.tgz#26b2c8e13e9b69afd4e2c17879f538d408b708f3\"\n  integrity sha512-gJku9DG/THJpfsSlG/az0a3QIn+VVff9kKh8PG8+7ZfxOHS+C+Y5YSeZVsC+c2cfoKLPo3CuHIiJ/p86erR3bA==\n  dependencies:\n    \"@algolia/client-common\" \"4.17.1\"\n    \"@algolia/requester-common\" \"4.17.1\"\n    \"@algolia/transporter\" \"4.17.1\"\n\n\"@algolia/client-search@4.17.1\":\n  version \"4.17.1\"\n  resolved \"https://registry.yarnpkg.com/@algolia/client-search/-/client-search-4.17.1.tgz#defaf56083e613fb593a9a49837b6aa551ed38eb\"\n  integrity sha512-Q5YfT5gVkx60PZDQBqp/zH9aUbBdC7HVvxupiHUgnCKqRQsRZjOhLest7AI6FahepuZLBZS62COrO7v+JvKY7w==\n  dependencies:\n    \"@algolia/client-common\" \"4.17.1\"\n    \"@algolia/requester-common\" \"4.17.1\"\n    \"@algolia/transporter\" \"4.17.1\"\n\n\"@algolia/logger-common@4.17.1\":\n  version \"4.17.1\"\n  resolved \"https://registry.yarnpkg.com/@algolia/logger-common/-/logger-common-4.17.1.tgz#fe50f67a86276cebdfd8337bc5d925f7a3bf9e43\"\n  integrity sha512-Us28Ot+fLEmX9M96sa65VZ8EyEEzhYPxfhV9aQyKDjfXbUdJlJxKt6wZpoEg9RAPSdO8IjK9nmuW2P8au3rRsg==\n\n\"@algolia/logger-console@4.17.1\":\n  version \"4.17.1\"\n  resolved \"https://registry.yarnpkg.com/@algolia/logger-console/-/logger-console-4.17.1.tgz#d9d6dc0bb6ad1321b66163491cc4618d27beb73d\"\n  integrity sha512-iKGQTpOjHiE64W3JIOu6dmDvn+AfYIElI9jf/Nt6umRPmP/JI9rK+OHUoW4pKrBtdG0DPd62ppeNXzSnLxY6/g==\n  dependencies:\n    \"@algolia/logger-common\" \"4.17.1\"\n\n\"@algolia/requester-browser-xhr@4.17.1\":\n  version \"4.17.1\"\n  resolved \"https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.17.1.tgz#8be50e4196cd9d1ec311970845a42f2aee35860e\"\n  integrity sha512-W5mGfGDsyfVR+r4pUFrYLGBEM18gs38+GNt5PE5uPULy4uVTSnnVSkJkWeRkmLBk9zEZ/Nld8m4zavK6dtEuYg==\n  dependencies:\n    \"@algolia/requester-common\" \"4.17.1\"\n\n\"@algolia/requester-common@4.17.1\":\n  version \"4.17.1\"\n  resolved \"https://registry.yarnpkg.com/@algolia/requester-common/-/requester-common-4.17.1.tgz#3b3912c8df1e05f0fd49f4c9a7caa3fe45d2d995\"\n  integrity sha512-HggXdjvVFQR0I5l7hM5WdHgQ1tqcRWeyXZz8apQ7zPWZhirmY2E9D6LVhDh/UnWQNEm7nBtM+eMFONJ3bZccIQ==\n\n\"@algolia/requester-node-http@4.17.1\":\n  version \"4.17.1\"\n  resolved \"https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-4.17.1.tgz#f4eeee985833ad2b51ac9ff757be5c1a786ff80a\"\n  integrity sha512-NzFWecXT6d0PPsQY9L+/qoK2deF74OLcpvqCH+Vh3mh+QzPsFafcBExdguAjZsAWDn1R6JEeFW7/fo/p0SE57w==\n  dependencies:\n    \"@algolia/requester-common\" \"4.17.1\"\n\n\"@algolia/transporter@4.17.1\":\n  version \"4.17.1\"\n  resolved \"https://registry.yarnpkg.com/@algolia/transporter/-/transporter-4.17.1.tgz#9508e08e984e110603ec66a19362017c1df59e05\"\n  integrity sha512-ZM+qhX47Vh46mWH8/U9ihvy98HdTYpYQDSlqBD7IbiUbbyoCMke+qmdSX2MGhR2FCcXBSxejsJKKVAfbpaLVgg==\n  dependencies:\n    \"@algolia/cache-common\" \"4.17.1\"\n    \"@algolia/logger-common\" \"4.17.1\"\n    \"@algolia/requester-common\" \"4.17.1\"\n\n\"@alloc/quick-lru@^5.2.0\":\n  version \"5.2.0\"\n  resolved \"https://registry.yarnpkg.com/@alloc/quick-lru/-/quick-lru-5.2.0.tgz#7bf68b20c0a350f936915fcae06f58e32007ce30\"\n  integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==\n\n\"@babel/code-frame@7.12.11\":\n  version \"7.12.11\"\n  resolved \"https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f\"\n  integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==\n  dependencies:\n    \"@babel/highlight\" \"^7.10.4\"\n\n\"@babel/code-frame@^7.0.0\", \"@babel/code-frame@^7.10.4\", \"@babel/code-frame@^7.5.5\":\n  version \"7.10.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a\"\n  integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==\n  dependencies:\n    \"@babel/highlight\" \"^7.10.4\"\n\n\"@babel/code-frame@^7.21.4\":\n  version \"7.21.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.21.4.tgz#d0fa9e4413aca81f2b23b9442797bda1826edb39\"\n  integrity sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==\n  dependencies:\n    \"@babel/highlight\" \"^7.18.6\"\n\n\"@babel/compat-data@^7.10.4\", \"@babel/compat-data@^7.11.0\":\n  version \"7.11.0\"\n  resolved \"https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.11.0.tgz#e9f73efe09af1355b723a7f39b11bad637d7c99c\"\n  integrity sha512-TPSvJfv73ng0pfnEOh17bYMPQbI95+nGWc71Ss4vZdRBHTDqmM9Z8ZV4rYz8Ks7sfzc95n30k6ODIq5UGnXcYQ==\n  dependencies:\n    browserslist \"^4.12.0\"\n    invariant \"^2.2.4\"\n    semver \"^5.5.0\"\n\n\"@babel/core@7.12.9\":\n  version \"7.12.9\"\n  resolved \"https://registry.yarnpkg.com/@babel/core/-/core-7.12.9.tgz#fd450c4ec10cdbb980e2928b7aa7a28484593fc8\"\n  integrity sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==\n  dependencies:\n    \"@babel/code-frame\" \"^7.10.4\"\n    \"@babel/generator\" \"^7.12.5\"\n    \"@babel/helper-module-transforms\" \"^7.12.1\"\n    \"@babel/helpers\" \"^7.12.5\"\n    \"@babel/parser\" \"^7.12.7\"\n    \"@babel/template\" \"^7.12.7\"\n    \"@babel/traverse\" \"^7.12.9\"\n    \"@babel/types\" \"^7.12.7\"\n    convert-source-map \"^1.7.0\"\n    debug \"^4.1.0\"\n    gensync \"^1.0.0-beta.1\"\n    json5 \"^2.1.2\"\n    lodash \"^4.17.19\"\n    resolve \"^1.3.2\"\n    semver \"^5.4.1\"\n    source-map \"^0.5.0\"\n\n\"@babel/core@^7.0.0\":\n  version \"7.12.3\"\n  resolved \"https://registry.yarnpkg.com/@babel/core/-/core-7.12.3.tgz#1b436884e1e3bff6fb1328dc02b208759de92ad8\"\n  integrity sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g==\n  dependencies:\n    \"@babel/code-frame\" \"^7.10.4\"\n    \"@babel/generator\" \"^7.12.1\"\n    \"@babel/helper-module-transforms\" \"^7.12.1\"\n    \"@babel/helpers\" \"^7.12.1\"\n    \"@babel/parser\" \"^7.12.3\"\n    \"@babel/template\" \"^7.10.4\"\n    \"@babel/traverse\" \"^7.12.1\"\n    \"@babel/types\" \"^7.12.1\"\n    convert-source-map \"^1.7.0\"\n    debug \"^4.1.0\"\n    gensync \"^1.0.0-beta.1\"\n    json5 \"^2.1.2\"\n    lodash \"^4.17.19\"\n    resolve \"^1.3.2\"\n    semver \"^5.4.1\"\n    source-map \"^0.5.0\"\n\n\"@babel/core@^7.1.0\", \"@babel/core@^7.4.4\":\n  version \"7.7.5\"\n  resolved \"https://registry.yarnpkg.com/@babel/core/-/core-7.7.5.tgz#ae1323cd035b5160293307f50647e83f8ba62f7e\"\n  integrity sha512-M42+ScN4+1S9iB6f+TL7QBpoQETxbclx+KNoKJABghnKYE+fMzSGqst0BZJc8CpI625bwPwYgUyRvxZ+0mZzpw==\n  dependencies:\n    \"@babel/code-frame\" \"^7.5.5\"\n    \"@babel/generator\" \"^7.7.4\"\n    \"@babel/helpers\" \"^7.7.4\"\n    \"@babel/parser\" \"^7.7.5\"\n    \"@babel/template\" \"^7.7.4\"\n    \"@babel/traverse\" \"^7.7.4\"\n    \"@babel/types\" \"^7.7.4\"\n    convert-source-map \"^1.7.0\"\n    debug \"^4.1.0\"\n    json5 \"^2.1.0\"\n    lodash \"^4.17.13\"\n    resolve \"^1.3.2\"\n    semver \"^5.4.1\"\n    source-map \"^0.5.0\"\n\n\"@babel/core@^7.7.5\":\n  version \"7.11.6\"\n  resolved \"https://registry.yarnpkg.com/@babel/core/-/core-7.11.6.tgz#3a9455dc7387ff1bac45770650bc13ba04a15651\"\n  integrity sha512-Wpcv03AGnmkgm6uS6k8iwhIwTrcP0m17TL1n1sy7qD0qelDu4XNeW0dN0mHfa+Gei211yDaLoEe/VlbXQzM4Bg==\n  dependencies:\n    \"@babel/code-frame\" \"^7.10.4\"\n    \"@babel/generator\" \"^7.11.6\"\n    \"@babel/helper-module-transforms\" \"^7.11.0\"\n    \"@babel/helpers\" \"^7.10.4\"\n    \"@babel/parser\" \"^7.11.5\"\n    \"@babel/template\" \"^7.10.4\"\n    \"@babel/traverse\" \"^7.11.5\"\n    \"@babel/types\" \"^7.11.5\"\n    convert-source-map \"^1.7.0\"\n    debug \"^4.1.0\"\n    gensync \"^1.0.0-beta.1\"\n    json5 \"^2.1.2\"\n    lodash \"^4.17.19\"\n    resolve \"^1.3.2\"\n    semver \"^5.4.1\"\n    source-map \"^0.5.0\"\n\n\"@babel/generator@^7.0.0\", \"@babel/generator@^7.11.6\", \"@babel/generator@^7.12.1\", \"@babel/generator@^7.7.4\":\n  version \"7.12.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.1.tgz#0d70be32bdaa03d7c51c8597dda76e0df1f15468\"\n  integrity sha512-DB+6rafIdc9o72Yc3/Ph5h+6hUjeOp66pF0naQBgUFFuPqzQwIlPTm3xZR7YNvduIMtkDIj2t21LSQwnbCrXvg==\n  dependencies:\n    \"@babel/types\" \"^7.12.1\"\n    jsesc \"^2.5.1\"\n    source-map \"^0.5.0\"\n\n\"@babel/generator@^7.12.5\", \"@babel/generator@^7.22.0\":\n  version \"7.22.3\"\n  resolved \"https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.3.tgz#0ff675d2edb93d7596c5f6728b52615cfc0df01e\"\n  integrity sha512-C17MW4wlk//ES/CJDL51kPNwl+qiBQyN7b9SKyVp11BLGFeSPoVaHrv+MNt8jwQFhQWowW88z1eeBx3pFz9v8A==\n  dependencies:\n    \"@babel/types\" \"^7.22.3\"\n    \"@jridgewell/gen-mapping\" \"^0.3.2\"\n    \"@jridgewell/trace-mapping\" \"^0.3.17\"\n    jsesc \"^2.5.1\"\n\n\"@babel/helper-annotate-as-pure@^7.10.4\":\n  version \"7.10.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3\"\n  integrity sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==\n  dependencies:\n    \"@babel/types\" \"^7.10.4\"\n\n\"@babel/helper-builder-binary-assignment-operator-visitor@^7.10.4\":\n  version \"7.10.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz#bb0b75f31bf98cbf9ff143c1ae578b87274ae1a3\"\n  integrity sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==\n  dependencies:\n    \"@babel/helper-explode-assignable-expression\" \"^7.10.4\"\n    \"@babel/types\" \"^7.10.4\"\n\n\"@babel/helper-builder-react-jsx-experimental@^7.12.1\":\n  version \"7.12.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.12.4.tgz#55fc1ead5242caa0ca2875dcb8eed6d311e50f48\"\n  integrity sha512-AjEa0jrQqNk7eDQOo0pTfUOwQBMF+xVqrausQwT9/rTKy0g04ggFNaJpaE09IQMn9yExluigWMJcj0WC7bq+Og==\n  dependencies:\n    \"@babel/helper-annotate-as-pure\" \"^7.10.4\"\n    \"@babel/helper-module-imports\" \"^7.12.1\"\n    \"@babel/types\" \"^7.12.1\"\n\n\"@babel/helper-builder-react-jsx@^7.10.4\":\n  version \"7.10.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.10.4.tgz#8095cddbff858e6fa9c326daee54a2f2732c1d5d\"\n  integrity sha512-5nPcIZ7+KKDxT1427oBivl9V9YTal7qk0diccnh7RrcgrT/pGFOjgGw1dgryyx1GvHEpXVfoDF6Ak3rTiWh8Rg==\n  dependencies:\n    \"@babel/helper-annotate-as-pure\" \"^7.10.4\"\n    \"@babel/types\" \"^7.10.4\"\n\n\"@babel/helper-compilation-targets@^7.10.4\":\n  version \"7.10.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.4.tgz#804ae8e3f04376607cc791b9d47d540276332bd2\"\n  integrity sha512-a3rYhlsGV0UHNDvrtOXBg8/OpfV0OKTkxKPzIplS1zpx7CygDcWWxckxZeDd3gzPzC4kUT0A4nVFDK0wGMh4MQ==\n  dependencies:\n    \"@babel/compat-data\" \"^7.10.4\"\n    browserslist \"^4.12.0\"\n    invariant \"^2.2.4\"\n    levenary \"^1.1.1\"\n    semver \"^5.5.0\"\n\n\"@babel/helper-create-class-features-plugin@^7.10.4\", \"@babel/helper-create-class-features-plugin@^7.12.1\":\n  version \"7.12.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz#3c45998f431edd4a9214c5f1d3ad1448a6137f6e\"\n  integrity sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w==\n  dependencies:\n    \"@babel/helper-function-name\" \"^7.10.4\"\n    \"@babel/helper-member-expression-to-functions\" \"^7.12.1\"\n    \"@babel/helper-optimise-call-expression\" \"^7.10.4\"\n    \"@babel/helper-replace-supers\" \"^7.12.1\"\n    \"@babel/helper-split-export-declaration\" \"^7.10.4\"\n\n\"@babel/helper-create-class-features-plugin@^7.7.4\":\n  version \"7.7.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.7.4.tgz#fce60939fd50618610942320a8d951b3b639da2d\"\n  integrity sha512-l+OnKACG4uiDHQ/aJT8dwpR+LhCJALxL0mJ6nzjB25e5IPwqV1VOsY7ah6UB1DG+VOXAIMtuC54rFJGiHkxjgA==\n  dependencies:\n    \"@babel/helper-function-name\" \"^7.7.4\"\n    \"@babel/helper-member-expression-to-functions\" \"^7.7.4\"\n    \"@babel/helper-optimise-call-expression\" \"^7.7.4\"\n    \"@babel/helper-plugin-utils\" \"^7.0.0\"\n    \"@babel/helper-replace-supers\" \"^7.7.4\"\n    \"@babel/helper-split-export-declaration\" \"^7.7.4\"\n\n\"@babel/helper-create-regexp-features-plugin@^7.10.4\", \"@babel/helper-create-regexp-features-plugin@^7.12.1\":\n  version \"7.12.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.1.tgz#18b1302d4677f9dc4740fe8c9ed96680e29d37e8\"\n  integrity sha512-rsZ4LGvFTZnzdNZR5HZdmJVuXK8834R5QkF3WvcnBhrlVtF0HSIUC6zbreL9MgjTywhKokn8RIYRiq99+DLAxA==\n  dependencies:\n    \"@babel/helper-annotate-as-pure\" \"^7.10.4\"\n    \"@babel/helper-regex\" \"^7.10.4\"\n    regexpu-core \"^4.7.1\"\n\n\"@babel/helper-define-map@^7.10.4\":\n  version \"7.10.5\"\n  resolved \"https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz#b53c10db78a640800152692b13393147acb9bb30\"\n  integrity sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==\n  dependencies:\n    \"@babel/helper-function-name\" \"^7.10.4\"\n    \"@babel/types\" \"^7.10.5\"\n    lodash \"^4.17.19\"\n\n\"@babel/helper-define-polyfill-provider@^0.0.3\":\n  version \"0.0.3\"\n  resolved \"https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.0.3.tgz#df9da66285b884ce66417abdd0b6ca91198149bd\"\n  integrity sha512-dULDd/APiP4JowYDAMosecKOi/1v+UId99qhBGiO3myM29KtAVKS/R3x3OJJNBR0FeYB1BcYb2dCwkhqvxWXXQ==\n  dependencies:\n    \"@babel/helper-compilation-targets\" \"^7.10.4\"\n    \"@babel/helper-module-imports\" \"^7.10.4\"\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n    \"@babel/traverse\" \"^7.11.5\"\n    debug \"^4.1.1\"\n    lodash.debounce \"^4.0.8\"\n    resolve \"^1.14.2\"\n    semver \"^6.1.2\"\n\n\"@babel/helper-environment-visitor@^7.22.1\":\n  version \"7.22.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.1.tgz#ac3a56dbada59ed969d712cf527bd8271fe3eba8\"\n  integrity sha512-Z2tgopurB/kTbidvzeBrc2To3PUP/9i5MUe+fU6QJCQDyPwSH2oRapkLw3KGECDYSjhQZCNxEvNvZlLw8JjGwA==\n\n\"@babel/helper-explode-assignable-expression@^7.10.4\":\n  version \"7.12.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz#8006a466695c4ad86a2a5f2fb15b5f2c31ad5633\"\n  integrity sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA==\n  dependencies:\n    \"@babel/types\" \"^7.12.1\"\n\n\"@babel/helper-function-name@^7.10.4\", \"@babel/helper-function-name@^7.7.4\":\n  version \"7.10.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a\"\n  integrity sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==\n  dependencies:\n    \"@babel/helper-get-function-arity\" \"^7.10.4\"\n    \"@babel/template\" \"^7.10.4\"\n    \"@babel/types\" \"^7.10.4\"\n\n\"@babel/helper-function-name@^7.21.0\":\n  version \"7.21.0\"\n  resolved \"https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz#d552829b10ea9f120969304023cd0645fa00b1b4\"\n  integrity sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==\n  dependencies:\n    \"@babel/template\" \"^7.20.7\"\n    \"@babel/types\" \"^7.21.0\"\n\n\"@babel/helper-get-function-arity@^7.10.4\":\n  version \"7.10.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2\"\n  integrity sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==\n  dependencies:\n    \"@babel/types\" \"^7.10.4\"\n\n\"@babel/helper-hoist-variables@^7.10.4\":\n  version \"7.10.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz#d49b001d1d5a68ca5e6604dda01a6297f7c9381e\"\n  integrity sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==\n  dependencies:\n    \"@babel/types\" \"^7.10.4\"\n\n\"@babel/helper-hoist-variables@^7.18.6\":\n  version \"7.18.6\"\n  resolved \"https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678\"\n  integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==\n  dependencies:\n    \"@babel/types\" \"^7.18.6\"\n\n\"@babel/helper-member-expression-to-functions@^7.12.1\":\n  version \"7.12.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.1.tgz#fba0f2fcff3fba00e6ecb664bb5e6e26e2d6165c\"\n  integrity sha512-k0CIe3tXUKTRSoEx1LQEPFU9vRQfqHtl+kf8eNnDqb4AUJEy5pz6aIiog+YWtVm2jpggjS1laH68bPsR+KWWPQ==\n  dependencies:\n    \"@babel/types\" \"^7.12.1\"\n\n\"@babel/helper-member-expression-to-functions@^7.7.4\":\n  version \"7.7.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.7.4.tgz#356438e2569df7321a8326644d4b790d2122cb74\"\n  integrity sha512-9KcA1X2E3OjXl/ykfMMInBK+uVdfIVakVe7W7Lg3wfXUNyS3Q1HWLFRwZIjhqiCGbslummPDnmb7vIekS0C1vw==\n  dependencies:\n    \"@babel/types\" \"^7.7.4\"\n\n\"@babel/helper-module-imports@^7.0.0\", \"@babel/helper-module-imports@^7.10.4\", \"@babel/helper-module-imports@^7.12.1\":\n  version \"7.12.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.1.tgz#1644c01591a15a2f084dd6d092d9430eb1d1216c\"\n  integrity sha512-ZeC1TlMSvikvJNy1v/wPIazCu3NdOwgYZLIkmIyAsGhqkNpiDoQQRmaCK8YP4Pq3GPTLPV9WXaPCJKvx06JxKA==\n  dependencies:\n    \"@babel/types\" \"^7.12.1\"\n\n\"@babel/helper-module-transforms@^7.10.4\", \"@babel/helper-module-transforms@^7.11.0\", \"@babel/helper-module-transforms@^7.12.1\":\n  version \"7.12.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz#7954fec71f5b32c48e4b303b437c34453fd7247c\"\n  integrity sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==\n  dependencies:\n    \"@babel/helper-module-imports\" \"^7.12.1\"\n    \"@babel/helper-replace-supers\" \"^7.12.1\"\n    \"@babel/helper-simple-access\" \"^7.12.1\"\n    \"@babel/helper-split-export-declaration\" \"^7.11.0\"\n    \"@babel/helper-validator-identifier\" \"^7.10.4\"\n    \"@babel/template\" \"^7.10.4\"\n    \"@babel/traverse\" \"^7.12.1\"\n    \"@babel/types\" \"^7.12.1\"\n    lodash \"^4.17.19\"\n\n\"@babel/helper-module-transforms@^7.10.5\":\n  version \"7.11.0\"\n  resolved \"https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz#b16f250229e47211abdd84b34b64737c2ab2d359\"\n  integrity sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg==\n  dependencies:\n    \"@babel/helper-module-imports\" \"^7.10.4\"\n    \"@babel/helper-replace-supers\" \"^7.10.4\"\n    \"@babel/helper-simple-access\" \"^7.10.4\"\n    \"@babel/helper-split-export-declaration\" \"^7.11.0\"\n    \"@babel/template\" \"^7.10.4\"\n    \"@babel/types\" \"^7.11.0\"\n    lodash \"^4.17.19\"\n\n\"@babel/helper-optimise-call-expression@^7.10.4\":\n  version \"7.10.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz#50dc96413d594f995a77905905b05893cd779673\"\n  integrity sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==\n  dependencies:\n    \"@babel/types\" \"^7.10.4\"\n\n\"@babel/helper-optimise-call-expression@^7.7.4\":\n  version \"7.7.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.7.4.tgz#034af31370d2995242aa4df402c3b7794b2dcdf2\"\n  integrity sha512-VB7gWZ2fDkSuqW6b1AKXkJWO5NyNI3bFL/kK79/30moK57blr6NbH8xcl2XcKCwOmJosftWunZqfO84IGq3ZZg==\n  dependencies:\n    \"@babel/types\" \"^7.7.4\"\n\n\"@babel/helper-plugin-utils@7.10.4\", \"@babel/helper-plugin-utils@^7.10.4\", \"@babel/helper-plugin-utils@^7.8.0\":\n  version \"7.10.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375\"\n  integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==\n\n\"@babel/helper-plugin-utils@^7.0.0\":\n  version \"7.0.0\"\n  resolved \"https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250\"\n  integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==\n\n\"@babel/helper-plugin-utils@^7.8.3\":\n  version \"7.8.3\"\n  resolved \"https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz#9ea293be19babc0f52ff8ca88b34c3611b208670\"\n  integrity sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==\n\n\"@babel/helper-regex@^7.10.4\":\n  version \"7.10.5\"\n  resolved \"https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.10.5.tgz#32dfbb79899073c415557053a19bd055aae50ae0\"\n  integrity sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg==\n  dependencies:\n    lodash \"^4.17.19\"\n\n\"@babel/helper-remap-async-to-generator@^7.10.4\", \"@babel/helper-remap-async-to-generator@^7.12.1\":\n  version \"7.12.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz#8c4dbbf916314f6047dc05e6a2217074238347fd\"\n  integrity sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A==\n  dependencies:\n    \"@babel/helper-annotate-as-pure\" \"^7.10.4\"\n    \"@babel/helper-wrap-function\" \"^7.10.4\"\n    \"@babel/types\" \"^7.12.1\"\n\n\"@babel/helper-replace-supers@^7.10.4\", \"@babel/helper-replace-supers@^7.12.1\":\n  version \"7.12.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.12.1.tgz#f15c9cc897439281891e11d5ce12562ac0cf3fa9\"\n  integrity sha512-zJjTvtNJnCFsCXVi5rUInstLd/EIVNmIKA1Q9ynESmMBWPWd+7sdR+G4/wdu+Mppfep0XLyG2m7EBPvjCeFyrw==\n  dependencies:\n    \"@babel/helper-member-expression-to-functions\" \"^7.12.1\"\n    \"@babel/helper-optimise-call-expression\" \"^7.10.4\"\n    \"@babel/traverse\" \"^7.12.1\"\n    \"@babel/types\" \"^7.12.1\"\n\n\"@babel/helper-replace-supers@^7.7.4\":\n  version \"7.7.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.7.4.tgz#3c881a6a6a7571275a72d82e6107126ec9e2cdd2\"\n  integrity sha512-pP0tfgg9hsZWo5ZboYGuBn/bbYT/hdLPVSS4NMmiRJdwWhP0IznPwN9AE1JwyGsjSPLC364I0Qh5p+EPkGPNpg==\n  dependencies:\n    \"@babel/helper-member-expression-to-functions\" \"^7.7.4\"\n    \"@babel/helper-optimise-call-expression\" \"^7.7.4\"\n    \"@babel/traverse\" \"^7.7.4\"\n    \"@babel/types\" \"^7.7.4\"\n\n\"@babel/helper-simple-access@^7.10.4\", \"@babel/helper-simple-access@^7.12.1\":\n  version \"7.12.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz#32427e5aa61547d38eb1e6eaf5fd1426fdad9136\"\n  integrity sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==\n  dependencies:\n    \"@babel/types\" \"^7.12.1\"\n\n\"@babel/helper-skip-transparent-expression-wrappers@^7.11.0\", \"@babel/helper-skip-transparent-expression-wrappers@^7.12.1\":\n  version \"7.12.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz#462dc63a7e435ade8468385c63d2b84cce4b3cbf\"\n  integrity sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==\n  dependencies:\n    \"@babel/types\" \"^7.12.1\"\n\n\"@babel/helper-split-export-declaration@^7.10.4\", \"@babel/helper-split-export-declaration@^7.11.0\", \"@babel/helper-split-export-declaration@^7.7.4\":\n  version \"7.11.0\"\n  resolved \"https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz#f8a491244acf6a676158ac42072911ba83ad099f\"\n  integrity sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==\n  dependencies:\n    \"@babel/types\" \"^7.11.0\"\n\n\"@babel/helper-split-export-declaration@^7.18.6\":\n  version \"7.18.6\"\n  resolved \"https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075\"\n  integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==\n  dependencies:\n    \"@babel/types\" \"^7.18.6\"\n\n\"@babel/helper-string-parser@^7.21.5\":\n  version \"7.21.5\"\n  resolved \"https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz#2b3eea65443c6bdc31c22d037c65f6d323b6b2bd\"\n  integrity sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==\n\n\"@babel/helper-validator-identifier@^7.10.4\":\n  version \"7.10.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2\"\n  integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==\n\n\"@babel/helper-validator-identifier@^7.18.6\", \"@babel/helper-validator-identifier@^7.19.1\":\n  version \"7.19.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2\"\n  integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==\n\n\"@babel/helper-wrap-function@^7.10.4\":\n  version \"7.12.3\"\n  resolved \"https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz#3332339fc4d1fbbf1c27d7958c27d34708e990d9\"\n  integrity sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow==\n  dependencies:\n    \"@babel/helper-function-name\" \"^7.10.4\"\n    \"@babel/template\" \"^7.10.4\"\n    \"@babel/traverse\" \"^7.10.4\"\n    \"@babel/types\" \"^7.10.4\"\n\n\"@babel/helpers@^7.10.4\", \"@babel/helpers@^7.12.1\":\n  version \"7.12.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.12.1.tgz#8a8261c1d438ec18cb890434df4ec768734c1e79\"\n  integrity sha512-9JoDSBGoWtmbay98efmT2+mySkwjzeFeAL9BuWNoVQpkPFQF8SIIFUfY5os9u8wVzglzoiPRSW7cuJmBDUt43g==\n  dependencies:\n    \"@babel/template\" \"^7.10.4\"\n    \"@babel/traverse\" \"^7.12.1\"\n    \"@babel/types\" \"^7.12.1\"\n\n\"@babel/helpers@^7.12.5\":\n  version \"7.22.3\"\n  resolved \"https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.3.tgz#53b74351da9684ea2f694bf0877998da26dd830e\"\n  integrity sha512-jBJ7jWblbgr7r6wYZHMdIqKc73ycaTcCaWRq4/2LpuPHcx7xMlZvpGQkOYc9HeSjn6rcx15CPlgVcBtZ4WZJ2w==\n  dependencies:\n    \"@babel/template\" \"^7.21.9\"\n    \"@babel/traverse\" \"^7.22.1\"\n    \"@babel/types\" \"^7.22.3\"\n\n\"@babel/helpers@^7.7.4\":\n  version \"7.7.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.7.4.tgz#62c215b9e6c712dadc15a9a0dcab76c92a940302\"\n  integrity sha512-ak5NGZGJ6LV85Q1Zc9gn2n+ayXOizryhjSUBTdu5ih1tlVCJeuQENzc4ItyCVhINVXvIT/ZQ4mheGIsfBkpskg==\n  dependencies:\n    \"@babel/template\" \"^7.7.4\"\n    \"@babel/traverse\" \"^7.7.4\"\n    \"@babel/types\" \"^7.7.4\"\n\n\"@babel/highlight@^7.10.4\":\n  version \"7.10.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143\"\n  integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==\n  dependencies:\n    \"@babel/helper-validator-identifier\" \"^7.10.4\"\n    chalk \"^2.0.0\"\n    js-tokens \"^4.0.0\"\n\n\"@babel/highlight@^7.18.6\":\n  version \"7.18.6\"\n  resolved \"https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf\"\n  integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==\n  dependencies:\n    \"@babel/helper-validator-identifier\" \"^7.18.6\"\n    chalk \"^2.0.0\"\n    js-tokens \"^4.0.0\"\n\n\"@babel/parser@^7.0.0\", \"@babel/parser@^7.10.4\", \"@babel/parser@^7.11.5\", \"@babel/parser@^7.12.1\", \"@babel/parser@^7.12.3\", \"@babel/parser@^7.7.4\":\n  version \"7.12.3\"\n  resolved \"https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.3.tgz#a305415ebe7a6c7023b40b5122a0662d928334cd\"\n  integrity sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw==\n\n\"@babel/parser@^7.1.0\", \"@babel/parser@^7.7.5\":\n  version \"7.7.5\"\n  resolved \"https://registry.yarnpkg.com/@babel/parser/-/parser-7.7.5.tgz#cbf45321619ac12d83363fcf9c94bb67fa646d71\"\n  integrity sha512-KNlOe9+/nk4i29g0VXgl8PEXIRms5xKLJeuZ6UptN0fHv+jDiriG+y94X6qAgWTR0h3KaoM1wK5G5h7MHFRSig==\n\n\"@babel/parser@^7.12.7\", \"@babel/parser@^7.21.9\", \"@babel/parser@^7.22.0\":\n  version \"7.22.3\"\n  resolved \"https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.3.tgz#838ae31893373222cd9062568e2192c670037e00\"\n  integrity sha512-vrukxyW/ep8UD1UDzOYpTKQ6abgjFoeG6L+4ar9+c5TN9QnlqiOi6QK7LSR5ewm/ERyGkT/Ai6VboNrxhbr9Uw==\n\n\"@babel/plugin-external-helpers@^7.0.0\":\n  version \"7.12.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-external-helpers/-/plugin-external-helpers-7.12.1.tgz#df474775860b3b8bdfeaedd45596cd2c7f36a2be\"\n  integrity sha512-5VBqan0daXhDSRjrq2miABuELRwWJWFdM42Jvs/CDuhp+Es+fW+ISA5l+co8d+9oN3WLz/N3VvzyeseL3AvjxA==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n\n\"@babel/plugin-proposal-async-generator-functions@^7.10.4\":\n  version \"7.10.5\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz#3491cabf2f7c179ab820606cec27fed15e0e8558\"\n  integrity sha512-cNMCVezQbrRGvXJwm9fu/1sJj9bHdGAgKodZdLqOQIpfoH3raqmRPBM17+lh7CzhiKRRBrGtZL9WcjxSoGYUSg==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n    \"@babel/helper-remap-async-to-generator\" \"^7.10.4\"\n    \"@babel/plugin-syntax-async-generators\" \"^7.8.0\"\n\n\"@babel/plugin-proposal-class-properties@^7.0.0\":\n  version \"7.12.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz#a082ff541f2a29a4821065b8add9346c0c16e5de\"\n  integrity sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==\n  dependencies:\n    \"@babel/helper-create-class-features-plugin\" \"^7.12.1\"\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n\n\"@babel/plugin-proposal-class-properties@^7.10.4\":\n  version \"7.10.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz#a33bf632da390a59c7a8c570045d1115cd778807\"\n  integrity sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg==\n  dependencies:\n    \"@babel/helper-create-class-features-plugin\" \"^7.10.4\"\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n\n\"@babel/plugin-proposal-class-properties@^7.4.4\":\n  version \"7.7.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.7.4.tgz#2f964f0cb18b948450362742e33e15211e77c2ba\"\n  integrity sha512-EcuXeV4Hv1X3+Q1TsuOmyyxeTRiSqurGJ26+I/FW1WbymmRRapVORm6x1Zl3iDIHyRxEs+VXWp6qnlcfcJSbbw==\n  dependencies:\n    \"@babel/helper-create-class-features-plugin\" \"^7.7.4\"\n    \"@babel/helper-plugin-utils\" \"^7.0.0\"\n\n\"@babel/plugin-proposal-dynamic-import@^7.10.4\":\n  version \"7.10.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz#ba57a26cb98b37741e9d5bca1b8b0ddf8291f17e\"\n  integrity sha512-up6oID1LeidOOASNXgv/CFbgBqTuKJ0cJjz6An5tWD+NVBNlp3VNSBxv2ZdU7SYl3NxJC7agAQDApZusV6uFwQ==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n    \"@babel/plugin-syntax-dynamic-import\" \"^7.8.0\"\n\n\"@babel/plugin-proposal-export-default-from@^7.0.0\":\n  version \"7.12.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.12.1.tgz#c6e62d668a8abcfe0d28b82f560395fecb611c5a\"\n  integrity sha512-z5Q4Ke7j0AexQRfgUvnD+BdCSgpTEKnqQ3kskk2jWtOBulxICzd1X9BGt7kmWftxZ2W3++OZdt5gtmC8KLxdRQ==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n    \"@babel/plugin-syntax-export-default-from\" \"^7.12.1\"\n\n\"@babel/plugin-proposal-export-namespace-from@^7.10.4\":\n  version \"7.10.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.10.4.tgz#570d883b91031637b3e2958eea3c438e62c05f54\"\n  integrity sha512-aNdf0LY6/3WXkhh0Fdb6Zk9j1NMD8ovj3F6r0+3j837Pn1S1PdNtcwJ5EG9WkVPNHPxyJDaxMaAOVq4eki0qbg==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n    \"@babel/plugin-syntax-export-namespace-from\" \"^7.8.3\"\n\n\"@babel/plugin-proposal-json-strings@^7.10.4\":\n  version \"7.10.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz#593e59c63528160233bd321b1aebe0820c2341db\"\n  integrity sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n    \"@babel/plugin-syntax-json-strings\" \"^7.8.0\"\n\n\"@babel/plugin-proposal-logical-assignment-operators@^7.11.0\":\n  version \"7.11.0\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.11.0.tgz#9f80e482c03083c87125dee10026b58527ea20c8\"\n  integrity sha512-/f8p4z+Auz0Uaf+i8Ekf1iM7wUNLcViFUGiPxKeXvxTSl63B875YPiVdUDdem7hREcI0E0kSpEhS8tF5RphK7Q==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n    \"@babel/plugin-syntax-logical-assignment-operators\" \"^7.10.4\"\n\n\"@babel/plugin-proposal-nullish-coalescing-operator@^7.0.0\":\n  version \"7.12.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz#3ed4fff31c015e7f3f1467f190dbe545cd7b046c\"\n  integrity sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n    \"@babel/plugin-syntax-nullish-coalescing-operator\" \"^7.8.0\"\n\n\"@babel/plugin-proposal-nullish-coalescing-operator@^7.10.4\":\n  version \"7.10.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz#02a7e961fc32e6d5b2db0649e01bf80ddee7e04a\"\n  integrity sha512-wq5n1M3ZUlHl9sqT2ok1T2/MTt6AXE0e1Lz4WzWBr95LsAZ5qDXe4KnFuauYyEyLiohvXFMdbsOTMyLZs91Zlw==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n    \"@babel/plugin-syntax-nullish-coalescing-operator\" \"^7.8.0\"\n\n\"@babel/plugin-proposal-numeric-separator@^7.10.4\":\n  version \"7.10.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.4.tgz#ce1590ff0a65ad12970a609d78855e9a4c1aef06\"\n  integrity sha512-73/G7QoRoeNkLZFxsoCCvlg4ezE4eM+57PnOqgaPOozd5myfj7p0muD1mRVJvbUWbOzD+q3No2bWbaKy+DJ8DA==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n    \"@babel/plugin-syntax-numeric-separator\" \"^7.10.4\"\n\n\"@babel/plugin-proposal-object-rest-spread@7.12.1\", \"@babel/plugin-proposal-object-rest-spread@^7.0.0\":\n  version \"7.12.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz#def9bd03cea0f9b72283dac0ec22d289c7691069\"\n  integrity sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n    \"@babel/plugin-syntax-object-rest-spread\" \"^7.8.0\"\n    \"@babel/plugin-transform-parameters\" \"^7.12.1\"\n\n\"@babel/plugin-proposal-object-rest-spread@^7.11.0\":\n  version \"7.11.0\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.11.0.tgz#bd81f95a1f746760ea43b6c2d3d62b11790ad0af\"\n  integrity sha512-wzch41N4yztwoRw0ak+37wxwJM2oiIiy6huGCoqkvSTA9acYWcPfn9Y4aJqmFFJ70KTJUu29f3DQ43uJ9HXzEA==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n    \"@babel/plugin-syntax-object-rest-spread\" \"^7.8.0\"\n    \"@babel/plugin-transform-parameters\" \"^7.10.4\"\n\n\"@babel/plugin-proposal-optional-catch-binding@^7.0.0\":\n  version \"7.12.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz#ccc2421af64d3aae50b558a71cede929a5ab2942\"\n  integrity sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n    \"@babel/plugin-syntax-optional-catch-binding\" \"^7.8.0\"\n\n\"@babel/plugin-proposal-optional-catch-binding@^7.10.4\":\n  version \"7.10.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz#31c938309d24a78a49d68fdabffaa863758554dd\"\n  integrity sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n    \"@babel/plugin-syntax-optional-catch-binding\" \"^7.8.0\"\n\n\"@babel/plugin-proposal-optional-chaining@^7.0.0\":\n  version \"7.12.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.1.tgz#cce122203fc8a32794296fc377c6dedaf4363797\"\n  integrity sha512-c2uRpY6WzaVDzynVY9liyykS+kVU+WRZPMPYpkelXH8KBt1oXoI89kPbZKKG/jDT5UK92FTW2fZkZaJhdiBabw==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n    \"@babel/helper-skip-transparent-expression-wrappers\" \"^7.12.1\"\n    \"@babel/plugin-syntax-optional-chaining\" \"^7.8.0\"\n\n\"@babel/plugin-proposal-optional-chaining@^7.11.0\":\n  version \"7.11.0\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.11.0.tgz#de5866d0646f6afdaab8a566382fe3a221755076\"\n  integrity sha512-v9fZIu3Y8562RRwhm1BbMRxtqZNFmFA2EG+pT2diuU8PT3H6T/KXoZ54KgYisfOFZHV6PfvAiBIZ9Rcz+/JCxA==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n    \"@babel/helper-skip-transparent-expression-wrappers\" \"^7.11.0\"\n    \"@babel/plugin-syntax-optional-chaining\" \"^7.8.0\"\n\n\"@babel/plugin-proposal-private-methods@^7.10.4\":\n  version \"7.10.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.4.tgz#b160d972b8fdba5c7d111a145fc8c421fc2a6909\"\n  integrity sha512-wh5GJleuI8k3emgTg5KkJK6kHNsGEr0uBTDBuQUBJwckk9xs1ez79ioheEVVxMLyPscB0LfkbVHslQqIzWV6Bw==\n  dependencies:\n    \"@babel/helper-create-class-features-plugin\" \"^7.10.4\"\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n\n\"@babel/plugin-proposal-unicode-property-regex@^7.10.4\", \"@babel/plugin-proposal-unicode-property-regex@^7.4.4\":\n  version \"7.10.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz#4483cda53041ce3413b7fe2f00022665ddfaa75d\"\n  integrity sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA==\n  dependencies:\n    \"@babel/helper-create-regexp-features-plugin\" \"^7.10.4\"\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n\n\"@babel/plugin-syntax-async-generators@^7.8.0\", \"@babel/plugin-syntax-async-generators@^7.8.4\":\n  version \"7.8.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d\"\n  integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.8.0\"\n\n\"@babel/plugin-syntax-bigint@^7.8.3\":\n  version \"7.8.3\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea\"\n  integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.8.0\"\n\n\"@babel/plugin-syntax-class-properties@^7.0.0\":\n  version \"7.12.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz#bcb297c5366e79bebadef509549cd93b04f19978\"\n  integrity sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n\n\"@babel/plugin-syntax-class-properties@^7.10.4\", \"@babel/plugin-syntax-class-properties@^7.8.3\":\n  version \"7.10.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz#6644e6a0baa55a61f9e3231f6c9eeb6ee46c124c\"\n  integrity sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n\n\"@babel/plugin-syntax-dynamic-import@^7.0.0\", \"@babel/plugin-syntax-dynamic-import@^7.8.0\":\n  version \"7.8.3\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3\"\n  integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.8.0\"\n\n\"@babel/plugin-syntax-export-default-from@^7.0.0\", \"@babel/plugin-syntax-export-default-from@^7.12.1\":\n  version \"7.12.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.12.1.tgz#a9eb31881f4f9a1115a3d2c6d64ac3f6016b5a9d\"\n  integrity sha512-dP5eGg6tHEkhnRD2/vRG/KJKRSg8gtxu2i+P/8/yFPJn/CfPU5G0/7Gks2i3M6IOVAPQekmsLN9LPsmXFFL4Uw==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n\n\"@babel/plugin-syntax-export-namespace-from@^7.8.3\":\n  version \"7.8.3\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a\"\n  integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.8.3\"\n\n\"@babel/plugin-syntax-flow@^7.0.0\", \"@babel/plugin-syntax-flow@^7.12.1\":\n  version \"7.12.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.12.1.tgz#a77670d9abe6d63e8acadf4c31bb1eb5a506bbdd\"\n  integrity sha512-1lBLLmtxrwpm4VKmtVFselI/P3pX+G63fAtUUt6b2Nzgao77KNDwyuRt90Mj2/9pKobtt68FdvjfqohZjg/FCA==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n\n\"@babel/plugin-syntax-import-meta@^7.8.3\":\n  version \"7.10.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51\"\n  integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n\n\"@babel/plugin-syntax-json-strings@^7.8.0\", \"@babel/plugin-syntax-json-strings@^7.8.3\":\n  version \"7.8.3\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a\"\n  integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.8.0\"\n\n\"@babel/plugin-syntax-jsx@7.12.1\", \"@babel/plugin-syntax-jsx@^7.0.0\", \"@babel/plugin-syntax-jsx@^7.12.1\":\n  version \"7.12.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz#9d9d357cc818aa7ae7935917c1257f67677a0926\"\n  integrity sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n\n\"@babel/plugin-syntax-logical-assignment-operators@^7.10.4\", \"@babel/plugin-syntax-logical-assignment-operators@^7.8.3\":\n  version \"7.10.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699\"\n  integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n\n\"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0\", \"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3\":\n  version \"7.8.3\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9\"\n  integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.8.0\"\n\n\"@babel/plugin-syntax-numeric-separator@^7.10.4\", \"@babel/plugin-syntax-numeric-separator@^7.8.3\":\n  version \"7.10.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97\"\n  integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n\n\"@babel/plugin-syntax-object-rest-spread@7.8.3\", \"@babel/plugin-syntax-object-rest-spread@^7.0.0\", \"@babel/plugin-syntax-object-rest-spread@^7.8.0\", \"@babel/plugin-syntax-object-rest-spread@^7.8.3\":\n  version \"7.8.3\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871\"\n  integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.8.0\"\n\n\"@babel/plugin-syntax-optional-catch-binding@^7.8.0\", \"@babel/plugin-syntax-optional-catch-binding@^7.8.3\":\n  version \"7.8.3\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1\"\n  integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.8.0\"\n\n\"@babel/plugin-syntax-optional-chaining@^7.8.0\", \"@babel/plugin-syntax-optional-chaining@^7.8.3\":\n  version \"7.8.3\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a\"\n  integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.8.0\"\n\n\"@babel/plugin-syntax-top-level-await@^7.10.4\":\n  version \"7.10.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.4.tgz#4bbeb8917b54fcf768364e0a81f560e33a3ef57d\"\n  integrity sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n\n\"@babel/plugin-syntax-typescript@^7.12.1\":\n  version \"7.12.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.1.tgz#460ba9d77077653803c3dd2e673f76d66b4029e5\"\n  integrity sha512-UZNEcCY+4Dp9yYRCAHrHDU+9ZXLYaY9MgBXSRLkB9WjYFRR6quJBumfVrEkUxrePPBwFcpWfNKXqVRQQtm7mMA==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n\n\"@babel/plugin-transform-arrow-functions@^7.0.0\":\n  version \"7.12.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz#8083ffc86ac8e777fbe24b5967c4b2521f3cb2b3\"\n  integrity sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n\n\"@babel/plugin-transform-arrow-functions@^7.10.4\":\n  version \"7.10.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz#e22960d77e697c74f41c501d44d73dbf8a6a64cd\"\n  integrity sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n\n\"@babel/plugin-transform-async-to-generator@^7.0.0\":\n  version \"7.12.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz#3849a49cc2a22e9743cbd6b52926d30337229af1\"\n  integrity sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A==\n  dependencies:\n    \"@babel/helper-module-imports\" \"^7.12.1\"\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n    \"@babel/helper-remap-async-to-generator\" \"^7.12.1\"\n\n\"@babel/plugin-transform-async-to-generator@^7.10.4\":\n  version \"7.10.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz#41a5017e49eb6f3cda9392a51eef29405b245a37\"\n  integrity sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ==\n  dependencies:\n    \"@babel/helper-module-imports\" \"^7.10.4\"\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n    \"@babel/helper-remap-async-to-generator\" \"^7.10.4\"\n\n\"@babel/plugin-transform-block-scoped-functions@^7.0.0\":\n  version \"7.12.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz#f2a1a365bde2b7112e0a6ded9067fdd7c07905d9\"\n  integrity sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n\n\"@babel/plugin-transform-block-scoped-functions@^7.10.4\":\n  version \"7.10.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz#1afa595744f75e43a91af73b0d998ecfe4ebc2e8\"\n  integrity sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n\n\"@babel/plugin-transform-block-scoping@^7.0.0\":\n  version \"7.12.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.1.tgz#f0ee727874b42a208a48a586b84c3d222c2bbef1\"\n  integrity sha512-zJyAC9sZdE60r1nVQHblcfCj29Dh2Y0DOvlMkcqSo0ckqjiCwNiUezUKw+RjOCwGfpLRwnAeQ2XlLpsnGkvv9w==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n\n\"@babel/plugin-transform-block-scoping@^7.10.4\":\n  version \"7.11.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.11.1.tgz#5b7efe98852bef8d652c0b28144cd93a9e4b5215\"\n  integrity sha512-00dYeDE0EVEHuuM+26+0w/SCL0BH2Qy7LwHuI4Hi4MH5gkC8/AqMN5uWFJIsoXZrAphiMm1iXzBw6L2T+eA0ew==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n\n\"@babel/plugin-transform-classes@^7.0.0\":\n  version \"7.12.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz#65e650fcaddd3d88ddce67c0f834a3d436a32db6\"\n  integrity sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog==\n  dependencies:\n    \"@babel/helper-annotate-as-pure\" \"^7.10.4\"\n    \"@babel/helper-define-map\" \"^7.10.4\"\n    \"@babel/helper-function-name\" \"^7.10.4\"\n    \"@babel/helper-optimise-call-expression\" \"^7.10.4\"\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n    \"@babel/helper-replace-supers\" \"^7.12.1\"\n    \"@babel/helper-split-export-declaration\" \"^7.10.4\"\n    globals \"^11.1.0\"\n\n\"@babel/plugin-transform-classes@^7.10.4\":\n  version \"7.10.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz#405136af2b3e218bc4a1926228bc917ab1a0adc7\"\n  integrity sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA==\n  dependencies:\n    \"@babel/helper-annotate-as-pure\" \"^7.10.4\"\n    \"@babel/helper-define-map\" \"^7.10.4\"\n    \"@babel/helper-function-name\" \"^7.10.4\"\n    \"@babel/helper-optimise-call-expression\" \"^7.10.4\"\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n    \"@babel/helper-replace-supers\" \"^7.10.4\"\n    \"@babel/helper-split-export-declaration\" \"^7.10.4\"\n    globals \"^11.1.0\"\n\n\"@babel/plugin-transform-computed-properties@^7.0.0\":\n  version \"7.12.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz#d68cf6c9b7f838a8a4144badbe97541ea0904852\"\n  integrity sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n\n\"@babel/plugin-transform-computed-properties@^7.10.4\":\n  version \"7.10.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz#9ded83a816e82ded28d52d4b4ecbdd810cdfc0eb\"\n  integrity sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n\n\"@babel/plugin-transform-destructuring@^7.0.0\":\n  version \"7.12.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz#b9a570fe0d0a8d460116413cb4f97e8e08b2f847\"\n  integrity sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n\n\"@babel/plugin-transform-destructuring@^7.10.4\":\n  version \"7.10.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz#70ddd2b3d1bea83d01509e9bb25ddb3a74fc85e5\"\n  integrity sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n\n\"@babel/plugin-transform-dotall-regex@^7.10.4\", \"@babel/plugin-transform-dotall-regex@^7.4.4\":\n  version \"7.10.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz#469c2062105c1eb6a040eaf4fac4b488078395ee\"\n  integrity sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA==\n  dependencies:\n    \"@babel/helper-create-regexp-features-plugin\" \"^7.10.4\"\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n\n\"@babel/plugin-transform-duplicate-keys@^7.10.4\":\n  version \"7.10.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz#697e50c9fee14380fe843d1f306b295617431e47\"\n  integrity sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n\n\"@babel/plugin-transform-exponentiation-operator@^7.0.0\":\n  version \"7.12.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz#b0f2ed356ba1be1428ecaf128ff8a24f02830ae0\"\n  integrity sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug==\n  dependencies:\n    \"@babel/helper-builder-binary-assignment-operator-visitor\" \"^7.10.4\"\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n\n\"@babel/plugin-transform-exponentiation-operator@^7.10.4\":\n  version \"7.10.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz#5ae338c57f8cf4001bdb35607ae66b92d665af2e\"\n  integrity sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw==\n  dependencies:\n    \"@babel/helper-builder-binary-assignment-operator-visitor\" \"^7.10.4\"\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n\n\"@babel/plugin-transform-flow-strip-types@^7.0.0\":\n  version \"7.12.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.12.1.tgz#8430decfa7eb2aea5414ed4a3fa6e1652b7d77c4\"\n  integrity sha512-8hAtkmsQb36yMmEtk2JZ9JnVyDSnDOdlB+0nEGzIDLuK4yR3JcEjfuFPYkdEPSh8Id+rAMeBEn+X0iVEyho6Hg==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n    \"@babel/plugin-syntax-flow\" \"^7.12.1\"\n\n\"@babel/plugin-transform-for-of@^7.0.0\":\n  version \"7.12.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz#07640f28867ed16f9511c99c888291f560921cfa\"\n  integrity sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n\n\"@babel/plugin-transform-for-of@^7.10.4\":\n  version \"7.10.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz#c08892e8819d3a5db29031b115af511dbbfebae9\"\n  integrity sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n\n\"@babel/plugin-transform-function-name@^7.0.0\":\n  version \"7.12.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz#2ec76258c70fe08c6d7da154003a480620eba667\"\n  integrity sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw==\n  dependencies:\n    \"@babel/helper-function-name\" \"^7.10.4\"\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n\n\"@babel/plugin-transform-function-name@^7.10.4\":\n  version \"7.10.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz#6a467880e0fc9638514ba369111811ddbe2644b7\"\n  integrity sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg==\n  dependencies:\n    \"@babel/helper-function-name\" \"^7.10.4\"\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n\n\"@babel/plugin-transform-literals@^7.0.0\":\n  version \"7.12.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz#d73b803a26b37017ddf9d3bb8f4dc58bfb806f57\"\n  integrity sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n\n\"@babel/plugin-transform-literals@^7.10.4\":\n  version \"7.10.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz#9f42ba0841100a135f22712d0e391c462f571f3c\"\n  integrity sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n\n\"@babel/plugin-transform-member-expression-literals@^7.0.0\":\n  version \"7.12.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz#496038602daf1514a64d43d8e17cbb2755e0c3ad\"\n  integrity sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n\n\"@babel/plugin-transform-member-expression-literals@^7.10.4\":\n  version \"7.10.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz#b1ec44fcf195afcb8db2c62cd8e551c881baf8b7\"\n  integrity sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n\n\"@babel/plugin-transform-modules-amd@^7.10.4\":\n  version \"7.10.5\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.5.tgz#1b9cddaf05d9e88b3aad339cb3e445c4f020a9b1\"\n  integrity sha512-elm5uruNio7CTLFItVC/rIzKLfQ17+fX7EVz5W0TMgIHFo1zY0Ozzx+lgwhL4plzl8OzVn6Qasx5DeEFyoNiRw==\n  dependencies:\n    \"@babel/helper-module-transforms\" \"^7.10.5\"\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n    babel-plugin-dynamic-import-node \"^2.3.3\"\n\n\"@babel/plugin-transform-modules-commonjs@^7.0.0\":\n  version \"7.12.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz#fa403124542636c786cf9b460a0ffbb48a86e648\"\n  integrity sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag==\n  dependencies:\n    \"@babel/helper-module-transforms\" \"^7.12.1\"\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n    \"@babel/helper-simple-access\" \"^7.12.1\"\n    babel-plugin-dynamic-import-node \"^2.3.3\"\n\n\"@babel/plugin-transform-modules-commonjs@^7.10.4\":\n  version \"7.10.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz#66667c3eeda1ebf7896d41f1f16b17105a2fbca0\"\n  integrity sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w==\n  dependencies:\n    \"@babel/helper-module-transforms\" \"^7.10.4\"\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n    \"@babel/helper-simple-access\" \"^7.10.4\"\n    babel-plugin-dynamic-import-node \"^2.3.3\"\n\n\"@babel/plugin-transform-modules-systemjs@^7.10.4\":\n  version \"7.10.5\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.5.tgz#6270099c854066681bae9e05f87e1b9cadbe8c85\"\n  integrity sha512-f4RLO/OL14/FP1AEbcsWMzpbUz6tssRaeQg11RH1BP/XnPpRoVwgeYViMFacnkaw4k4wjRSjn3ip1Uw9TaXuMw==\n  dependencies:\n    \"@babel/helper-hoist-variables\" \"^7.10.4\"\n    \"@babel/helper-module-transforms\" \"^7.10.5\"\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n    babel-plugin-dynamic-import-node \"^2.3.3\"\n\n\"@babel/plugin-transform-modules-umd@^7.10.4\":\n  version \"7.10.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz#9a8481fe81b824654b3a0b65da3df89f3d21839e\"\n  integrity sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA==\n  dependencies:\n    \"@babel/helper-module-transforms\" \"^7.10.4\"\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n\n\"@babel/plugin-transform-named-capturing-groups-regex@^7.10.4\":\n  version \"7.10.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz#78b4d978810b6f3bcf03f9e318f2fc0ed41aecb6\"\n  integrity sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA==\n  dependencies:\n    \"@babel/helper-create-regexp-features-plugin\" \"^7.10.4\"\n\n\"@babel/plugin-transform-new-target@^7.10.4\":\n  version \"7.10.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz#9097d753cb7b024cb7381a3b2e52e9513a9c6888\"\n  integrity sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n\n\"@babel/plugin-transform-object-assign@^7.0.0\":\n  version \"7.12.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.12.1.tgz#9102b06625f60a5443cc292d32b565373665e1e4\"\n  integrity sha512-geUHn4XwHznRAFiuROTy0Hr7bKbpijJCmr1Svt/VNGhpxmp0OrdxURNpWbOAf94nUbL+xj6gbxRVPHWIbRpRoA==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n\n\"@babel/plugin-transform-object-super@^7.0.0\":\n  version \"7.12.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz#4ea08696b8d2e65841d0c7706482b048bed1066e\"\n  integrity sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n    \"@babel/helper-replace-supers\" \"^7.12.1\"\n\n\"@babel/plugin-transform-object-super@^7.10.4\":\n  version \"7.10.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz#d7146c4d139433e7a6526f888c667e314a093894\"\n  integrity sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n    \"@babel/helper-replace-supers\" \"^7.10.4\"\n\n\"@babel/plugin-transform-parameters@^7.0.0\", \"@babel/plugin-transform-parameters@^7.10.4\", \"@babel/plugin-transform-parameters@^7.12.1\":\n  version \"7.12.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz#d2e963b038771650c922eff593799c96d853255d\"\n  integrity sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n\n\"@babel/plugin-transform-property-literals@^7.0.0\":\n  version \"7.12.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz#41bc81200d730abb4456ab8b3fbd5537b59adecd\"\n  integrity sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n\n\"@babel/plugin-transform-property-literals@^7.10.4\":\n  version \"7.10.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz#f6fe54b6590352298785b83edd815d214c42e3c0\"\n  integrity sha512-ofsAcKiUxQ8TY4sScgsGeR2vJIsfrzqvFb9GvJ5UdXDzl+MyYCaBj/FGzXuv7qE0aJcjWMILny1epqelnFlz8g==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n\n\"@babel/plugin-transform-react-display-name@^7.0.0\":\n  version \"7.12.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.1.tgz#1cbcd0c3b1d6648c55374a22fc9b6b7e5341c00d\"\n  integrity sha512-cAzB+UzBIrekfYxyLlFqf/OagTvHLcVBb5vpouzkYkBclRPraiygVnafvAoipErZLI8ANv8Ecn6E/m5qPXD26w==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n\n\"@babel/plugin-transform-react-jsx-source@^7.0.0\":\n  version \"7.12.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.12.1.tgz#d07de6863f468da0809edcf79a1aa8ce2a82a26b\"\n  integrity sha512-keQ5kBfjJNRc6zZN1/nVHCd6LLIHq4aUKcVnvE/2l+ZZROSbqoiGFRtT5t3Is89XJxBQaP7NLZX2jgGHdZvvFQ==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n\n\"@babel/plugin-transform-react-jsx@^7.0.0\":\n  version \"7.12.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.12.1.tgz#c2d96c77c2b0e4362cc4e77a43ce7c2539d478cb\"\n  integrity sha512-RmKejwnT0T0QzQUzcbP5p1VWlpnP8QHtdhEtLG55ZDQnJNalbF3eeDyu3dnGKvGzFIQiBzFhBYTwvv435p9Xpw==\n  dependencies:\n    \"@babel/helper-builder-react-jsx\" \"^7.10.4\"\n    \"@babel/helper-builder-react-jsx-experimental\" \"^7.12.1\"\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n    \"@babel/plugin-syntax-jsx\" \"^7.12.1\"\n\n\"@babel/plugin-transform-regenerator@^7.0.0\":\n  version \"7.12.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz#5f0a28d842f6462281f06a964e88ba8d7ab49753\"\n  integrity sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng==\n  dependencies:\n    regenerator-transform \"^0.14.2\"\n\n\"@babel/plugin-transform-regenerator@^7.10.4\":\n  version \"7.10.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz#2015e59d839074e76838de2159db421966fd8b63\"\n  integrity sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw==\n  dependencies:\n    regenerator-transform \"^0.14.2\"\n\n\"@babel/plugin-transform-reserved-words@^7.10.4\":\n  version \"7.10.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz#8f2682bcdcef9ed327e1b0861585d7013f8a54dd\"\n  integrity sha512-hGsw1O6Rew1fkFbDImZIEqA8GoidwTAilwCyWqLBM9f+e/u/sQMQu7uX6dyokfOayRuuVfKOW4O7HvaBWM+JlQ==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n\n\"@babel/plugin-transform-runtime@^7.0.0\":\n  version \"7.12.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.1.tgz#04b792057eb460389ff6a4198e377614ea1e7ba5\"\n  integrity sha512-Ac/H6G9FEIkS2tXsZjL4RAdS3L3WHxci0usAnz7laPWUmFiGtj7tIASChqKZMHTSQTQY6xDbOq+V1/vIq3QrWg==\n  dependencies:\n    \"@babel/helper-module-imports\" \"^7.12.1\"\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n    resolve \"^1.8.1\"\n    semver \"^5.5.1\"\n\n\"@babel/plugin-transform-shorthand-properties@^7.0.0\":\n  version \"7.12.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz#0bf9cac5550fce0cfdf043420f661d645fdc75e3\"\n  integrity sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n\n\"@babel/plugin-transform-shorthand-properties@^7.10.4\":\n  version \"7.10.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz#9fd25ec5cdd555bb7f473e5e6ee1c971eede4dd6\"\n  integrity sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n\n\"@babel/plugin-transform-spread@^7.0.0\":\n  version \"7.12.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz#527f9f311be4ec7fdc2b79bb89f7bf884b3e1e1e\"\n  integrity sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n    \"@babel/helper-skip-transparent-expression-wrappers\" \"^7.12.1\"\n\n\"@babel/plugin-transform-spread@^7.11.0\":\n  version \"7.11.0\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.11.0.tgz#fa84d300f5e4f57752fe41a6d1b3c554f13f17cc\"\n  integrity sha512-UwQYGOqIdQJe4aWNyS7noqAnN2VbaczPLiEtln+zPowRNlD+79w3oi2TWfYe0eZgd+gjZCbsydN7lzWysDt+gw==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n    \"@babel/helper-skip-transparent-expression-wrappers\" \"^7.11.0\"\n\n\"@babel/plugin-transform-sticky-regex@^7.0.0\":\n  version \"7.12.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.1.tgz#5c24cf50de396d30e99afc8d1c700e8bce0f5caf\"\n  integrity sha512-CiUgKQ3AGVk7kveIaPEET1jNDhZZEl1RPMWdTBE1799bdz++SwqDHStmxfCtDfBhQgCl38YRiSnrMuUMZIWSUQ==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n    \"@babel/helper-regex\" \"^7.10.4\"\n\n\"@babel/plugin-transform-sticky-regex@^7.10.4\":\n  version \"7.10.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz#8f3889ee8657581130a29d9cc91d7c73b7c4a28d\"\n  integrity sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n    \"@babel/helper-regex\" \"^7.10.4\"\n\n\"@babel/plugin-transform-template-literals@^7.0.0\":\n  version \"7.12.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz#b43ece6ed9a79c0c71119f576d299ef09d942843\"\n  integrity sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n\n\"@babel/plugin-transform-template-literals@^7.10.4\":\n  version \"7.10.5\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.5.tgz#78bc5d626a6642db3312d9d0f001f5e7639fde8c\"\n  integrity sha512-V/lnPGIb+KT12OQikDvgSuesRX14ck5FfJXt6+tXhdkJ+Vsd0lDCVtF6jcB4rNClYFzaB2jusZ+lNISDk2mMMw==\n  dependencies:\n    \"@babel/helper-annotate-as-pure\" \"^7.10.4\"\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n\n\"@babel/plugin-transform-typeof-symbol@^7.10.4\":\n  version \"7.10.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz#9509f1a7eec31c4edbffe137c16cc33ff0bc5bfc\"\n  integrity sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n\n\"@babel/plugin-transform-typescript@^7.0.0\":\n  version \"7.12.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.12.1.tgz#d92cc0af504d510e26a754a7dbc2e5c8cd9c7ab4\"\n  integrity sha512-VrsBByqAIntM+EYMqSm59SiMEf7qkmI9dqMt6RbD/wlwueWmYcI0FFK5Fj47pP6DRZm+3teXjosKlwcZJ5lIMw==\n  dependencies:\n    \"@babel/helper-create-class-features-plugin\" \"^7.12.1\"\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n    \"@babel/plugin-syntax-typescript\" \"^7.12.1\"\n\n\"@babel/plugin-transform-unicode-escapes@^7.10.4\":\n  version \"7.10.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.4.tgz#feae523391c7651ddac115dae0a9d06857892007\"\n  integrity sha512-y5XJ9waMti2J+e7ij20e+aH+fho7Wb7W8rNuu72aKRwCHFqQdhkdU2lo3uZ9tQuboEJcUFayXdARhcxLQ3+6Fg==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n\n\"@babel/plugin-transform-unicode-regex@^7.0.0\":\n  version \"7.12.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz#cc9661f61390db5c65e3febaccefd5c6ac3faecb\"\n  integrity sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg==\n  dependencies:\n    \"@babel/helper-create-regexp-features-plugin\" \"^7.12.1\"\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n\n\"@babel/plugin-transform-unicode-regex@^7.10.4\":\n  version \"7.10.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz#e56d71f9282fac6db09c82742055576d5e6d80a8\"\n  integrity sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A==\n  dependencies:\n    \"@babel/helper-create-regexp-features-plugin\" \"^7.10.4\"\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n\n\"@babel/preset-env@^7.11.0\":\n  version \"7.11.5\"\n  resolved \"https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.11.5.tgz#18cb4b9379e3e92ffea92c07471a99a2914e4272\"\n  integrity sha512-kXqmW1jVcnB2cdueV+fyBM8estd5mlNfaQi6lwLgRwCby4edpavgbFhiBNjmWA3JpB/yZGSISa7Srf+TwxDQoA==\n  dependencies:\n    \"@babel/compat-data\" \"^7.11.0\"\n    \"@babel/helper-compilation-targets\" \"^7.10.4\"\n    \"@babel/helper-module-imports\" \"^7.10.4\"\n    \"@babel/helper-plugin-utils\" \"^7.10.4\"\n    \"@babel/plugin-proposal-async-generator-functions\" \"^7.10.4\"\n    \"@babel/plugin-proposal-class-properties\" \"^7.10.4\"\n    \"@babel/plugin-proposal-dynamic-import\" \"^7.10.4\"\n    \"@babel/plugin-proposal-export-namespace-from\" \"^7.10.4\"\n    \"@babel/plugin-proposal-json-strings\" \"^7.10.4\"\n    \"@babel/plugin-proposal-logical-assignment-operators\" \"^7.11.0\"\n    \"@babel/plugin-proposal-nullish-coalescing-operator\" \"^7.10.4\"\n    \"@babel/plugin-proposal-numeric-separator\" \"^7.10.4\"\n    \"@babel/plugin-proposal-object-rest-spread\" \"^7.11.0\"\n    \"@babel/plugin-proposal-optional-catch-binding\" \"^7.10.4\"\n    \"@babel/plugin-proposal-optional-chaining\" \"^7.11.0\"\n    \"@babel/plugin-proposal-private-methods\" \"^7.10.4\"\n    \"@babel/plugin-proposal-unicode-property-regex\" \"^7.10.4\"\n    \"@babel/plugin-syntax-async-generators\" \"^7.8.0\"\n    \"@babel/plugin-syntax-class-properties\" \"^7.10.4\"\n    \"@babel/plugin-syntax-dynamic-import\" \"^7.8.0\"\n    \"@babel/plugin-syntax-export-namespace-from\" \"^7.8.3\"\n    \"@babel/plugin-syntax-json-strings\" \"^7.8.0\"\n    \"@babel/plugin-syntax-logical-assignment-operators\" \"^7.10.4\"\n    \"@babel/plugin-syntax-nullish-coalescing-operator\" \"^7.8.0\"\n    \"@babel/plugin-syntax-numeric-separator\" \"^7.10.4\"\n    \"@babel/plugin-syntax-object-rest-spread\" \"^7.8.0\"\n    \"@babel/plugin-syntax-optional-catch-binding\" \"^7.8.0\"\n    \"@babel/plugin-syntax-optional-chaining\" \"^7.8.0\"\n    \"@babel/plugin-syntax-top-level-await\" \"^7.10.4\"\n    \"@babel/plugin-transform-arrow-functions\" \"^7.10.4\"\n    \"@babel/plugin-transform-async-to-generator\" \"^7.10.4\"\n    \"@babel/plugin-transform-block-scoped-functions\" \"^7.10.4\"\n    \"@babel/plugin-transform-block-scoping\" \"^7.10.4\"\n    \"@babel/plugin-transform-classes\" \"^7.10.4\"\n    \"@babel/plugin-transform-computed-properties\" \"^7.10.4\"\n    \"@babel/plugin-transform-destructuring\" \"^7.10.4\"\n    \"@babel/plugin-transform-dotall-regex\" \"^7.10.4\"\n    \"@babel/plugin-transform-duplicate-keys\" \"^7.10.4\"\n    \"@babel/plugin-transform-exponentiation-operator\" \"^7.10.4\"\n    \"@babel/plugin-transform-for-of\" \"^7.10.4\"\n    \"@babel/plugin-transform-function-name\" \"^7.10.4\"\n    \"@babel/plugin-transform-literals\" \"^7.10.4\"\n    \"@babel/plugin-transform-member-expression-literals\" \"^7.10.4\"\n    \"@babel/plugin-transform-modules-amd\" \"^7.10.4\"\n    \"@babel/plugin-transform-modules-commonjs\" \"^7.10.4\"\n    \"@babel/plugin-transform-modules-systemjs\" \"^7.10.4\"\n    \"@babel/plugin-transform-modules-umd\" \"^7.10.4\"\n    \"@babel/plugin-transform-named-capturing-groups-regex\" \"^7.10.4\"\n    \"@babel/plugin-transform-new-target\" \"^7.10.4\"\n    \"@babel/plugin-transform-object-super\" \"^7.10.4\"\n    \"@babel/plugin-transform-parameters\" \"^7.10.4\"\n    \"@babel/plugin-transform-property-literals\" \"^7.10.4\"\n    \"@babel/plugin-transform-regenerator\" \"^7.10.4\"\n    \"@babel/plugin-transform-reserved-words\" \"^7.10.4\"\n    \"@babel/plugin-transform-shorthand-properties\" \"^7.10.4\"\n    \"@babel/plugin-transform-spread\" \"^7.11.0\"\n    \"@babel/plugin-transform-sticky-regex\" \"^7.10.4\"\n    \"@babel/plugin-transform-template-literals\" \"^7.10.4\"\n    \"@babel/plugin-transform-typeof-symbol\" \"^7.10.4\"\n    \"@babel/plugin-transform-unicode-escapes\" \"^7.10.4\"\n    \"@babel/plugin-transform-unicode-regex\" \"^7.10.4\"\n    \"@babel/preset-modules\" \"^0.1.3\"\n    \"@babel/types\" \"^7.11.5\"\n    browserslist \"^4.12.0\"\n    core-js-compat \"^3.6.2\"\n    invariant \"^2.2.2\"\n    levenary \"^1.1.1\"\n    semver \"^5.5.0\"\n\n\"@babel/preset-modules@^0.1.3\":\n  version \"0.1.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e\"\n  integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.0.0\"\n    \"@babel/plugin-proposal-unicode-property-regex\" \"^7.4.4\"\n    \"@babel/plugin-transform-dotall-regex\" \"^7.4.4\"\n    \"@babel/types\" \"^7.4.4\"\n    esutils \"^2.0.2\"\n\n\"@babel/register@^7.0.0\":\n  version \"7.12.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/register/-/register-7.12.1.tgz#cdb087bdfc4f7241c03231f22e15d211acf21438\"\n  integrity sha512-XWcmseMIncOjoydKZnWvWi0/5CUCD+ZYKhRwgYlWOrA8fGZ/FjuLRpqtIhLOVD/fvR1b9DQHtZPn68VvhpYf+Q==\n  dependencies:\n    find-cache-dir \"^2.0.0\"\n    lodash \"^4.17.19\"\n    make-dir \"^2.1.0\"\n    pirates \"^4.0.0\"\n    source-map-support \"^0.5.16\"\n\n\"@babel/runtime-corejs3@^7.7.4\":\n  version \"7.7.6\"\n  resolved \"https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.7.6.tgz#5b1044ea11b659d288f77190e19c62da959ed9a3\"\n  integrity sha512-NrRUehqG0sMSCaP+0XV/vOvvjNl4BQOWq3Qys1Q2KTEm5tGMo9h0dHnIzeKerj0a7SIB8LP5kYg/T1raE3FoKQ==\n  dependencies:\n    core-js-pure \"^3.0.0\"\n    regenerator-runtime \"^0.13.2\"\n\n\"@babel/runtime@^7.0.0\", \"@babel/runtime@^7.8.4\":\n  version \"7.12.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.1.tgz#b4116a6b6711d010b2dad3b7b6e43bf1b9954740\"\n  integrity sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==\n  dependencies:\n    regenerator-runtime \"^0.13.4\"\n\n\"@babel/runtime@^7.12.5\", \"@babel/runtime@^7.20.7\", \"@babel/runtime@^7.21.0\":\n  version \"7.22.3\"\n  resolved \"https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.3.tgz#0a7fce51d43adbf0f7b517a71f4c3aaca92ebcbb\"\n  integrity sha512-XsDuspWKLUsxwCp6r7EhsExHtYfbe5oAGQ19kqngTdCPUoPQzOPdUbD/pB9PJiwb2ptYKQDjSJT3R6dC+EPqfQ==\n  dependencies:\n    regenerator-runtime \"^0.13.11\"\n\n\"@babel/runtime@^7.15.4\":\n  version \"7.22.5\"\n  resolved \"https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.5.tgz#8564dd588182ce0047d55d7a75e93921107b57ec\"\n  integrity sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==\n  dependencies:\n    regenerator-runtime \"^0.13.11\"\n\n\"@babel/runtime@^7.4.5\", \"@babel/runtime@^7.6.3\", \"@babel/runtime@^7.7.2\", \"@babel/runtime@^7.7.4\":\n  version \"7.7.6\"\n  resolved \"https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.7.6.tgz#d18c511121aff1b4f2cd1d452f1bac9601dd830f\"\n  integrity sha512-BWAJxpNVa0QlE5gZdWjSxXtemZyZ9RmrmVozxt3NUXeZhVIJ5ANyqmMc0JDrivBZyxUuQvFxlvH4OWWOogGfUw==\n  dependencies:\n    regenerator-runtime \"^0.13.2\"\n\n\"@babel/runtime@^7.5.5\":\n  version \"7.11.2\"\n  resolved \"https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.11.2.tgz#f549c13c754cc40b87644b9fa9f09a6a95fe0736\"\n  integrity sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw==\n  dependencies:\n    regenerator-runtime \"^0.13.4\"\n\n\"@babel/template@^7.0.0\", \"@babel/template@^7.10.4\", \"@babel/template@^7.3.3\", \"@babel/template@^7.7.4\":\n  version \"7.10.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278\"\n  integrity sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==\n  dependencies:\n    \"@babel/code-frame\" \"^7.10.4\"\n    \"@babel/parser\" \"^7.10.4\"\n    \"@babel/types\" \"^7.10.4\"\n\n\"@babel/template@^7.12.7\", \"@babel/template@^7.20.7\", \"@babel/template@^7.21.9\":\n  version \"7.21.9\"\n  resolved \"https://registry.yarnpkg.com/@babel/template/-/template-7.21.9.tgz#bf8dad2859130ae46088a99c1f265394877446fb\"\n  integrity sha512-MK0X5k8NKOuWRamiEfc3KEJiHMTkGZNUjzMipqCGDDc6ijRl/B7RGSKVGncu4Ro/HdyzzY6cmoXuKI2Gffk7vQ==\n  dependencies:\n    \"@babel/code-frame\" \"^7.21.4\"\n    \"@babel/parser\" \"^7.21.9\"\n    \"@babel/types\" \"^7.21.5\"\n\n\"@babel/traverse@^7.0.0\", \"@babel/traverse@^7.10.4\", \"@babel/traverse@^7.11.5\", \"@babel/traverse@^7.12.1\":\n  version \"7.12.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.1.tgz#941395e0c5cc86d5d3e75caa095d3924526f0c1e\"\n  integrity sha512-MA3WPoRt1ZHo2ZmoGKNqi20YnPt0B1S0GTZEPhhd+hw2KGUzBlHuVunj6K4sNuK+reEvyiPwtp0cpaqLzJDmAw==\n  dependencies:\n    \"@babel/code-frame\" \"^7.10.4\"\n    \"@babel/generator\" \"^7.12.1\"\n    \"@babel/helper-function-name\" \"^7.10.4\"\n    \"@babel/helper-split-export-declaration\" \"^7.11.0\"\n    \"@babel/parser\" \"^7.12.1\"\n    \"@babel/types\" \"^7.12.1\"\n    debug \"^4.1.0\"\n    globals \"^11.1.0\"\n    lodash \"^4.17.19\"\n\n\"@babel/traverse@^7.1.0\", \"@babel/traverse@^7.7.4\":\n  version \"7.7.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.7.4.tgz#9c1e7c60fb679fe4fcfaa42500833333c2058558\"\n  integrity sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw==\n  dependencies:\n    \"@babel/code-frame\" \"^7.5.5\"\n    \"@babel/generator\" \"^7.7.4\"\n    \"@babel/helper-function-name\" \"^7.7.4\"\n    \"@babel/helper-split-export-declaration\" \"^7.7.4\"\n    \"@babel/parser\" \"^7.7.4\"\n    \"@babel/types\" \"^7.7.4\"\n    debug \"^4.1.0\"\n    globals \"^11.1.0\"\n    lodash \"^4.17.13\"\n\n\"@babel/traverse@^7.12.9\", \"@babel/traverse@^7.22.1\":\n  version \"7.22.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.1.tgz#bd22c50b1439cfcfc2fa137b7fdf6c06787456e9\"\n  integrity sha512-lAWkdCoUFnmwLBhIRLciFntGYsIIoC6vIbN8zrLPqBnJmPu7Z6nzqnKd7FsxQUNAvZfVZ0x6KdNvNp8zWIOHSQ==\n  dependencies:\n    \"@babel/code-frame\" \"^7.21.4\"\n    \"@babel/generator\" \"^7.22.0\"\n    \"@babel/helper-environment-visitor\" \"^7.22.1\"\n    \"@babel/helper-function-name\" \"^7.21.0\"\n    \"@babel/helper-hoist-variables\" \"^7.18.6\"\n    \"@babel/helper-split-export-declaration\" \"^7.18.6\"\n    \"@babel/parser\" \"^7.22.0\"\n    \"@babel/types\" \"^7.22.0\"\n    debug \"^4.1.0\"\n    globals \"^11.1.0\"\n\n\"@babel/types@^7.0.0\", \"@babel/types@^7.10.4\", \"@babel/types@^7.10.5\", \"@babel/types@^7.11.0\", \"@babel/types@^7.11.5\", \"@babel/types@^7.12.1\", \"@babel/types@^7.7.4\":\n  version \"7.12.1\"\n  resolved \"https://registry.yarnpkg.com/@babel/types/-/types-7.12.1.tgz#e109d9ab99a8de735be287ee3d6a9947a190c4ae\"\n  integrity sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==\n  dependencies:\n    \"@babel/helper-validator-identifier\" \"^7.10.4\"\n    lodash \"^4.17.19\"\n    to-fast-properties \"^2.0.0\"\n\n\"@babel/types@^7.12.7\", \"@babel/types@^7.18.6\", \"@babel/types@^7.21.0\", \"@babel/types@^7.21.5\", \"@babel/types@^7.22.0\", \"@babel/types@^7.22.3\":\n  version \"7.22.3\"\n  resolved \"https://registry.yarnpkg.com/@babel/types/-/types-7.22.3.tgz#0cc6af178b91490acaeb4a2f70dcbf27cdf3d8f3\"\n  integrity sha512-P3na3xIQHTKY4L0YOG7pM8M8uoUIB910WQaSiiMCZUC2Cy8XFEQONGABFnHWBa2gpGKODTAJcNhi5Zk0sLRrzg==\n  dependencies:\n    \"@babel/helper-string-parser\" \"^7.21.5\"\n    \"@babel/helper-validator-identifier\" \"^7.19.1\"\n    to-fast-properties \"^2.0.0\"\n\n\"@babel/types@^7.3.0\":\n  version \"7.7.4\"\n  resolved \"https://registry.yarnpkg.com/@babel/types/-/types-7.7.4.tgz#516570d539e44ddf308c07569c258ff94fde9193\"\n  integrity sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==\n  dependencies:\n    esutils \"^2.0.2\"\n    lodash \"^4.17.13\"\n    to-fast-properties \"^2.0.0\"\n\n\"@babel/types@^7.3.3\", \"@babel/types@^7.4.4\":\n  version \"7.11.5\"\n  resolved \"https://registry.yarnpkg.com/@babel/types/-/types-7.11.5.tgz#d9de577d01252d77c6800cee039ee64faf75662d\"\n  integrity sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q==\n  dependencies:\n    \"@babel/helper-validator-identifier\" \"^7.10.4\"\n    lodash \"^4.17.19\"\n    to-fast-properties \"^2.0.0\"\n\n\"@bcoe/v8-coverage@^0.2.3\":\n  version \"0.2.3\"\n  resolved \"https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39\"\n  integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==\n\n\"@changesets/apply-release-plan@^7.0.13\":\n  version \"7.0.13\"\n  resolved \"https://registry.yarnpkg.com/@changesets/apply-release-plan/-/apply-release-plan-7.0.13.tgz#5c3813927002788d4e2ede1428faf85afa944c61\"\n  integrity sha512-BIW7bofD2yAWoE8H4V40FikC+1nNFEKBisMECccS16W1rt6qqhNTBDmIw5HaqmMgtLNz9e7oiALiEUuKrQ4oHg==\n  dependencies:\n    \"@changesets/config\" \"^3.1.1\"\n    \"@changesets/get-version-range-type\" \"^0.4.0\"\n    \"@changesets/git\" \"^3.0.4\"\n    \"@changesets/should-skip-package\" \"^0.1.2\"\n    \"@changesets/types\" \"^6.1.0\"\n    \"@manypkg/get-packages\" \"^1.1.3\"\n    detect-indent \"^6.0.0\"\n    fs-extra \"^7.0.1\"\n    lodash.startcase \"^4.4.0\"\n    outdent \"^0.5.0\"\n    prettier \"^2.7.1\"\n    resolve-from \"^5.0.0\"\n    semver \"^7.5.3\"\n\n\"@changesets/assemble-release-plan@^6.0.9\":\n  version \"6.0.9\"\n  resolved \"https://registry.yarnpkg.com/@changesets/assemble-release-plan/-/assemble-release-plan-6.0.9.tgz#8aa5baf0037a85812e320172e83b92ca31e85fd6\"\n  integrity sha512-tPgeeqCHIwNo8sypKlS3gOPmsS3wP0zHt67JDuL20P4QcXiw/O4Hl7oXiuLnP9yg+rXLQ2sScdV1Kkzde61iSQ==\n  dependencies:\n    \"@changesets/errors\" \"^0.2.0\"\n    \"@changesets/get-dependents-graph\" \"^2.1.3\"\n    \"@changesets/should-skip-package\" \"^0.1.2\"\n    \"@changesets/types\" \"^6.1.0\"\n    \"@manypkg/get-packages\" \"^1.1.3\"\n    semver \"^7.5.3\"\n\n\"@changesets/changelog-git@^0.2.1\":\n  version \"0.2.1\"\n  resolved \"https://registry.yarnpkg.com/@changesets/changelog-git/-/changelog-git-0.2.1.tgz#7f311f3dc11eae1235aa7fd2c1807112962b409b\"\n  integrity sha512-x/xEleCFLH28c3bQeQIyeZf8lFXyDFVn1SgcBiR2Tw/r4IAWlk1fzxCEZ6NxQAjF2Nwtczoen3OA2qR+UawQ8Q==\n  dependencies:\n    \"@changesets/types\" \"^6.1.0\"\n\n\"@changesets/changelog-github@^0.5.1\":\n  version \"0.5.1\"\n  resolved \"https://registry.yarnpkg.com/@changesets/changelog-github/-/changelog-github-0.5.1.tgz#58870f77cdfd6d59c73cc046a61e55e82d606d24\"\n  integrity sha512-BVuHtF+hrhUScSoHnJwTELB4/INQxVFc+P/Qdt20BLiBFIHFJDDUaGsZw+8fQeJTRP5hJZrzpt3oZWh0G19rAQ==\n  dependencies:\n    \"@changesets/get-github-info\" \"^0.6.0\"\n    \"@changesets/types\" \"^6.1.0\"\n    dotenv \"^8.1.0\"\n\n\"@changesets/cli@^2.29.7\":\n  version \"2.29.7\"\n  resolved \"https://registry.yarnpkg.com/@changesets/cli/-/cli-2.29.7.tgz#3e023eb3ec495211610404b835c23bfdaee93594\"\n  integrity sha512-R7RqWoaksyyKXbKXBTbT4REdy22yH81mcFK6sWtqSanxUCbUi9Uf+6aqxZtDQouIqPdem2W56CdxXgsxdq7FLQ==\n  dependencies:\n    \"@changesets/apply-release-plan\" \"^7.0.13\"\n    \"@changesets/assemble-release-plan\" \"^6.0.9\"\n    \"@changesets/changelog-git\" \"^0.2.1\"\n    \"@changesets/config\" \"^3.1.1\"\n    \"@changesets/errors\" \"^0.2.0\"\n    \"@changesets/get-dependents-graph\" \"^2.1.3\"\n    \"@changesets/get-release-plan\" \"^4.0.13\"\n    \"@changesets/git\" \"^3.0.4\"\n    \"@changesets/logger\" \"^0.1.1\"\n    \"@changesets/pre\" \"^2.0.2\"\n    \"@changesets/read\" \"^0.6.5\"\n    \"@changesets/should-skip-package\" \"^0.1.2\"\n    \"@changesets/types\" \"^6.1.0\"\n    \"@changesets/write\" \"^0.4.0\"\n    \"@inquirer/external-editor\" \"^1.0.0\"\n    \"@manypkg/get-packages\" \"^1.1.3\"\n    ansi-colors \"^4.1.3\"\n    ci-info \"^3.7.0\"\n    enquirer \"^2.4.1\"\n    fs-extra \"^7.0.1\"\n    mri \"^1.2.0\"\n    p-limit \"^2.2.0\"\n    package-manager-detector \"^0.2.0\"\n    picocolors \"^1.1.0\"\n    resolve-from \"^5.0.0\"\n    semver \"^7.5.3\"\n    spawndamnit \"^3.0.1\"\n    term-size \"^2.1.0\"\n\n\"@changesets/config@^3.1.1\":\n  version \"3.1.1\"\n  resolved \"https://registry.yarnpkg.com/@changesets/config/-/config-3.1.1.tgz#3e5b1f74236a4552c5f4eddf2bd05a43a0b71160\"\n  integrity sha512-bd+3Ap2TKXxljCggI0mKPfzCQKeV/TU4yO2h2C6vAihIo8tzseAn2e7klSuiyYYXvgu53zMN1OeYMIQkaQoWnA==\n  dependencies:\n    \"@changesets/errors\" \"^0.2.0\"\n    \"@changesets/get-dependents-graph\" \"^2.1.3\"\n    \"@changesets/logger\" \"^0.1.1\"\n    \"@changesets/types\" \"^6.1.0\"\n    \"@manypkg/get-packages\" \"^1.1.3\"\n    fs-extra \"^7.0.1\"\n    micromatch \"^4.0.8\"\n\n\"@changesets/errors@^0.2.0\":\n  version \"0.2.0\"\n  resolved \"https://registry.yarnpkg.com/@changesets/errors/-/errors-0.2.0.tgz#3c545e802b0f053389cadcf0ed54e5636ff9026a\"\n  integrity sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==\n  dependencies:\n    extendable-error \"^0.1.5\"\n\n\"@changesets/get-dependents-graph@^2.1.3\":\n  version \"2.1.3\"\n  resolved \"https://registry.yarnpkg.com/@changesets/get-dependents-graph/-/get-dependents-graph-2.1.3.tgz#cd31b39daab7102921fb65acdcb51b4658502eee\"\n  integrity sha512-gphr+v0mv2I3Oxt19VdWRRUxq3sseyUpX9DaHpTUmLj92Y10AGy+XOtV+kbM6L/fDcpx7/ISDFK6T8A/P3lOdQ==\n  dependencies:\n    \"@changesets/types\" \"^6.1.0\"\n    \"@manypkg/get-packages\" \"^1.1.3\"\n    picocolors \"^1.1.0\"\n    semver \"^7.5.3\"\n\n\"@changesets/get-github-info@^0.6.0\":\n  version \"0.6.0\"\n  resolved \"https://registry.yarnpkg.com/@changesets/get-github-info/-/get-github-info-0.6.0.tgz#faba66a20a3a5a0cbabea28efd43c9ede7429f11\"\n  integrity sha512-v/TSnFVXI8vzX9/w3DU2Ol+UlTZcu3m0kXTjTT4KlAdwSvwutcByYwyYn9hwerPWfPkT2JfpoX0KgvCEi8Q/SA==\n  dependencies:\n    dataloader \"^1.4.0\"\n    node-fetch \"^2.5.0\"\n\n\"@changesets/get-release-plan@^4.0.13\":\n  version \"4.0.13\"\n  resolved \"https://registry.yarnpkg.com/@changesets/get-release-plan/-/get-release-plan-4.0.13.tgz#02e2d9b89a3911bfc4bf1dafe237098b4b7454e9\"\n  integrity sha512-DWG1pus72FcNeXkM12tx+xtExyH/c9I1z+2aXlObH3i9YA7+WZEVaiHzHl03thpvAgWTRaH64MpfHxozfF7Dvg==\n  dependencies:\n    \"@changesets/assemble-release-plan\" \"^6.0.9\"\n    \"@changesets/config\" \"^3.1.1\"\n    \"@changesets/pre\" \"^2.0.2\"\n    \"@changesets/read\" \"^0.6.5\"\n    \"@changesets/types\" \"^6.1.0\"\n    \"@manypkg/get-packages\" \"^1.1.3\"\n\n\"@changesets/get-version-range-type@^0.4.0\":\n  version \"0.4.0\"\n  resolved \"https://registry.yarnpkg.com/@changesets/get-version-range-type/-/get-version-range-type-0.4.0.tgz#429a90410eefef4368502c41c63413e291740bf5\"\n  integrity sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==\n\n\"@changesets/git@^3.0.4\":\n  version \"3.0.4\"\n  resolved \"https://registry.yarnpkg.com/@changesets/git/-/git-3.0.4.tgz#75e3811ab407ec010beb51131ceb5c6b3975c914\"\n  integrity sha512-BXANzRFkX+XcC1q/d27NKvlJ1yf7PSAgi8JG6dt8EfbHFHi4neau7mufcSca5zRhwOL8j9s6EqsxmT+s+/E6Sw==\n  dependencies:\n    \"@changesets/errors\" \"^0.2.0\"\n    \"@manypkg/get-packages\" \"^1.1.3\"\n    is-subdir \"^1.1.1\"\n    micromatch \"^4.0.8\"\n    spawndamnit \"^3.0.1\"\n\n\"@changesets/logger@^0.1.1\":\n  version \"0.1.1\"\n  resolved \"https://registry.yarnpkg.com/@changesets/logger/-/logger-0.1.1.tgz#9926ac4dc8fb00472fe1711603b6b4755d64b435\"\n  integrity sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==\n  dependencies:\n    picocolors \"^1.1.0\"\n\n\"@changesets/parse@^0.4.1\":\n  version \"0.4.1\"\n  resolved \"https://registry.yarnpkg.com/@changesets/parse/-/parse-0.4.1.tgz#18ba51d2eb784d27469034f06344f8fdcba586df\"\n  integrity sha512-iwksMs5Bf/wUItfcg+OXrEpravm5rEd9Bf4oyIPL4kVTmJQ7PNDSd6MDYkpSJR1pn7tz/k8Zf2DhTCqX08Ou+Q==\n  dependencies:\n    \"@changesets/types\" \"^6.1.0\"\n    js-yaml \"^3.13.1\"\n\n\"@changesets/pre@^2.0.2\":\n  version \"2.0.2\"\n  resolved \"https://registry.yarnpkg.com/@changesets/pre/-/pre-2.0.2.tgz#b35e84d25fca8b970340642ca04ce76c7fc34ced\"\n  integrity sha512-HaL/gEyFVvkf9KFg6484wR9s0qjAXlZ8qWPDkTyKF6+zqjBe/I2mygg3MbpZ++hdi0ToqNUF8cjj7fBy0dg8Ug==\n  dependencies:\n    \"@changesets/errors\" \"^0.2.0\"\n    \"@changesets/types\" \"^6.1.0\"\n    \"@manypkg/get-packages\" \"^1.1.3\"\n    fs-extra \"^7.0.1\"\n\n\"@changesets/read@^0.6.5\":\n  version \"0.6.5\"\n  resolved \"https://registry.yarnpkg.com/@changesets/read/-/read-0.6.5.tgz#7a68457e6356d3df187aa18e388f1b8dba3d2156\"\n  integrity sha512-UPzNGhsSjHD3Veb0xO/MwvasGe8eMyNrR/sT9gR8Q3DhOQZirgKhhXv/8hVsI0QpPjR004Z9iFxoJU6in3uGMg==\n  dependencies:\n    \"@changesets/git\" \"^3.0.4\"\n    \"@changesets/logger\" \"^0.1.1\"\n    \"@changesets/parse\" \"^0.4.1\"\n    \"@changesets/types\" \"^6.1.0\"\n    fs-extra \"^7.0.1\"\n    p-filter \"^2.1.0\"\n    picocolors \"^1.1.0\"\n\n\"@changesets/should-skip-package@^0.1.2\":\n  version \"0.1.2\"\n  resolved \"https://registry.yarnpkg.com/@changesets/should-skip-package/-/should-skip-package-0.1.2.tgz#c018e1e05eab3d97afa4c4590f2b0db7486ae488\"\n  integrity sha512-qAK/WrqWLNCP22UDdBTMPH5f41elVDlsNyat180A33dWxuUDyNpg6fPi/FyTZwRriVjg0L8gnjJn2F9XAoF0qw==\n  dependencies:\n    \"@changesets/types\" \"^6.1.0\"\n    \"@manypkg/get-packages\" \"^1.1.3\"\n\n\"@changesets/types@^4.0.1\":\n  version \"4.1.0\"\n  resolved \"https://registry.yarnpkg.com/@changesets/types/-/types-4.1.0.tgz#fb8f7ca2324fd54954824e864f9a61a82cb78fe0\"\n  integrity sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==\n\n\"@changesets/types@^6.1.0\":\n  version \"6.1.0\"\n  resolved \"https://registry.yarnpkg.com/@changesets/types/-/types-6.1.0.tgz#12a4c8490827d26bc6fbf97a151499be2fb6d2f5\"\n  integrity sha512-rKQcJ+o1nKNgeoYRHKOS07tAMNd3YSN0uHaJOZYjBAgxfV7TUE7JE+z4BzZdQwb5hKaYbayKN5KrYV7ODb2rAA==\n\n\"@changesets/write@^0.4.0\":\n  version \"0.4.0\"\n  resolved \"https://registry.yarnpkg.com/@changesets/write/-/write-0.4.0.tgz#ec903cbd8aa9b6da6fa09ef19fb609eedd115ed6\"\n  integrity sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==\n  dependencies:\n    \"@changesets/types\" \"^6.1.0\"\n    fs-extra \"^7.0.1\"\n    human-id \"^4.1.1\"\n    prettier \"^2.7.1\"\n\n\"@cnakazawa/watch@^1.0.3\":\n  version \"1.0.3\"\n  resolved \"https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.3.tgz#099139eaec7ebf07a27c1786a3ff64f39464d2ef\"\n  integrity sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA==\n  dependencies:\n    exec-sh \"^0.3.2\"\n    minimist \"^1.2.0\"\n\n\"@docsearch/css@1.0.0-alpha.27\":\n  version \"1.0.0-alpha.27\"\n  resolved \"https://registry.yarnpkg.com/@docsearch/css/-/css-1.0.0-alpha.27.tgz#7f50985869ebab10ffb901b94ed7545269a3393c\"\n  integrity sha512-Kw6R/gAHMZW2tKZO2a0gd3I8Yf6bJgTk3Dp+L0ZFrvEHEh8v3yQKvoxVify3ML9YVyvCxxAPQQuF9u3JNUwvXw==\n\n\"@docsearch/css@^1.0.0-alpha.27\":\n  version \"1.0.0-alpha.28\"\n  resolved \"https://registry.yarnpkg.com/@docsearch/css/-/css-1.0.0-alpha.28.tgz#c8a2cd8c1bb3a6855c51892e9dbdab5d42fe6e23\"\n  integrity sha512-1AhRzVdAkrWwhaxTX6/R7SnFHz8yLz1W8I/AldlTrfbNvZs9INk1FZiEFTJdgHaP68nhgQNWSGlQiDiI3y2RYg==\n\n\"@docsearch/react@1.0.0-alpha.27\":\n  version \"1.0.0-alpha.27\"\n  resolved \"https://registry.yarnpkg.com/@docsearch/react/-/react-1.0.0-alpha.27.tgz#eae61d648ddc3667c5dee82c4cd9d47bf35a3c85\"\n  integrity sha512-jcgUHZsrNNRsaVsplqKhXWheh4VzRTCdhsPuVhJMRvfsFUqXEPo/7kVt5xIybtOj9u+/FVdeSO+APJEE2rakYA==\n  dependencies:\n    \"@docsearch/css\" \"^1.0.0-alpha.27\"\n    \"@francoischalifour/autocomplete-core\" \"^1.0.0-alpha.27\"\n    \"@francoischalifour/autocomplete-preset-algolia\" \"^1.0.0-alpha.27\"\n    algoliasearch \"^4.0.0\"\n\n\"@emotion/is-prop-valid@^0.8.2\":\n  version \"0.8.8\"\n  resolved \"https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz#db28b1c4368a259b60a97311d6a952d4fd01ac1a\"\n  integrity sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==\n  dependencies:\n    \"@emotion/memoize\" \"0.7.4\"\n\n\"@emotion/memoize@0.7.4\":\n  version \"0.7.4\"\n  resolved \"https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.4.tgz#19bf0f5af19149111c40d98bb0cf82119f5d9eeb\"\n  integrity sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==\n\n\"@esbuild/aix-ppc64@0.23.1\":\n  version \"0.23.1\"\n  resolved \"https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz#51299374de171dbd80bb7d838e1cfce9af36f353\"\n  integrity sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==\n\n\"@esbuild/android-arm64@0.23.1\":\n  version \"0.23.1\"\n  resolved \"https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz#58565291a1fe548638adb9c584237449e5e14018\"\n  integrity sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==\n\n\"@esbuild/android-arm@0.23.1\":\n  version \"0.23.1\"\n  resolved \"https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.23.1.tgz#5eb8c652d4c82a2421e3395b808e6d9c42c862ee\"\n  integrity sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==\n\n\"@esbuild/android-x64@0.23.1\":\n  version \"0.23.1\"\n  resolved \"https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.23.1.tgz#ae19d665d2f06f0f48a6ac9a224b3f672e65d517\"\n  integrity sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==\n\n\"@esbuild/darwin-arm64@0.23.1\":\n  version \"0.23.1\"\n  resolved \"https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz#05b17f91a87e557b468a9c75e9d85ab10c121b16\"\n  integrity sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==\n\n\"@esbuild/darwin-x64@0.23.1\":\n  version \"0.23.1\"\n  resolved \"https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz#c58353b982f4e04f0d022284b8ba2733f5ff0931\"\n  integrity sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==\n\n\"@esbuild/freebsd-arm64@0.23.1\":\n  version \"0.23.1\"\n  resolved \"https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz#f9220dc65f80f03635e1ef96cfad5da1f446f3bc\"\n  integrity sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==\n\n\"@esbuild/freebsd-x64@0.23.1\":\n  version \"0.23.1\"\n  resolved \"https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz#69bd8511fa013b59f0226d1609ac43f7ce489730\"\n  integrity sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==\n\n\"@esbuild/linux-arm64@0.23.1\":\n  version \"0.23.1\"\n  resolved \"https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz#8050af6d51ddb388c75653ef9871f5ccd8f12383\"\n  integrity sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==\n\n\"@esbuild/linux-arm@0.23.1\":\n  version \"0.23.1\"\n  resolved \"https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz#ecaabd1c23b701070484990db9a82f382f99e771\"\n  integrity sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==\n\n\"@esbuild/linux-ia32@0.23.1\":\n  version \"0.23.1\"\n  resolved \"https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz#3ed2273214178109741c09bd0687098a0243b333\"\n  integrity sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==\n\n\"@esbuild/linux-loong64@0.23.1\":\n  version \"0.23.1\"\n  resolved \"https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz#a0fdf440b5485c81b0fbb316b08933d217f5d3ac\"\n  integrity sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==\n\n\"@esbuild/linux-mips64el@0.23.1\":\n  version \"0.23.1\"\n  resolved \"https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz#e11a2806346db8375b18f5e104c5a9d4e81807f6\"\n  integrity sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==\n\n\"@esbuild/linux-ppc64@0.23.1\":\n  version \"0.23.1\"\n  resolved \"https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz#06a2744c5eaf562b1a90937855b4d6cf7c75ec96\"\n  integrity sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==\n\n\"@esbuild/linux-riscv64@0.23.1\":\n  version \"0.23.1\"\n  resolved \"https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz#65b46a2892fc0d1af4ba342af3fe0fa4a8fe08e7\"\n  integrity sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==\n\n\"@esbuild/linux-s390x@0.23.1\":\n  version \"0.23.1\"\n  resolved \"https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz#e71ea18c70c3f604e241d16e4e5ab193a9785d6f\"\n  integrity sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==\n\n\"@esbuild/linux-x64@0.23.1\":\n  version \"0.23.1\"\n  resolved \"https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz#d47f97391e80690d4dfe811a2e7d6927ad9eed24\"\n  integrity sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==\n\n\"@esbuild/netbsd-x64@0.23.1\":\n  version \"0.23.1\"\n  resolved \"https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz#44e743c9778d57a8ace4b72f3c6b839a3b74a653\"\n  integrity sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==\n\n\"@esbuild/openbsd-arm64@0.23.1\":\n  version \"0.23.1\"\n  resolved \"https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz#05c5a1faf67b9881834758c69f3e51b7dee015d7\"\n  integrity sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==\n\n\"@esbuild/openbsd-x64@0.23.1\":\n  version \"0.23.1\"\n  resolved \"https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz#2e58ae511bacf67d19f9f2dcd9e8c5a93f00c273\"\n  integrity sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==\n\n\"@esbuild/sunos-x64@0.23.1\":\n  version \"0.23.1\"\n  resolved \"https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz#adb022b959d18d3389ac70769cef5a03d3abd403\"\n  integrity sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==\n\n\"@esbuild/win32-arm64@0.23.1\":\n  version \"0.23.1\"\n  resolved \"https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz#84906f50c212b72ec360f48461d43202f4c8b9a2\"\n  integrity sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==\n\n\"@esbuild/win32-ia32@0.23.1\":\n  version \"0.23.1\"\n  resolved \"https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz#5e3eacc515820ff729e90d0cb463183128e82fac\"\n  integrity sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==\n\n\"@esbuild/win32-x64@0.23.1\":\n  version \"0.23.1\"\n  resolved \"https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz#81fd50d11e2c32b2d6241470e3185b70c7b30699\"\n  integrity sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==\n\n\"@eslint/eslintrc@^0.4.3\":\n  version \"0.4.3\"\n  resolved \"https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c\"\n  integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==\n  dependencies:\n    ajv \"^6.12.4\"\n    debug \"^4.1.1\"\n    espree \"^7.3.0\"\n    globals \"^13.9.0\"\n    ignore \"^4.0.6\"\n    import-fresh \"^3.2.1\"\n    js-yaml \"^3.13.1\"\n    minimatch \"^3.0.4\"\n    strip-json-comments \"^3.1.1\"\n\n\"@formatjs/ecma402-abstract@1.15.0\":\n  version \"1.15.0\"\n  resolved \"https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-1.15.0.tgz#0a285a5dc69889e15d53803bd5036272e23e5a18\"\n  integrity sha512-7bAYAv0w4AIao9DNg0avfOLTCPE9woAgs6SpXuMq11IN3A+l+cq8ghczwqSZBM11myvPSJA7vLn72q0rJ0QK6Q==\n  dependencies:\n    \"@formatjs/intl-localematcher\" \"0.2.32\"\n    tslib \"^2.4.0\"\n\n\"@formatjs/fast-memoize@2.0.1\":\n  version \"2.0.1\"\n  resolved \"https://registry.yarnpkg.com/@formatjs/fast-memoize/-/fast-memoize-2.0.1.tgz#f15aaa73caad5562899c69bdcad8db82adcd3b0b\"\n  integrity sha512-M2GgV+qJn5WJQAYewz7q2Cdl6fobQa69S1AzSM2y0P68ZDbK5cWrJIcPCO395Of1ksftGZoOt4LYCO/j9BKBSA==\n  dependencies:\n    tslib \"^2.4.0\"\n\n\"@formatjs/icu-messageformat-parser@2.4.0\":\n  version \"2.4.0\"\n  resolved \"https://registry.yarnpkg.com/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.4.0.tgz#e165f3594c68416ce15f63793768251de2a85f88\"\n  integrity sha512-6Dh5Z/gp4F/HovXXu/vmd0If5NbYLB5dZrmhWVNb+BOGOEU3wt7Z/83KY1dtd7IDhAnYHasbmKE1RbTE0J+3hw==\n  dependencies:\n    \"@formatjs/ecma402-abstract\" \"1.15.0\"\n    \"@formatjs/icu-skeleton-parser\" \"1.4.0\"\n    tslib \"^2.4.0\"\n\n\"@formatjs/icu-skeleton-parser@1.4.0\":\n  version \"1.4.0\"\n  resolved \"https://registry.yarnpkg.com/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.4.0.tgz#96342eca7c4eef7a309875569e5da973db3465e6\"\n  integrity sha512-Qq347VM616rVLkvN6QsKJELazRyNlbCiN47LdH0Mc5U7E2xV0vatiVhGqd3KFgbc055BvtnUXR7XX60dCGFuWg==\n  dependencies:\n    \"@formatjs/ecma402-abstract\" \"1.15.0\"\n    tslib \"^2.4.0\"\n\n\"@formatjs/intl-localematcher@0.2.32\":\n  version \"0.2.32\"\n  resolved \"https://registry.yarnpkg.com/@formatjs/intl-localematcher/-/intl-localematcher-0.2.32.tgz#00d4d307cd7d514b298e15a11a369b86c8933ec1\"\n  integrity sha512-k/MEBstff4sttohyEpXxCmC3MqbUn9VvHGlZ8fauLzkbwXmVrEeyzS+4uhrvAk9DWU9/7otYWxyDox4nT/KVLQ==\n  dependencies:\n    tslib \"^2.4.0\"\n\n\"@francoischalifour/autocomplete-core@^1.0.0-alpha.27\":\n  version \"1.0.0-alpha.28\"\n  resolved \"https://registry.yarnpkg.com/@francoischalifour/autocomplete-core/-/autocomplete-core-1.0.0-alpha.28.tgz#6b9d8491288e77f831e9b345d461623b0d3f5005\"\n  integrity sha512-rL9x+72btViw+9icfBKUJjZj87FgjFrD2esuTUqtj4RAX3s4AuVZiN8XEsfjQBSc6qJk31cxlvqZHC/BIyYXgg==\n\n\"@francoischalifour/autocomplete-preset-algolia@^1.0.0-alpha.27\":\n  version \"1.0.0-alpha.28\"\n  resolved \"https://registry.yarnpkg.com/@francoischalifour/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.0.0-alpha.28.tgz#a5ad7996f42e43e4acbb4e0010d663746d0e9997\"\n  integrity sha512-bprfNmYt1opFUFEtD2XfY/kEsm13bzHQgU80uMjhuK0DJ914IjolT1GytpkdM6tJ4MBvyiJPP+bTtWO+BZ7c7w==\n\n\"@hookform/resolvers@^3.1.1\":\n  version \"3.1.1\"\n  resolved \"https://registry.yarnpkg.com/@hookform/resolvers/-/resolvers-3.1.1.tgz#b374d33e356428fff9c6ef3c933441fe15e40784\"\n  integrity sha512-tS16bAUkqjITNSvbJuO1x7MXbn7Oe8ZziDTJdA9mMvsoYthnOOiznOTGBYwbdlYBgU+tgpI/BtTU3paRbCuSlg==\n\n\"@humanwhocodes/config-array@^0.5.0\":\n  version \"0.5.0\"\n  resolved \"https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9\"\n  integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==\n  dependencies:\n    \"@humanwhocodes/object-schema\" \"^1.2.0\"\n    debug \"^4.1.1\"\n    minimatch \"^3.0.4\"\n\n\"@humanwhocodes/object-schema@^1.2.0\":\n  version \"1.2.1\"\n  resolved \"https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45\"\n  integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==\n\n\"@inquirer/external-editor@^1.0.0\":\n  version \"1.0.2\"\n  resolved \"https://registry.yarnpkg.com/@inquirer/external-editor/-/external-editor-1.0.2.tgz#dc16e7064c46c53be09918db639ff780718c071a\"\n  integrity sha512-yy9cOoBnx58TlsPrIxauKIFQTiyH+0MK4e97y4sV9ERbI+zDxw7i2hxHLCIEGIE/8PPvDxGhgzIOTSOWcs6/MQ==\n  dependencies:\n    chardet \"^2.1.0\"\n    iconv-lite \"^0.7.0\"\n\n\"@internationalized/date@^3.2.0\":\n  version \"3.2.0\"\n  resolved \"https://registry.yarnpkg.com/@internationalized/date/-/date-3.2.0.tgz#1d266e5e5543a059cf8cca9b954fa033c3e58a75\"\n  integrity sha512-VDMHN1m33L4eqPs5BaihzgQJXyaORbMoHOtrapFxx179J8ucY5CRIHYsq5RRLKPHZWgjNfa5v6amWWDkkMFywA==\n  dependencies:\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@internationalized/message@^3.1.0\":\n  version \"3.1.0\"\n  resolved \"https://registry.yarnpkg.com/@internationalized/message/-/message-3.1.0.tgz#b284014cd8bbb430a648b76c87c62bdca968b04c\"\n  integrity sha512-Oo5m70FcBdADf7G8NkUffVSfuCdeAYVfsvNjZDi9ELpjvkc4YNJVTHt/NyTI9K7FgAVoELxiP9YmN0sJ+HNHYQ==\n  dependencies:\n    \"@swc/helpers\" \"^0.4.14\"\n    intl-messageformat \"^10.1.0\"\n\n\"@internationalized/number@^3.2.0\":\n  version \"3.2.0\"\n  resolved \"https://registry.yarnpkg.com/@internationalized/number/-/number-3.2.0.tgz#dffb661cacd61a87b814c47b7d5240a286249066\"\n  integrity sha512-GUXkhXSX1Ee2RURnzl+47uvbOxnlMnvP9Er+QePTjDjOPWuunmLKlEkYkEcLiiJp7y4l9QxGDLOlVr8m69LS5w==\n  dependencies:\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@internationalized/string@^3.1.0\":\n  version \"3.1.0\"\n  resolved \"https://registry.yarnpkg.com/@internationalized/string/-/string-3.1.0.tgz#0b365906a8c3f44800b0db52c2e990cff345abce\"\n  integrity sha512-TJQKiyUb+wyAfKF59UNeZ/kELMnkxyecnyPCnBI1ma4NaXReJW+7Cc2mObXAqraIBJUVv7rgI46RLKrLgi35ng==\n  dependencies:\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@istanbuljs/load-nyc-config@^1.0.0\":\n  version \"1.1.0\"\n  resolved \"https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced\"\n  integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==\n  dependencies:\n    camelcase \"^5.3.1\"\n    find-up \"^4.1.0\"\n    get-package-type \"^0.1.0\"\n    js-yaml \"^3.13.1\"\n    resolve-from \"^5.0.0\"\n\n\"@istanbuljs/schema@^0.1.2\":\n  version \"0.1.2\"\n  resolved \"https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd\"\n  integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==\n\n\"@jest/console@^25.5.0\":\n  version \"25.5.0\"\n  resolved \"https://registry.yarnpkg.com/@jest/console/-/console-25.5.0.tgz#770800799d510f37329c508a9edd0b7b447d9abb\"\n  integrity sha512-T48kZa6MK1Y6k4b89sexwmSF4YLeZS/Udqg3Jj3jG/cHH+N/sLFCEoXEDMOKugJQ9FxPN1osxIknvKkxt6MKyw==\n  dependencies:\n    \"@jest/types\" \"^25.5.0\"\n    chalk \"^3.0.0\"\n    jest-message-util \"^25.5.0\"\n    jest-util \"^25.5.0\"\n    slash \"^3.0.0\"\n\n\"@jest/core@^25.5.4\":\n  version \"25.5.4\"\n  resolved \"https://registry.yarnpkg.com/@jest/core/-/core-25.5.4.tgz#3ef7412f7339210f003cdf36646bbca786efe7b4\"\n  integrity sha512-3uSo7laYxF00Dg/DMgbn4xMJKmDdWvZnf89n8Xj/5/AeQ2dOQmn6b6Hkj/MleyzZWXpwv+WSdYWl4cLsy2JsoA==\n  dependencies:\n    \"@jest/console\" \"^25.5.0\"\n    \"@jest/reporters\" \"^25.5.1\"\n    \"@jest/test-result\" \"^25.5.0\"\n    \"@jest/transform\" \"^25.5.1\"\n    \"@jest/types\" \"^25.5.0\"\n    ansi-escapes \"^4.2.1\"\n    chalk \"^3.0.0\"\n    exit \"^0.1.2\"\n    graceful-fs \"^4.2.4\"\n    jest-changed-files \"^25.5.0\"\n    jest-config \"^25.5.4\"\n    jest-haste-map \"^25.5.1\"\n    jest-message-util \"^25.5.0\"\n    jest-regex-util \"^25.2.6\"\n    jest-resolve \"^25.5.1\"\n    jest-resolve-dependencies \"^25.5.4\"\n    jest-runner \"^25.5.4\"\n    jest-runtime \"^25.5.4\"\n    jest-snapshot \"^25.5.1\"\n    jest-util \"^25.5.0\"\n    jest-validate \"^25.5.0\"\n    jest-watcher \"^25.5.0\"\n    micromatch \"^4.0.2\"\n    p-each-series \"^2.1.0\"\n    realpath-native \"^2.0.0\"\n    rimraf \"^3.0.0\"\n    slash \"^3.0.0\"\n    strip-ansi \"^6.0.0\"\n\n\"@jest/environment@^25.5.0\":\n  version \"25.5.0\"\n  resolved \"https://registry.yarnpkg.com/@jest/environment/-/environment-25.5.0.tgz#aa33b0c21a716c65686638e7ef816c0e3a0c7b37\"\n  integrity sha512-U2VXPEqL07E/V7pSZMSQCvV5Ea4lqOlT+0ZFijl/i316cRMHvZ4qC+jBdryd+lmRetjQo0YIQr6cVPNxxK87mA==\n  dependencies:\n    \"@jest/fake-timers\" \"^25.5.0\"\n    \"@jest/types\" \"^25.5.0\"\n    jest-mock \"^25.5.0\"\n\n\"@jest/fake-timers@^25.5.0\":\n  version \"25.5.0\"\n  resolved \"https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-25.5.0.tgz#46352e00533c024c90c2bc2ad9f2959f7f114185\"\n  integrity sha512-9y2+uGnESw/oyOI3eww9yaxdZyHq7XvprfP/eeoCsjqKYts2yRlsHS/SgjPDV8FyMfn2nbMy8YzUk6nyvdLOpQ==\n  dependencies:\n    \"@jest/types\" \"^25.5.0\"\n    jest-message-util \"^25.5.0\"\n    jest-mock \"^25.5.0\"\n    jest-util \"^25.5.0\"\n    lolex \"^5.0.0\"\n\n\"@jest/globals@^25.5.2\":\n  version \"25.5.2\"\n  resolved \"https://registry.yarnpkg.com/@jest/globals/-/globals-25.5.2.tgz#5e45e9de8d228716af3257eeb3991cc2e162ca88\"\n  integrity sha512-AgAS/Ny7Q2RCIj5kZ+0MuKM1wbF0WMLxbCVl/GOMoCNbODRdJ541IxJ98xnZdVSZXivKpJlNPIWa3QmY0l4CXA==\n  dependencies:\n    \"@jest/environment\" \"^25.5.0\"\n    \"@jest/types\" \"^25.5.0\"\n    expect \"^25.5.0\"\n\n\"@jest/reporters@^25.5.1\":\n  version \"25.5.1\"\n  resolved \"https://registry.yarnpkg.com/@jest/reporters/-/reporters-25.5.1.tgz#cb686bcc680f664c2dbaf7ed873e93aa6811538b\"\n  integrity sha512-3jbd8pPDTuhYJ7vqiHXbSwTJQNavczPs+f1kRprRDxETeE3u6srJ+f0NPuwvOmk+lmunZzPkYWIFZDLHQPkviw==\n  dependencies:\n    \"@bcoe/v8-coverage\" \"^0.2.3\"\n    \"@jest/console\" \"^25.5.0\"\n    \"@jest/test-result\" \"^25.5.0\"\n    \"@jest/transform\" \"^25.5.1\"\n    \"@jest/types\" \"^25.5.0\"\n    chalk \"^3.0.0\"\n    collect-v8-coverage \"^1.0.0\"\n    exit \"^0.1.2\"\n    glob \"^7.1.2\"\n    graceful-fs \"^4.2.4\"\n    istanbul-lib-coverage \"^3.0.0\"\n    istanbul-lib-instrument \"^4.0.0\"\n    istanbul-lib-report \"^3.0.0\"\n    istanbul-lib-source-maps \"^4.0.0\"\n    istanbul-reports \"^3.0.2\"\n    jest-haste-map \"^25.5.1\"\n    jest-resolve \"^25.5.1\"\n    jest-util \"^25.5.0\"\n    jest-worker \"^25.5.0\"\n    slash \"^3.0.0\"\n    source-map \"^0.6.0\"\n    string-length \"^3.1.0\"\n    terminal-link \"^2.0.0\"\n    v8-to-istanbul \"^4.1.3\"\n  optionalDependencies:\n    node-notifier \"^6.0.0\"\n\n\"@jest/source-map@^25.5.0\":\n  version \"25.5.0\"\n  resolved \"https://registry.yarnpkg.com/@jest/source-map/-/source-map-25.5.0.tgz#df5c20d6050aa292c2c6d3f0d2c7606af315bd1b\"\n  integrity sha512-eIGx0xN12yVpMcPaVpjXPnn3N30QGJCJQSkEDUt9x1fI1Gdvb07Ml6K5iN2hG7NmMP6FDmtPEssE3z6doOYUwQ==\n  dependencies:\n    callsites \"^3.0.0\"\n    graceful-fs \"^4.2.4\"\n    source-map \"^0.6.0\"\n\n\"@jest/test-result@^25.5.0\":\n  version \"25.5.0\"\n  resolved \"https://registry.yarnpkg.com/@jest/test-result/-/test-result-25.5.0.tgz#139a043230cdeffe9ba2d8341b27f2efc77ce87c\"\n  integrity sha512-oV+hPJgXN7IQf/fHWkcS99y0smKLU2czLBJ9WA0jHITLst58HpQMtzSYxzaBvYc6U5U6jfoMthqsUlUlbRXs0A==\n  dependencies:\n    \"@jest/console\" \"^25.5.0\"\n    \"@jest/types\" \"^25.5.0\"\n    \"@types/istanbul-lib-coverage\" \"^2.0.0\"\n    collect-v8-coverage \"^1.0.0\"\n\n\"@jest/test-sequencer@^25.5.4\":\n  version \"25.5.4\"\n  resolved \"https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-25.5.4.tgz#9b4e685b36954c38d0f052e596d28161bdc8b737\"\n  integrity sha512-pTJGEkSeg1EkCO2YWq6hbFvKNXk8ejqlxiOg1jBNLnWrgXOkdY6UmqZpwGFXNnRt9B8nO1uWMzLLZ4eCmhkPNA==\n  dependencies:\n    \"@jest/test-result\" \"^25.5.0\"\n    graceful-fs \"^4.2.4\"\n    jest-haste-map \"^25.5.1\"\n    jest-runner \"^25.5.4\"\n    jest-runtime \"^25.5.4\"\n\n\"@jest/transform@^25.5.1\":\n  version \"25.5.1\"\n  resolved \"https://registry.yarnpkg.com/@jest/transform/-/transform-25.5.1.tgz#0469ddc17699dd2bf985db55fa0fb9309f5c2db3\"\n  integrity sha512-Y8CEoVwXb4QwA6Y/9uDkn0Xfz0finGkieuV0xkdF9UtZGJeLukD5nLkaVrVsODB1ojRWlaoD0AJZpVHCSnJEvg==\n  dependencies:\n    \"@babel/core\" \"^7.1.0\"\n    \"@jest/types\" \"^25.5.0\"\n    babel-plugin-istanbul \"^6.0.0\"\n    chalk \"^3.0.0\"\n    convert-source-map \"^1.4.0\"\n    fast-json-stable-stringify \"^2.0.0\"\n    graceful-fs \"^4.2.4\"\n    jest-haste-map \"^25.5.1\"\n    jest-regex-util \"^25.2.6\"\n    jest-util \"^25.5.0\"\n    micromatch \"^4.0.2\"\n    pirates \"^4.0.1\"\n    realpath-native \"^2.0.0\"\n    slash \"^3.0.0\"\n    source-map \"^0.6.1\"\n    write-file-atomic \"^3.0.0\"\n\n\"@jest/types@^25.5.0\":\n  version \"25.5.0\"\n  resolved \"https://registry.yarnpkg.com/@jest/types/-/types-25.5.0.tgz#4d6a4793f7b9599fc3680877b856a97dbccf2a9d\"\n  integrity sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==\n  dependencies:\n    \"@types/istanbul-lib-coverage\" \"^2.0.0\"\n    \"@types/istanbul-reports\" \"^1.1.1\"\n    \"@types/yargs\" \"^15.0.0\"\n    chalk \"^3.0.0\"\n\n\"@jridgewell/gen-mapping@^0.3.2\":\n  version \"0.3.3\"\n  resolved \"https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098\"\n  integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==\n  dependencies:\n    \"@jridgewell/set-array\" \"^1.0.1\"\n    \"@jridgewell/sourcemap-codec\" \"^1.4.10\"\n    \"@jridgewell/trace-mapping\" \"^0.3.9\"\n\n\"@jridgewell/resolve-uri@3.1.0\":\n  version \"3.1.0\"\n  resolved \"https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78\"\n  integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==\n\n\"@jridgewell/set-array@^1.0.1\":\n  version \"1.1.2\"\n  resolved \"https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72\"\n  integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==\n\n\"@jridgewell/sourcemap-codec@1.4.14\":\n  version \"1.4.14\"\n  resolved \"https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24\"\n  integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==\n\n\"@jridgewell/sourcemap-codec@^1.4.10\":\n  version \"1.4.15\"\n  resolved \"https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32\"\n  integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==\n\n\"@jridgewell/trace-mapping@^0.3.17\", \"@jridgewell/trace-mapping@^0.3.9\":\n  version \"0.3.18\"\n  resolved \"https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6\"\n  integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==\n  dependencies:\n    \"@jridgewell/resolve-uri\" \"3.1.0\"\n    \"@jridgewell/sourcemap-codec\" \"1.4.14\"\n\n\"@manypkg/find-root@^1.1.0\":\n  version \"1.1.0\"\n  resolved \"https://registry.yarnpkg.com/@manypkg/find-root/-/find-root-1.1.0.tgz#a62d8ed1cd7e7d4c11d9d52a8397460b5d4ad29f\"\n  integrity sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==\n  dependencies:\n    \"@babel/runtime\" \"^7.5.5\"\n    \"@types/node\" \"^12.7.1\"\n    find-up \"^4.1.0\"\n    fs-extra \"^8.1.0\"\n\n\"@manypkg/get-packages@^1.1.3\":\n  version \"1.1.3\"\n  resolved \"https://registry.yarnpkg.com/@manypkg/get-packages/-/get-packages-1.1.3.tgz#e184db9bba792fa4693de4658cfb1463ac2c9c47\"\n  integrity sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==\n  dependencies:\n    \"@babel/runtime\" \"^7.5.5\"\n    \"@changesets/types\" \"^4.0.1\"\n    \"@manypkg/find-root\" \"^1.1.0\"\n    fs-extra \"^8.1.0\"\n    globby \"^11.0.0\"\n    read-yaml-file \"^1.1.0\"\n\n\"@mdx-js/loader@^1.5.1\":\n  version \"1.6.22\"\n  resolved \"https://registry.yarnpkg.com/@mdx-js/loader/-/loader-1.6.22.tgz#d9e8fe7f8185ff13c9c8639c048b123e30d322c4\"\n  integrity sha512-9CjGwy595NaxAYp0hF9B/A0lH6C8Rms97e2JS9d3jVUtILn6pT5i5IV965ra3lIWc7Rs1GG1tBdVF7dCowYe6Q==\n  dependencies:\n    \"@mdx-js/mdx\" \"1.6.22\"\n    \"@mdx-js/react\" \"1.6.22\"\n    loader-utils \"2.0.0\"\n\n\"@mdx-js/mdx@1.6.22\", \"@mdx-js/mdx@^1.5.1\", \"@mdx-js/mdx@^1.6.22\":\n  version \"1.6.22\"\n  resolved \"https://registry.yarnpkg.com/@mdx-js/mdx/-/mdx-1.6.22.tgz#8a723157bf90e78f17dc0f27995398e6c731f1ba\"\n  integrity sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==\n  dependencies:\n    \"@babel/core\" \"7.12.9\"\n    \"@babel/plugin-syntax-jsx\" \"7.12.1\"\n    \"@babel/plugin-syntax-object-rest-spread\" \"7.8.3\"\n    \"@mdx-js/util\" \"1.6.22\"\n    babel-plugin-apply-mdx-type-prop \"1.6.22\"\n    babel-plugin-extract-import-names \"1.6.22\"\n    camelcase-css \"2.0.1\"\n    detab \"2.0.4\"\n    hast-util-raw \"6.0.1\"\n    lodash.uniq \"4.5.0\"\n    mdast-util-to-hast \"10.0.1\"\n    remark-footnotes \"2.0.0\"\n    remark-mdx \"1.6.22\"\n    remark-parse \"8.0.3\"\n    remark-squeeze-paragraphs \"4.0.0\"\n    style-to-object \"0.3.0\"\n    unified \"9.2.0\"\n    unist-builder \"2.0.3\"\n    unist-util-visit \"2.0.3\"\n\n\"@mdx-js/react@1.6.22\", \"@mdx-js/react@^1.5.1\", \"@mdx-js/react@^1.6.22\":\n  version \"1.6.22\"\n  resolved \"https://registry.yarnpkg.com/@mdx-js/react/-/react-1.6.22.tgz#ae09b4744fddc74714ee9f9d6f17a66e77c43573\"\n  integrity sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==\n\n\"@mdx-js/tag@^0.20.3\":\n  version \"0.20.3\"\n  resolved \"https://registry.yarnpkg.com/@mdx-js/tag/-/tag-0.20.3.tgz#9e2306040b6469248c45a5f5baf44d0014db0493\"\n  integrity sha512-Co3gUFmNDv9z2LjuvLTpTj2NaOSHFxuoZjohcG0YK/KfECO+Ns9idzThMYjfEDe1vAf4c824rqlBYseedJdFNw==\n\n\"@mdx-js/util@1.6.22\":\n  version \"1.6.22\"\n  resolved \"https://registry.yarnpkg.com/@mdx-js/util/-/util-1.6.22.tgz#219dfd89ae5b97a8801f015323ffa4b62f45718b\"\n  integrity sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==\n\n\"@next/env@13.4.4\":\n  version \"13.4.4\"\n  resolved \"https://registry.yarnpkg.com/@next/env/-/env-13.4.4.tgz#46b620f6bef97fe67a1566bf570dbb791d40c50a\"\n  integrity sha512-q/y7VZj/9YpgzDe64Zi6rY1xPizx80JjlU2BTevlajtaE3w1LqweH1gGgxou2N7hdFosXHjGrI4OUvtFXXhGLg==\n\n\"@next/eslint-plugin-next@13.4.4\":\n  version \"13.4.4\"\n  resolved \"https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-13.4.4.tgz#0df2f699e61b97c65035f87f54795f799e12fead\"\n  integrity sha512-5jnh7q6I15efnjR/rR+/TGTc9hn53g3JTbEjAMjmeQiExKqEUgIXqrHI5zlTNlNyzCPkBB860/ctxXheZaF2Vw==\n  dependencies:\n    glob \"7.1.7\"\n\n\"@next/mdx@^9.4.0\":\n  version \"9.5.5\"\n  resolved \"https://registry.yarnpkg.com/@next/mdx/-/mdx-9.5.5.tgz#c5742c7db722905c4c7456098c1f2ba1cae3994d\"\n  integrity sha512-IdwwXrxqNhZuEeyVdCKtv1R2CqIsAZm/rtCUbE5WImFW3VK8nrSFDFi+JkoWoDcHgGgaJYgfoYAoieHV5POGJg==\n\n\"@next/swc-darwin-arm64@13.4.4\":\n  version \"13.4.4\"\n  resolved \"https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.4.4.tgz#8c14083c2478e2a9a8d140cce5900f76b75667ff\"\n  integrity sha512-xfjgXvp4KalNUKZMHmsFxr1Ug+aGmmO6NWP0uoh4G3WFqP/mJ1xxfww0gMOeMeSq/Jyr5k7DvoZ2Pv+XOITTtw==\n\n\"@next/swc-darwin-x64@13.4.4\":\n  version \"13.4.4\"\n  resolved \"https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.4.4.tgz#5fe01c65c80fcb833c8789fd70f074ea99893864\"\n  integrity sha512-ZY9Ti1hkIwJsxGus3nlubIkvYyB0gNOYxKrfsOrLEqD0I2iCX8D7w8v6QQZ2H+dDl6UT29oeEUdDUNGk4UEpfg==\n\n\"@next/swc-linux-arm64-gnu@13.4.4\":\n  version \"13.4.4\"\n  resolved \"https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.4.4.tgz#f2e071f38e8a6cdadf507cc5d28956f73360d064\"\n  integrity sha512-+KZnDeMShYkpkqAvGCEDeqYTRADJXc6SY1jWXz+Uo6qWQO/Jd9CoyhTJwRSxvQA16MoYzvILkGaDqirkRNctyA==\n\n\"@next/swc-linux-arm64-musl@13.4.4\":\n  version \"13.4.4\"\n  resolved \"https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.4.4.tgz#23bf75c544e54562bc24ec1be036e4bd9cf89e2c\"\n  integrity sha512-evC1twrny2XDT4uOftoubZvW3EG0zs0ZxMwEtu/dDGVRO5n5pT48S8qqEIBGBUZYu/Xx4zzpOkIxx1vpWdE+9A==\n\n\"@next/swc-linux-x64-gnu@13.4.4\":\n  version \"13.4.4\"\n  resolved \"https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.4.4.tgz#bd42590950a01957952206f89cf5622e7c9e4196\"\n  integrity sha512-PX706XcCHr2FfkyhP2lpf+pX/tUvq6/ke7JYnnr0ykNdEMo+sb7cC/o91gnURh4sPYSiZJhsF2gbIqg9rciOHQ==\n\n\"@next/swc-linux-x64-musl@13.4.4\":\n  version \"13.4.4\"\n  resolved \"https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.4.4.tgz#907d81feb1abec3daec0ecb61e3f39b56e7aeafe\"\n  integrity sha512-TKUUx3Ftd95JlHV6XagEnqpT204Y+IsEa3awaYIjayn0MOGjgKZMZibqarK3B1FsMSPaieJf2FEAcu9z0yT5aA==\n\n\"@next/swc-win32-arm64-msvc@13.4.4\":\n  version \"13.4.4\"\n  resolved \"https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.4.4.tgz#1d754d2bb10bdf9907c0acc83711438697c3b5fe\"\n  integrity sha512-FP8AadgSq4+HPtim7WBkCMGbhr5vh9FePXiWx9+YOdjwdQocwoCK5ZVC3OW8oh3TWth6iJ0AXJ/yQ1q1cwSZ3A==\n\n\"@next/swc-win32-ia32-msvc@13.4.4\":\n  version \"13.4.4\"\n  resolved \"https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.4.4.tgz#77b2c7f7534b675d46e46301869e08d504d23956\"\n  integrity sha512-3WekVmtuA2MCdcAOrgrI+PuFiFURtSyyrN1I3UPtS0ckR2HtLqyqmS334Eulf15g1/bdwMteePdK363X/Y9JMg==\n\n\"@next/swc-win32-x64-msvc@13.4.4\":\n  version \"13.4.4\"\n  resolved \"https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.4.4.tgz#faab69239f8a9d0be7cd473e65f5a07735ef7b0e\"\n  integrity sha512-AHRITu/CrlQ+qzoqQtEMfaTu7GHaQ6bziQln/pVWpOYC1wU+Mq6VQQFlsDtMCnDztPZtppAXdvvbNS7pcfRzlw==\n\n\"@nodelib/fs.scandir@2.1.3\":\n  version \"2.1.3\"\n  resolved \"https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz#3a582bdb53804c6ba6d146579c46e52130cf4a3b\"\n  integrity sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==\n  dependencies:\n    \"@nodelib/fs.stat\" \"2.0.3\"\n    run-parallel \"^1.1.9\"\n\n\"@nodelib/fs.stat@2.0.3\", \"@nodelib/fs.stat@^2.0.2\":\n  version \"2.0.3\"\n  resolved \"https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz#34dc5f4cabbc720f4e60f75a747e7ecd6c175bd3\"\n  integrity sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==\n\n\"@nodelib/fs.walk@^1.2.3\":\n  version \"1.2.4\"\n  resolved \"https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz#011b9202a70a6366e436ca5c065844528ab04976\"\n  integrity sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==\n  dependencies:\n    \"@nodelib/fs.scandir\" \"2.1.3\"\n    fastq \"^1.6.0\"\n\n\"@pkgr/utils@^2.3.1\":\n  version \"2.4.1\"\n  resolved \"https://registry.yarnpkg.com/@pkgr/utils/-/utils-2.4.1.tgz#adf291d0357834c410ce80af16e711b56c7b1cd3\"\n  integrity sha512-JOqwkgFEyi+OROIyq7l4Jy28h/WwhDnG/cPkXG2Z1iFbubB6jsHW1NDvmyOzTBxHr3yg68YGirmh1JUgMqa+9w==\n  dependencies:\n    cross-spawn \"^7.0.3\"\n    fast-glob \"^3.2.12\"\n    is-glob \"^4.0.3\"\n    open \"^9.1.0\"\n    picocolors \"^1.0.0\"\n    tslib \"^2.5.0\"\n\n\"@playwright/test@^1.34.3\":\n  version \"1.34.3\"\n  resolved \"https://registry.yarnpkg.com/@playwright/test/-/test-1.34.3.tgz#d9f1ac3f1a09633b5ca5351c50c308bf802bde53\"\n  integrity sha512-zPLef6w9P6T/iT6XDYG3mvGOqOyb6eHaV9XtkunYs0+OzxBtrPAAaHotc0X+PJ00WPPnLfFBTl7mf45Mn8DBmw==\n  dependencies:\n    \"@types/node\" \"*\"\n    playwright-core \"1.34.3\"\n  optionalDependencies:\n    fsevents \"2.3.2\"\n\n\"@popmotion/easing@^1.0.1\", \"@popmotion/easing@^1.0.2\":\n  version \"1.0.2\"\n  resolved \"https://registry.yarnpkg.com/@popmotion/easing/-/easing-1.0.2.tgz#17d925c45b4bf44189e5a38038d149df42d8c0b4\"\n  integrity sha512-IkdW0TNmRnWTeWI7aGQIVDbKXPWHVEYdGgd5ZR4SH/Ty/61p63jCjrPxX1XrR7IGkl08bjhJROStD7j+RKgoIw==\n\n\"@popmotion/popcorn@^0.4.2\", \"@popmotion/popcorn@^0.4.4\":\n  version \"0.4.4\"\n  resolved \"https://registry.yarnpkg.com/@popmotion/popcorn/-/popcorn-0.4.4.tgz#a5f906fccdff84526e3fcb892712d7d8a98d6adc\"\n  integrity sha512-jYO/8319fKoNLMlY4ZJPiPu8Ea8occYwRZhxpaNn/kZsK4QG2E7XFlXZMJBsTWDw7I1i0uaqyC4zn1nwEezLzg==\n  dependencies:\n    \"@popmotion/easing\" \"^1.0.1\"\n    framesync \"^4.0.1\"\n    hey-listen \"^1.0.8\"\n    style-value-types \"^3.1.7\"\n    tslib \"^1.10.0\"\n\n\"@react-aria/breadcrumbs@^3.5.2\":\n  version \"3.5.2\"\n  resolved \"https://registry.yarnpkg.com/@react-aria/breadcrumbs/-/breadcrumbs-3.5.2.tgz#2da2d329e7718ec6fa151db8b746c4d69564ad14\"\n  integrity sha512-un10i3vzT7oCftb6jzbMkt6BI/WGlkr+JvWLWFl9CFXH4AlsIU8jWEsrVFUCySSI8Xsj43074zLsnpxgxLgSOA==\n  dependencies:\n    \"@react-aria/i18n\" \"^3.7.2\"\n    \"@react-aria/interactions\" \"^3.15.1\"\n    \"@react-aria/link\" \"^3.5.1\"\n    \"@react-aria/utils\" \"^3.17.0\"\n    \"@react-types/breadcrumbs\" \"^3.5.2\"\n    \"@react-types/shared\" \"^3.18.1\"\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-aria/button@^3.7.2\":\n  version \"3.7.2\"\n  resolved \"https://registry.yarnpkg.com/@react-aria/button/-/button-3.7.2.tgz#d2a11766f93242989ad2b90cd948f6da7a086b63\"\n  integrity sha512-flsnMy1xDaTDL+xDzLDeXDAiqNTgbd19R6e4fsDzDPk/mlPgvOSKQtZjswIru4rJR+d29a7LXDemBN/iJEe/3w==\n  dependencies:\n    \"@react-aria/focus\" \"^3.12.1\"\n    \"@react-aria/interactions\" \"^3.15.1\"\n    \"@react-aria/utils\" \"^3.17.0\"\n    \"@react-stately/toggle\" \"^3.5.2\"\n    \"@react-types/button\" \"^3.7.3\"\n    \"@react-types/shared\" \"^3.18.1\"\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-aria/calendar@^3.3.0\":\n  version \"3.3.0\"\n  resolved \"https://registry.yarnpkg.com/@react-aria/calendar/-/calendar-3.3.0.tgz#92a33ad08f5ecc8d22f23af2f87914e711b9b75c\"\n  integrity sha512-K8KATJQjd7xsb9aTe6Cx0/22JrHAiONspSwyGlQlJhHUnpnB6VRvPlVxfEClnbA+oVt04s/vJ87WGVnRNoFI5g==\n  dependencies:\n    \"@internationalized/date\" \"^3.2.0\"\n    \"@react-aria/i18n\" \"^3.7.2\"\n    \"@react-aria/interactions\" \"^3.15.1\"\n    \"@react-aria/live-announcer\" \"^3.3.0\"\n    \"@react-aria/utils\" \"^3.17.0\"\n    \"@react-stately/calendar\" \"^3.2.1\"\n    \"@react-types/button\" \"^3.7.3\"\n    \"@react-types/calendar\" \"^3.2.1\"\n    \"@react-types/shared\" \"^3.18.1\"\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-aria/checkbox@^3.9.1\":\n  version \"3.9.1\"\n  resolved \"https://registry.yarnpkg.com/@react-aria/checkbox/-/checkbox-3.9.1.tgz#29e7f1ae66cbafac425099af908f371df4f5f231\"\n  integrity sha512-1TmaqrQ419K6p9KU9v5cGHjStH4p9vOGZsfYYO8RXsQsXmZ7vcK7rjytMeCTdExovU74xK9oXNh64c15Yh9EEA==\n  dependencies:\n    \"@react-aria/label\" \"^3.5.2\"\n    \"@react-aria/toggle\" \"^3.6.1\"\n    \"@react-aria/utils\" \"^3.17.0\"\n    \"@react-stately/checkbox\" \"^3.4.2\"\n    \"@react-stately/toggle\" \"^3.5.2\"\n    \"@react-types/checkbox\" \"^3.4.4\"\n    \"@react-types/shared\" \"^3.18.1\"\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-aria/combobox@^3.6.1\":\n  version \"3.6.1\"\n  resolved \"https://registry.yarnpkg.com/@react-aria/combobox/-/combobox-3.6.1.tgz#c5f97487eb438092b7f79bfffc51772c264ccc59\"\n  integrity sha512-FdIFAV9appfN5DfoZoJ1D+ZJS3Xp5Kro1oPUPnz9XgthwYV98JinQ5aMBKI4+df0mLmU5z1T3DWbqUuDheUCwg==\n  dependencies:\n    \"@react-aria/i18n\" \"^3.7.2\"\n    \"@react-aria/interactions\" \"^3.15.1\"\n    \"@react-aria/listbox\" \"^3.9.1\"\n    \"@react-aria/live-announcer\" \"^3.3.0\"\n    \"@react-aria/menu\" \"^3.9.1\"\n    \"@react-aria/overlays\" \"^3.14.1\"\n    \"@react-aria/selection\" \"^3.15.0\"\n    \"@react-aria/textfield\" \"^3.9.2\"\n    \"@react-aria/utils\" \"^3.17.0\"\n    \"@react-stately/collections\" \"^3.8.0\"\n    \"@react-stately/combobox\" \"^3.5.1\"\n    \"@react-stately/layout\" \"^3.12.1\"\n    \"@react-types/button\" \"^3.7.3\"\n    \"@react-types/combobox\" \"^3.6.2\"\n    \"@react-types/shared\" \"^3.18.1\"\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-aria/datepicker@^3.4.1\":\n  version \"3.4.1\"\n  resolved \"https://registry.yarnpkg.com/@react-aria/datepicker/-/datepicker-3.4.1.tgz#66ebeadaab48cd1f75d9b8495b1d095ceb29327d\"\n  integrity sha512-SRfMwXgLw64WFB7+2uUNjlq4DkOEBNIxuAl5inpk6gef3kK7izSzktbI90uFSA8lcGiN/nIv9G3I2vjz3k1y5Q==\n  dependencies:\n    \"@internationalized/date\" \"^3.2.0\"\n    \"@internationalized/number\" \"^3.2.0\"\n    \"@internationalized/string\" \"^3.1.0\"\n    \"@react-aria/focus\" \"^3.12.1\"\n    \"@react-aria/i18n\" \"^3.7.2\"\n    \"@react-aria/interactions\" \"^3.15.1\"\n    \"@react-aria/label\" \"^3.5.2\"\n    \"@react-aria/spinbutton\" \"^3.4.1\"\n    \"@react-aria/utils\" \"^3.17.0\"\n    \"@react-stately/datepicker\" \"^3.4.1\"\n    \"@react-types/button\" \"^3.7.3\"\n    \"@react-types/calendar\" \"^3.2.1\"\n    \"@react-types/datepicker\" \"^3.3.1\"\n    \"@react-types/dialog\" \"^3.5.2\"\n    \"@react-types/shared\" \"^3.18.1\"\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-aria/dialog@^3.5.2\":\n  version \"3.5.2\"\n  resolved \"https://registry.yarnpkg.com/@react-aria/dialog/-/dialog-3.5.2.tgz#8d2ba539cb98fa99268150dacda1b79365f92fac\"\n  integrity sha512-iKPuk1I9rFHj0y5cjYIoMj4AFeBhWeWWfFDmOuzDx9rsOK6l9jrcAV69LVXtWVJhsmmJs5TP5Ly4OlvpB+9rjA==\n  dependencies:\n    \"@react-aria/focus\" \"^3.12.1\"\n    \"@react-aria/overlays\" \"^3.14.1\"\n    \"@react-aria/utils\" \"^3.17.0\"\n    \"@react-stately/overlays\" \"^3.5.2\"\n    \"@react-types/dialog\" \"^3.5.2\"\n    \"@react-types/shared\" \"^3.18.1\"\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-aria/dnd@^3.2.1\":\n  version \"3.2.1\"\n  resolved \"https://registry.yarnpkg.com/@react-aria/dnd/-/dnd-3.2.1.tgz#60218ec6fc4e1a8022cf26525ee98157847f3ebe\"\n  integrity sha512-9XvUvBSdaMGD8kwNzbSt+eA0wK465KNrsRJvqYIwUTXhrVjbomzXPm8NQ1e9Y8f7j1vSZU1BlMky0861SHwbWg==\n  dependencies:\n    \"@internationalized/string\" \"^3.1.0\"\n    \"@react-aria/i18n\" \"^3.7.2\"\n    \"@react-aria/interactions\" \"^3.15.1\"\n    \"@react-aria/live-announcer\" \"^3.3.0\"\n    \"@react-aria/overlays\" \"^3.14.1\"\n    \"@react-aria/utils\" \"^3.17.0\"\n    \"@react-aria/visually-hidden\" \"^3.8.1\"\n    \"@react-stately/dnd\" \"^3.2.1\"\n    \"@react-types/button\" \"^3.7.3\"\n    \"@react-types/shared\" \"^3.18.1\"\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-aria/focus@^3.12.1\":\n  version \"3.12.1\"\n  resolved \"https://registry.yarnpkg.com/@react-aria/focus/-/focus-3.12.1.tgz#5976fa41f36d09a0271f736d7c01414704ea1ca2\"\n  integrity sha512-i1bRz27mRFnrDpYpRvm/6Zm+FbGo0WygNQiLVgTce7WY+39oLERIGRrE8Ovy6rY9Hr4MGBAXz2Q+o9oTOgeBgA==\n  dependencies:\n    \"@react-aria/interactions\" \"^3.15.1\"\n    \"@react-aria/utils\" \"^3.17.0\"\n    \"@react-types/shared\" \"^3.18.1\"\n    \"@swc/helpers\" \"^0.4.14\"\n    clsx \"^1.1.1\"\n\n\"@react-aria/grid@^3.7.1\":\n  version \"3.7.1\"\n  resolved \"https://registry.yarnpkg.com/@react-aria/grid/-/grid-3.7.1.tgz#8d68f0bb2c617773c9a640f1a98303542c2dccfc\"\n  integrity sha512-CwrRbX1GuLJnQugB3fkujMPjFEJNyzcy+niuAwRMn768Y9MD8swDMwGrKL362NddF2jSCCwIxqA0qjCPeD4S2w==\n  dependencies:\n    \"@react-aria/focus\" \"^3.12.1\"\n    \"@react-aria/i18n\" \"^3.7.2\"\n    \"@react-aria/interactions\" \"^3.15.1\"\n    \"@react-aria/live-announcer\" \"^3.3.0\"\n    \"@react-aria/selection\" \"^3.15.0\"\n    \"@react-aria/utils\" \"^3.17.0\"\n    \"@react-stately/collections\" \"^3.8.0\"\n    \"@react-stately/grid\" \"^3.6.1\"\n    \"@react-stately/selection\" \"^3.13.1\"\n    \"@react-stately/virtualizer\" \"^3.5.2\"\n    \"@react-types/checkbox\" \"^3.4.4\"\n    \"@react-types/grid\" \"^3.1.8\"\n    \"@react-types/shared\" \"^3.18.1\"\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-aria/gridlist@^3.4.0\":\n  version \"3.4.0\"\n  resolved \"https://registry.yarnpkg.com/@react-aria/gridlist/-/gridlist-3.4.0.tgz#7273a0e29f610ba8dfa73b4a85a271d7b5aabdfd\"\n  integrity sha512-qV0XIdUrAJMlj+H4d5kL8cH5AFq8m9oNzcDfiA9ku1zsJ9yd3l1waSOyIWlrFZkaIIdkgFUDM4RzgvNHm+WA0Q==\n  dependencies:\n    \"@react-aria/focus\" \"^3.12.1\"\n    \"@react-aria/grid\" \"^3.7.1\"\n    \"@react-aria/i18n\" \"^3.7.2\"\n    \"@react-aria/interactions\" \"^3.15.1\"\n    \"@react-aria/selection\" \"^3.15.0\"\n    \"@react-aria/utils\" \"^3.17.0\"\n    \"@react-stately/list\" \"^3.8.1\"\n    \"@react-types/checkbox\" \"^3.4.4\"\n    \"@react-types/shared\" \"^3.18.1\"\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-aria/i18n@^3.7.2\":\n  version \"3.7.2\"\n  resolved \"https://registry.yarnpkg.com/@react-aria/i18n/-/i18n-3.7.2.tgz#7e42943a5e0584dca60c72830175edbae4d9be9f\"\n  integrity sha512-GsVioW8RGOmwebTruEBAmGYJunY0WS7Ljfn5n7Mec3eoMKdQjH2M70fHwCOWqJo8Ufq7A7p0ypBVCv4d4sbSdw==\n  dependencies:\n    \"@internationalized/date\" \"^3.2.0\"\n    \"@internationalized/message\" \"^3.1.0\"\n    \"@internationalized/number\" \"^3.2.0\"\n    \"@internationalized/string\" \"^3.1.0\"\n    \"@react-aria/ssr\" \"^3.6.0\"\n    \"@react-aria/utils\" \"^3.17.0\"\n    \"@react-types/shared\" \"^3.18.1\"\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-aria/interactions@^3.15.1\":\n  version \"3.15.1\"\n  resolved \"https://registry.yarnpkg.com/@react-aria/interactions/-/interactions-3.15.1.tgz#10d82fd2ce7a3088713c59cb10b63613c8344052\"\n  integrity sha512-khtpxSvos885rxMep6DRe8RGZjtD16ZuLxhFBtL1dXqSv5XZxaXKOmI8Yx1F8AkVIPdB72MmjG8dz3PpM3PPYg==\n  dependencies:\n    \"@react-aria/ssr\" \"^3.6.0\"\n    \"@react-aria/utils\" \"^3.17.0\"\n    \"@react-types/shared\" \"^3.18.1\"\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-aria/label@^3.5.2\":\n  version \"3.5.2\"\n  resolved \"https://registry.yarnpkg.com/@react-aria/label/-/label-3.5.2.tgz#fa667c04fc19546030e13b49a12dbcd5db323ef1\"\n  integrity sha512-YtLJl3l11TKzGhSMuUqp1DdQ6s3hbT1buiC+jPPKv81PcjjoUDpj+hAVnc1cigtvrEFSMpi2Z+KYREmYYj4GDQ==\n  dependencies:\n    \"@react-aria/utils\" \"^3.17.0\"\n    \"@react-types/label\" \"^3.7.4\"\n    \"@react-types/shared\" \"^3.18.1\"\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-aria/link@^3.5.1\":\n  version \"3.5.1\"\n  resolved \"https://registry.yarnpkg.com/@react-aria/link/-/link-3.5.1.tgz#f93914ae5b31b3a38ce1a99809197240113778e3\"\n  integrity sha512-eVdbmiae/Y3B5k78bakx2x43c69cqvEk/g38kjRI4lNa1WsQMdV/3HXjuWa3KA+c3ajn0kTAXO6inHKGtJ9d6w==\n  dependencies:\n    \"@react-aria/focus\" \"^3.12.1\"\n    \"@react-aria/interactions\" \"^3.15.1\"\n    \"@react-aria/utils\" \"^3.17.0\"\n    \"@react-types/link\" \"^3.4.2\"\n    \"@react-types/shared\" \"^3.18.1\"\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-aria/listbox@^3.9.1\":\n  version \"3.9.1\"\n  resolved \"https://registry.yarnpkg.com/@react-aria/listbox/-/listbox-3.9.1.tgz#8b077a02fc9a6179c7660d0f3aca83bbf43eb714\"\n  integrity sha512-tRcqNHGx9Vtspth9zdOLEfbGGaLrTN/rDXg0xN2FT++qxwALuYV7R4qFUX7eTPCT+NDOqeQNOCsHyQF4gQN+JQ==\n  dependencies:\n    \"@react-aria/focus\" \"^3.12.1\"\n    \"@react-aria/interactions\" \"^3.15.1\"\n    \"@react-aria/label\" \"^3.5.2\"\n    \"@react-aria/selection\" \"^3.15.0\"\n    \"@react-aria/utils\" \"^3.17.0\"\n    \"@react-stately/collections\" \"^3.8.0\"\n    \"@react-stately/list\" \"^3.8.1\"\n    \"@react-types/listbox\" \"^3.4.2\"\n    \"@react-types/shared\" \"^3.18.1\"\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-aria/live-announcer@^3.3.0\":\n  version \"3.3.0\"\n  resolved \"https://registry.yarnpkg.com/@react-aria/live-announcer/-/live-announcer-3.3.0.tgz#04a2a233c2f48c53994f83cafdc4336ec1ea3700\"\n  integrity sha512-6diTS6mIf70KdxfGqiDxHV+9Qv8a9A88EqBllzXGF6HWPdcwde/GIEmfpTwj8g1ImNGZYUwDkv4Hd9lFj0MXEg==\n  dependencies:\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-aria/menu@^3.9.1\":\n  version \"3.9.1\"\n  resolved \"https://registry.yarnpkg.com/@react-aria/menu/-/menu-3.9.1.tgz#a89f8c65429c50d5247a46fd100454ec3efb37e5\"\n  integrity sha512-LRSo7KyVxoFxrjj55VtxMKJ6/c3LhfZThytWFvA9r02Ukf1B0xn/Or8rgyVyHcyekvcmT4IDrjFl1tDG2wsq4g==\n  dependencies:\n    \"@react-aria/i18n\" \"^3.7.2\"\n    \"@react-aria/interactions\" \"^3.15.1\"\n    \"@react-aria/overlays\" \"^3.14.1\"\n    \"@react-aria/selection\" \"^3.15.0\"\n    \"@react-aria/utils\" \"^3.17.0\"\n    \"@react-stately/collections\" \"^3.8.0\"\n    \"@react-stately/menu\" \"^3.5.2\"\n    \"@react-stately/tree\" \"^3.6.1\"\n    \"@react-types/button\" \"^3.7.3\"\n    \"@react-types/menu\" \"^3.9.1\"\n    \"@react-types/shared\" \"^3.18.1\"\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-aria/meter@^3.4.2\":\n  version \"3.4.2\"\n  resolved \"https://registry.yarnpkg.com/@react-aria/meter/-/meter-3.4.2.tgz#741bf22176a349c0973d9480c9c306ebb5d81545\"\n  integrity sha512-3qcWeCiLuauwQdLHOc/RssuxEEhYWEy+TXNNE2P6zKvduuL19JKKljpuI1SpQSQ4nAamIGZwGBwHdAoZpLx3Kw==\n  dependencies:\n    \"@react-aria/progress\" \"^3.4.2\"\n    \"@react-types/meter\" \"^3.3.2\"\n    \"@react-types/shared\" \"^3.18.1\"\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-aria/numberfield@^3.5.1\":\n  version \"3.5.1\"\n  resolved \"https://registry.yarnpkg.com/@react-aria/numberfield/-/numberfield-3.5.1.tgz#e4f97e24dd755e2092a8afa2689a82798e610105\"\n  integrity sha512-O0hDANrlwsKSKjiV64Ryx1FfNxkuByU9qXKz7vpMf8ZeR3OLAYzvib1RNeFvijM9/TUGp1zA40cwGknEp6D72w==\n  dependencies:\n    \"@react-aria/i18n\" \"^3.7.2\"\n    \"@react-aria/interactions\" \"^3.15.1\"\n    \"@react-aria/live-announcer\" \"^3.3.0\"\n    \"@react-aria/spinbutton\" \"^3.4.1\"\n    \"@react-aria/textfield\" \"^3.9.2\"\n    \"@react-aria/utils\" \"^3.17.0\"\n    \"@react-stately/numberfield\" \"^3.4.2\"\n    \"@react-types/button\" \"^3.7.3\"\n    \"@react-types/numberfield\" \"^3.4.2\"\n    \"@react-types/shared\" \"^3.18.1\"\n    \"@react-types/textfield\" \"^3.7.2\"\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-aria/overlays@^3.14.1\":\n  version \"3.14.1\"\n  resolved \"https://registry.yarnpkg.com/@react-aria/overlays/-/overlays-3.14.1.tgz#2e18bd78eef145dc1353490dbe29f04622cfbafe\"\n  integrity sha512-xJCw0oSDtwBCCqf0EMMeeLYOEFSCdd1cWFS0O3980SObFQPHwP5KOX5SAs7lVvIlZUvEdpo6sOytcQTjv5U9QA==\n  dependencies:\n    \"@react-aria/focus\" \"^3.12.1\"\n    \"@react-aria/i18n\" \"^3.7.2\"\n    \"@react-aria/interactions\" \"^3.15.1\"\n    \"@react-aria/ssr\" \"^3.6.0\"\n    \"@react-aria/utils\" \"^3.17.0\"\n    \"@react-aria/visually-hidden\" \"^3.8.1\"\n    \"@react-stately/overlays\" \"^3.5.2\"\n    \"@react-types/button\" \"^3.7.3\"\n    \"@react-types/overlays\" \"^3.7.2\"\n    \"@react-types/shared\" \"^3.18.1\"\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-aria/progress@^3.4.2\":\n  version \"3.4.2\"\n  resolved \"https://registry.yarnpkg.com/@react-aria/progress/-/progress-3.4.2.tgz#a4357c718808cacf01e83e162d2e3968dc623629\"\n  integrity sha512-9VQbZGWnzQz8pW7NoOzUNzVkWemTaCfut8KJHcyW/KicoNfNHNuhaBcFvor0pAGIYT4Kdxlv0aG6i3N1xit6aQ==\n  dependencies:\n    \"@react-aria/i18n\" \"^3.7.2\"\n    \"@react-aria/label\" \"^3.5.2\"\n    \"@react-aria/utils\" \"^3.17.0\"\n    \"@react-types/progress\" \"^3.4.1\"\n    \"@react-types/shared\" \"^3.18.1\"\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-aria/radio@^3.6.1\":\n  version \"3.6.1\"\n  resolved \"https://registry.yarnpkg.com/@react-aria/radio/-/radio-3.6.1.tgz#baf5d83b99b5ef44fa0bed804daa2fb221ecf754\"\n  integrity sha512-paO2sCxvH8I0Iomzgmvw1TCvzd+0AcUylPSr34dhPmJIsRew7UVtmON9YU8tM/KELDv346n2v8KqzlgHJlLLvg==\n  dependencies:\n    \"@react-aria/focus\" \"^3.12.1\"\n    \"@react-aria/i18n\" \"^3.7.2\"\n    \"@react-aria/interactions\" \"^3.15.1\"\n    \"@react-aria/label\" \"^3.5.2\"\n    \"@react-aria/utils\" \"^3.17.0\"\n    \"@react-stately/radio\" \"^3.8.1\"\n    \"@react-types/radio\" \"^3.4.2\"\n    \"@react-types/shared\" \"^3.18.1\"\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-aria/searchfield@^3.5.2\":\n  version \"3.5.2\"\n  resolved \"https://registry.yarnpkg.com/@react-aria/searchfield/-/searchfield-3.5.2.tgz#9ff0031130c73be1007822f9b99a6ef9967a5930\"\n  integrity sha512-rmTdr1ZYqVOZ9lTf2ks71ohirgNsutuG8If6r2FFvatc8UgOG/ClKeaTHhErPKLtO9+SxQWDGmi72ShF92Ydjw==\n  dependencies:\n    \"@react-aria/i18n\" \"^3.7.2\"\n    \"@react-aria/interactions\" \"^3.15.1\"\n    \"@react-aria/textfield\" \"^3.9.2\"\n    \"@react-aria/utils\" \"^3.17.0\"\n    \"@react-stately/searchfield\" \"^3.4.2\"\n    \"@react-types/button\" \"^3.7.3\"\n    \"@react-types/searchfield\" \"^3.4.2\"\n    \"@react-types/shared\" \"^3.18.1\"\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-aria/select@^3.10.1\":\n  version \"3.10.1\"\n  resolved \"https://registry.yarnpkg.com/@react-aria/select/-/select-3.10.1.tgz#eb6be7dd29f40ced0c1c4aaedf698ca43790b0bd\"\n  integrity sha512-gu+ssmcT7kA9B9PCFaY/LyWPtNk0Ywl51qFM4S8JVTM3sMqnUPVjFHFp/UYL6NK1pZa9Saui4c4HZCGc+HcQlQ==\n  dependencies:\n    \"@react-aria/i18n\" \"^3.7.2\"\n    \"@react-aria/interactions\" \"^3.15.1\"\n    \"@react-aria/label\" \"^3.5.2\"\n    \"@react-aria/listbox\" \"^3.9.1\"\n    \"@react-aria/menu\" \"^3.9.1\"\n    \"@react-aria/selection\" \"^3.15.0\"\n    \"@react-aria/utils\" \"^3.17.0\"\n    \"@react-aria/visually-hidden\" \"^3.8.1\"\n    \"@react-stately/select\" \"^3.5.1\"\n    \"@react-types/button\" \"^3.7.3\"\n    \"@react-types/select\" \"^3.8.1\"\n    \"@react-types/shared\" \"^3.18.1\"\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-aria/selection@^3.15.0\":\n  version \"3.15.0\"\n  resolved \"https://registry.yarnpkg.com/@react-aria/selection/-/selection-3.15.0.tgz#928acf8adffea1afe64a152b6fe425a5424e52f5\"\n  integrity sha512-v3AXsau6BobbM5Fu7X+HhX5K/Ey3drVBaoevGDiYX8kGS9jlFNDXENKYPtnMpcTCvSX0yuxTITukOEBokzkb6Q==\n  dependencies:\n    \"@react-aria/focus\" \"^3.12.1\"\n    \"@react-aria/i18n\" \"^3.7.2\"\n    \"@react-aria/interactions\" \"^3.15.1\"\n    \"@react-aria/utils\" \"^3.17.0\"\n    \"@react-stately/collections\" \"^3.8.0\"\n    \"@react-stately/selection\" \"^3.13.1\"\n    \"@react-types/shared\" \"^3.18.1\"\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-aria/separator@^3.3.2\":\n  version \"3.3.2\"\n  resolved \"https://registry.yarnpkg.com/@react-aria/separator/-/separator-3.3.2.tgz#38a895a06ad61b4d3304c173c36f357bf6b3ed89\"\n  integrity sha512-JNftOexcj8lvKRS7h+gTIW4HBJVtcYRc8ESCt7GFgAozVNmu+IJ6KPvD1MYBozCLzoKGnLPXB/9eGi47wNdXnA==\n  dependencies:\n    \"@react-aria/utils\" \"^3.17.0\"\n    \"@react-types/shared\" \"^3.18.1\"\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-aria/slider@^3.4.1\":\n  version \"3.4.1\"\n  resolved \"https://registry.yarnpkg.com/@react-aria/slider/-/slider-3.4.1.tgz#b56c4b1bb82a4038150c2e67953a55e3337e6231\"\n  integrity sha512-gJTfwZGGGv0dPUO3rC8HCyOXnAgMagJZnV3gIILfzNWZHZLYbLze+IbTSNtNKGIvt4pAKTV0njLDLlxFZlAadw==\n  dependencies:\n    \"@react-aria/focus\" \"^3.12.1\"\n    \"@react-aria/i18n\" \"^3.7.2\"\n    \"@react-aria/interactions\" \"^3.15.1\"\n    \"@react-aria/label\" \"^3.5.2\"\n    \"@react-aria/utils\" \"^3.17.0\"\n    \"@react-stately/radio\" \"^3.8.1\"\n    \"@react-stately/slider\" \"^3.3.2\"\n    \"@react-types/radio\" \"^3.4.2\"\n    \"@react-types/shared\" \"^3.18.1\"\n    \"@react-types/slider\" \"^3.5.1\"\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-aria/spinbutton@^3.4.1\":\n  version \"3.4.1\"\n  resolved \"https://registry.yarnpkg.com/@react-aria/spinbutton/-/spinbutton-3.4.1.tgz#627db560317fee187854d48c6e31a4f2f0591a3e\"\n  integrity sha512-YL3Gp431Jd8FcZ3aU/ymQJlV1yPOShbDJUvHZ8cwasjFH3QLSvx88pcv1PTKxyE3RdRFkP+Xii61jFfF7B5jmg==\n  dependencies:\n    \"@react-aria/i18n\" \"^3.7.2\"\n    \"@react-aria/live-announcer\" \"^3.3.0\"\n    \"@react-aria/utils\" \"^3.17.0\"\n    \"@react-types/button\" \"^3.7.3\"\n    \"@react-types/shared\" \"^3.18.1\"\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-aria/ssr@^3.6.0\":\n  version \"3.6.0\"\n  resolved \"https://registry.yarnpkg.com/@react-aria/ssr/-/ssr-3.6.0.tgz#e5d52bd1686ff229f68f806cf94ee29dd9f54fb7\"\n  integrity sha512-OFiYQdv+Yk7AO7IsQu/fAEPijbeTwrrEYvdNoJ3sblBBedD5j5fBTNWrUPNVlwC4XWWnWTCMaRIVsJujsFiWXg==\n  dependencies:\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-aria/switch@^3.5.1\":\n  version \"3.5.1\"\n  resolved \"https://registry.yarnpkg.com/@react-aria/switch/-/switch-3.5.1.tgz#e85e90ca735462c3aa4e1c5ed5b877332195d2f8\"\n  integrity sha512-upFtDIfNSVUOUOQYPqFzu2dxef4zVcxbCkaqUo+IRJnNix6AdtoEq+E7gwKVHnB79GQMWz6ZmippbID9Yrq73Q==\n  dependencies:\n    \"@react-aria/toggle\" \"^3.6.1\"\n    \"@react-stately/toggle\" \"^3.5.2\"\n    \"@react-types/switch\" \"^3.3.2\"\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-aria/table@^3.9.1\":\n  version \"3.9.1\"\n  resolved \"https://registry.yarnpkg.com/@react-aria/table/-/table-3.9.1.tgz#e30b9703c9dc4f6d7e0b3d2851a5092625db2f19\"\n  integrity sha512-utcqmQbH9M6jw6Stv8ugJdi8+F0vCXE7pQMVDow/mxDq0Cf5bAbBt29Yln2xO/6dyiBcT3LESgmD7AYlAfy2BQ==\n  dependencies:\n    \"@react-aria/focus\" \"^3.12.1\"\n    \"@react-aria/grid\" \"^3.7.1\"\n    \"@react-aria/i18n\" \"^3.7.2\"\n    \"@react-aria/interactions\" \"^3.15.1\"\n    \"@react-aria/live-announcer\" \"^3.3.0\"\n    \"@react-aria/selection\" \"^3.15.0\"\n    \"@react-aria/utils\" \"^3.17.0\"\n    \"@react-aria/visually-hidden\" \"^3.8.1\"\n    \"@react-stately/collections\" \"^3.8.0\"\n    \"@react-stately/table\" \"^3.9.1\"\n    \"@react-stately/virtualizer\" \"^3.5.2\"\n    \"@react-types/checkbox\" \"^3.4.4\"\n    \"@react-types/grid\" \"^3.1.8\"\n    \"@react-types/shared\" \"^3.18.1\"\n    \"@react-types/table\" \"^3.6.1\"\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-aria/tabs@^3.6.0\":\n  version \"3.6.0\"\n  resolved \"https://registry.yarnpkg.com/@react-aria/tabs/-/tabs-3.6.0.tgz#18bd02557acb3212cf34134a1343cacaad075a02\"\n  integrity sha512-W+X/lEvGjIGOeIx/tzkXjenglRPdv6d0JS4KCqrQET+Vg4jkAJWR2Ls0imz6CIF/QE5lbe3MiM8pyFpwg6vUNA==\n  dependencies:\n    \"@react-aria/focus\" \"^3.12.1\"\n    \"@react-aria/i18n\" \"^3.7.2\"\n    \"@react-aria/interactions\" \"^3.15.1\"\n    \"@react-aria/selection\" \"^3.15.0\"\n    \"@react-aria/utils\" \"^3.17.0\"\n    \"@react-stately/list\" \"^3.8.1\"\n    \"@react-stately/tabs\" \"^3.4.1\"\n    \"@react-types/shared\" \"^3.18.1\"\n    \"@react-types/tabs\" \"^3.3.0\"\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-aria/tag@^3.0.0\":\n  version \"3.0.0\"\n  resolved \"https://registry.yarnpkg.com/@react-aria/tag/-/tag-3.0.0.tgz#6bc61544d396a97bfcf77d1186d7821268d81aa1\"\n  integrity sha512-UuYqlysitwv1e1SV9YJqUMV7P7Gg5triEljyJ90b4rtETRhGa+Qh6cVa1P8F4h5nPTwzqey47jAp45i1FSsH4w==\n  dependencies:\n    \"@react-aria/gridlist\" \"^3.4.0\"\n    \"@react-aria/i18n\" \"^3.7.2\"\n    \"@react-aria/interactions\" \"^3.15.1\"\n    \"@react-aria/label\" \"^3.5.2\"\n    \"@react-aria/selection\" \"^3.15.0\"\n    \"@react-aria/utils\" \"^3.17.0\"\n    \"@react-stately/list\" \"^3.8.1\"\n    \"@react-types/button\" \"^3.7.3\"\n    \"@react-types/shared\" \"^3.18.1\"\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-aria/textfield@^3.9.2\":\n  version \"3.9.2\"\n  resolved \"https://registry.yarnpkg.com/@react-aria/textfield/-/textfield-3.9.2.tgz#d73c29906e38a988a193122ec2e17b1108366502\"\n  integrity sha512-wT68tErfMcBvJHyb+5skfs1OHZ8lESzIbrwCTuipM85BeleYIu25qGbKfOX9wMbC+4X775gg/JfmUQESJ6nD1A==\n  dependencies:\n    \"@react-aria/focus\" \"^3.12.1\"\n    \"@react-aria/label\" \"^3.5.2\"\n    \"@react-aria/utils\" \"^3.17.0\"\n    \"@react-types/shared\" \"^3.18.1\"\n    \"@react-types/textfield\" \"^3.7.2\"\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-aria/toggle@^3.6.1\":\n  version \"3.6.1\"\n  resolved \"https://registry.yarnpkg.com/@react-aria/toggle/-/toggle-3.6.1.tgz#9aa8c6b951ef4c9a407e410da0079e046d8b35f1\"\n  integrity sha512-4ml3HMjaZPUtRVb6MuuxuV8P/ydzrpldfP0R1hv3f56lo5gBVMh7ME72z49Z8Jf9hnxPkDBvnNi0AnfITtvfVw==\n  dependencies:\n    \"@react-aria/focus\" \"^3.12.1\"\n    \"@react-aria/interactions\" \"^3.15.1\"\n    \"@react-aria/utils\" \"^3.17.0\"\n    \"@react-stately/toggle\" \"^3.5.2\"\n    \"@react-types/checkbox\" \"^3.4.4\"\n    \"@react-types/shared\" \"^3.18.1\"\n    \"@react-types/switch\" \"^3.3.2\"\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-aria/tooltip@^3.5.1\":\n  version \"3.5.1\"\n  resolved \"https://registry.yarnpkg.com/@react-aria/tooltip/-/tooltip-3.5.1.tgz#fd6f157cc6f09986e986e38034ad5198e3514dc0\"\n  integrity sha512-H+eYX5H9cSKCiguH/0+QMq9LrZrvq8D0Zf6fHnA3dP4YkDjxFNuFyeiXGSTTcjEmwnCf9sJ9sObjv6b9n7c45w==\n  dependencies:\n    \"@react-aria/focus\" \"^3.12.1\"\n    \"@react-aria/interactions\" \"^3.15.1\"\n    \"@react-aria/utils\" \"^3.17.0\"\n    \"@react-stately/tooltip\" \"^3.4.1\"\n    \"@react-types/shared\" \"^3.18.1\"\n    \"@react-types/tooltip\" \"^3.4.1\"\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-aria/utils@^3.17.0\":\n  version \"3.17.0\"\n  resolved \"https://registry.yarnpkg.com/@react-aria/utils/-/utils-3.17.0.tgz#b462afad9a25505394a714a69b9f238c24dd15a7\"\n  integrity sha512-NEul0cQ6tQPdNSHYzNYD+EfFabeYNvDwEiHB82kK/Tsfhfm84SM+baben/at2N51K7iRrJPr5hC5fi4+P88lNg==\n  dependencies:\n    \"@react-aria/ssr\" \"^3.6.0\"\n    \"@react-stately/utils\" \"^3.6.0\"\n    \"@react-types/shared\" \"^3.18.1\"\n    \"@swc/helpers\" \"^0.4.14\"\n    clsx \"^1.1.1\"\n\n\"@react-aria/visually-hidden@^3.8.1\":\n  version \"3.8.1\"\n  resolved \"https://registry.yarnpkg.com/@react-aria/visually-hidden/-/visually-hidden-3.8.1.tgz#f035d3461671ae6f3af534e615df009ca9c08c4a\"\n  integrity sha512-aojoZXw5iaFDOgqmGuCyaTG9PFqfav5ABXX/W/0Q2YNj6Tb3i6++m2+8RMHlz2b6Dj+rXLiTxa00t7BSgJbUvA==\n  dependencies:\n    \"@react-aria/interactions\" \"^3.15.1\"\n    \"@react-aria/utils\" \"^3.17.0\"\n    \"@react-types/shared\" \"^3.18.1\"\n    \"@swc/helpers\" \"^0.4.14\"\n    clsx \"^1.1.1\"\n\n\"@react-native-community/cli@^1.2.1\":\n  version \"1.12.0\"\n  resolved \"https://registry.yarnpkg.com/@react-native-community/cli/-/cli-1.12.0.tgz#f4cbc2204af63a87d5736d2fa6a018c1fd5efd44\"\n  integrity sha512-GAs4JgVP8QkEYeZks/T7cCrBuwFJKxd9ksBLRdQ058uvLGkOEeS4g3y4GsVM/9C1zat5h6Z6QwU0h/hj7G3tzg==\n  dependencies:\n    chalk \"^1.1.1\"\n    commander \"^2.19.0\"\n    compression \"^1.7.1\"\n    connect \"^3.6.5\"\n    denodeify \"^1.2.1\"\n    envinfo \"^5.7.0\"\n    errorhandler \"^1.5.0\"\n    escape-string-regexp \"^1.0.5\"\n    execa \"^1.0.0\"\n    fs-extra \"^7.0.1\"\n    glob \"^7.1.1\"\n    graceful-fs \"^4.1.3\"\n    inquirer \"^3.0.6\"\n    lodash \"^4.17.5\"\n    metro \"^0.51.0\"\n    metro-config \"^0.51.0\"\n    metro-core \"^0.51.0\"\n    metro-memory-fs \"^0.51.0\"\n    metro-react-native-babel-transformer \"^0.51.0\"\n    mime \"^1.3.4\"\n    minimist \"^1.2.0\"\n    mkdirp \"^0.5.1\"\n    morgan \"^1.9.0\"\n    node-fetch \"^2.2.0\"\n    node-notifier \"^5.2.1\"\n    opn \"^3.0.2\"\n    plist \"^3.0.0\"\n    semver \"^5.0.3\"\n    serve-static \"^1.13.1\"\n    shell-quote \"1.6.1\"\n    slash \"^2.0.0\"\n    ws \"^1.1.0\"\n    xcode \"^2.0.0\"\n    xmldoc \"^0.4.0\"\n\n\"@react-native-community/eslint-config@^0.0.5\":\n  version \"0.0.5\"\n  resolved \"https://registry.yarnpkg.com/@react-native-community/eslint-config/-/eslint-config-0.0.5.tgz#584f6493258202a57efc22e7be66966e43832795\"\n  integrity sha512-jwO2tnKaTPTLX5XYXMHGEnFdf543SU7jz98/OF5mDH3b7lP+BOaCD+jVfqqHoDRkcqyPlYiR1CgwVGWpi0vMWg==\n  dependencies:\n    \"@typescript-eslint/eslint-plugin\" \"^1.5.0\"\n    \"@typescript-eslint/parser\" \"^1.5.0\"\n    babel-eslint \"10.0.1\"\n    eslint-plugin-eslint-comments \"^3.1.1\"\n    eslint-plugin-flowtype \"2.50.3\"\n    eslint-plugin-jest \"22.4.1\"\n    eslint-plugin-prettier \"2.6.2\"\n    eslint-plugin-react \"7.12.4\"\n    eslint-plugin-react-hooks \"^1.5.1\"\n    eslint-plugin-react-native \"3.6.0\"\n    prettier \"1.16.4\"\n\n\"@react-stately/calendar@^3.2.1\":\n  version \"3.2.1\"\n  resolved \"https://registry.yarnpkg.com/@react-stately/calendar/-/calendar-3.2.1.tgz#834b1bb5b0412dcbfc9cd1edea3cd19c99a62286\"\n  integrity sha512-3gUUQofRfMaFqg8qA0uEMuciDAtFCYhxYgYWwWOIBcpxHV0STMKrsWjpY5+rNtpB+wi+81jz55gfmBEo+4QU3w==\n  dependencies:\n    \"@internationalized/date\" \"^3.2.0\"\n    \"@react-stately/utils\" \"^3.6.0\"\n    \"@react-types/calendar\" \"^3.2.1\"\n    \"@react-types/datepicker\" \"^3.3.1\"\n    \"@react-types/shared\" \"^3.18.1\"\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-stately/checkbox@^3.4.2\":\n  version \"3.4.2\"\n  resolved \"https://registry.yarnpkg.com/@react-stately/checkbox/-/checkbox-3.4.2.tgz#9ccd80ee94b5d4c796e81ce8f5e55230b8102e31\"\n  integrity sha512-UG94lilDJEIFeRKnKw31nI1Vb1UOSroLAFHv4rB2tCvzLl3/9ULfHyii1hqFVS41juzFc7ONInNBT4yu5RAm5Q==\n  dependencies:\n    \"@react-stately/toggle\" \"^3.5.2\"\n    \"@react-stately/utils\" \"^3.6.0\"\n    \"@react-types/checkbox\" \"^3.4.4\"\n    \"@react-types/shared\" \"^3.18.1\"\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-stately/collections@^3.8.0\":\n  version \"3.8.0\"\n  resolved \"https://registry.yarnpkg.com/@react-stately/collections/-/collections-3.8.0.tgz#4b2b71866d12fd6b4f4aea495e2d4ecb2954d4e6\"\n  integrity sha512-NIRE8Gha0XZTnbvh9JRZM7oI/6uLf6ozjB7myja29IX7hDvsZxITe0RFXBapcujlpXLU2uufssJPKpiwJm3vZQ==\n  dependencies:\n    \"@react-types/shared\" \"^3.18.1\"\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-stately/combobox@^3.5.1\":\n  version \"3.5.1\"\n  resolved \"https://registry.yarnpkg.com/@react-stately/combobox/-/combobox-3.5.1.tgz#efde39fa2d5003d9030bef04705aefc84f00aff7\"\n  integrity sha512-E7eEggbVaueLEeSAOXzB2wUsjxgA3vpfTsghWdxYU6hWPB2ek6cSWfjAp7NPtf0b56n07kZRqa1lFx6kPJSCYw==\n  dependencies:\n    \"@react-stately/collections\" \"^3.8.0\"\n    \"@react-stately/list\" \"^3.8.1\"\n    \"@react-stately/menu\" \"^3.5.2\"\n    \"@react-stately/select\" \"^3.5.1\"\n    \"@react-stately/utils\" \"^3.6.0\"\n    \"@react-types/combobox\" \"^3.6.2\"\n    \"@react-types/shared\" \"^3.18.1\"\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-stately/datepicker@^3.4.1\":\n  version \"3.4.1\"\n  resolved \"https://registry.yarnpkg.com/@react-stately/datepicker/-/datepicker-3.4.1.tgz#3aaf3b439e542aa9bc0dc366a70f9232247865e6\"\n  integrity sha512-tubL36Pc7H3/agUk3epB9YzVDUgCNhE406cAMpkvFP4Ru4pUC45dKM9FoR4S43vJra7AYfY8lNkFZKkFVJBWVQ==\n  dependencies:\n    \"@internationalized/date\" \"^3.2.0\"\n    \"@internationalized/string\" \"^3.1.0\"\n    \"@react-stately/overlays\" \"^3.5.2\"\n    \"@react-stately/utils\" \"^3.6.0\"\n    \"@react-types/datepicker\" \"^3.3.1\"\n    \"@react-types/shared\" \"^3.18.1\"\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-stately/dnd@^3.2.1\":\n  version \"3.2.1\"\n  resolved \"https://registry.yarnpkg.com/@react-stately/dnd/-/dnd-3.2.1.tgz#3f738d4a1bbc9c2291c52ec480114b96e83ed76a\"\n  integrity sha512-n9XHGUOvDiSWiNJ/MtgvGz/nY3OX9rMJi1pjx6066m699qu1qYDQUgBI59HLCHBf1DhrYWz2qDf72rkxdbgZ6g==\n  dependencies:\n    \"@react-stately/selection\" \"^3.13.1\"\n    \"@react-types/shared\" \"^3.18.1\"\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-stately/grid@^3.6.1\":\n  version \"3.6.1\"\n  resolved \"https://registry.yarnpkg.com/@react-stately/grid/-/grid-3.6.1.tgz#968fde7289ec97e40171586b53cfc69e70d00718\"\n  integrity sha512-54B3OztU99ixMhcZsDdfeMemEcqibK9KgaOZVuPmewee35nXAOGTqNjjeN64Vz6ui8q3j86eIyjGChAxqU0KpA==\n  dependencies:\n    \"@react-stately/collections\" \"^3.8.0\"\n    \"@react-stately/selection\" \"^3.13.1\"\n    \"@react-types/grid\" \"^3.1.8\"\n    \"@react-types/shared\" \"^3.18.1\"\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-stately/layout@^3.12.1\":\n  version \"3.12.1\"\n  resolved \"https://registry.yarnpkg.com/@react-stately/layout/-/layout-3.12.1.tgz#ec4602fe723cab9652ce206aa6e6490b6f24c9b5\"\n  integrity sha512-WVAo9bb8+QWOkGC0HUkYOGjkXvUuZyOOtftc0blRnuGD30SAx1bLkGEFoa2Qm6K7Rhm7s9jNSSXdd6Tgm4Aqew==\n  dependencies:\n    \"@react-stately/collections\" \"^3.8.0\"\n    \"@react-stately/table\" \"^3.9.1\"\n    \"@react-stately/virtualizer\" \"^3.5.2\"\n    \"@react-types/grid\" \"^3.1.8\"\n    \"@react-types/shared\" \"^3.18.1\"\n    \"@react-types/table\" \"^3.6.1\"\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-stately/list@^3.8.1\":\n  version \"3.8.1\"\n  resolved \"https://registry.yarnpkg.com/@react-stately/list/-/list-3.8.1.tgz#19ed21dc2929e6a5a1e05a1858dbc7ee1f55f761\"\n  integrity sha512-QO2hKRnXaz2L1v/KYPmDKeD+PfEScp4KiJMFzU/T9vvjxIratSTg314B25Xj4LJq+JhyxlguylxBF9r/R6qUjQ==\n  dependencies:\n    \"@react-stately/collections\" \"^3.8.0\"\n    \"@react-stately/selection\" \"^3.13.1\"\n    \"@react-stately/utils\" \"^3.6.0\"\n    \"@react-types/shared\" \"^3.18.1\"\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-stately/menu@^3.5.2\":\n  version \"3.5.2\"\n  resolved \"https://registry.yarnpkg.com/@react-stately/menu/-/menu-3.5.2.tgz#c6201d2f928f4bf548b743b06f855dd8bef04daa\"\n  integrity sha512-BgGK3NleNGcByadG990ccdwr4oQiAN6meGf0gbIwrisikNdnL1XxgzCj+RMEooBtV+qakR+3KtVAnc97E5WiOQ==\n  dependencies:\n    \"@react-stately/overlays\" \"^3.5.2\"\n    \"@react-stately/utils\" \"^3.6.0\"\n    \"@react-types/menu\" \"^3.9.1\"\n    \"@react-types/shared\" \"^3.18.1\"\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-stately/numberfield@^3.4.2\":\n  version \"3.4.2\"\n  resolved \"https://registry.yarnpkg.com/@react-stately/numberfield/-/numberfield-3.4.2.tgz#05a2b94850cf3a1e703c6323068a11cdb15bf5ae\"\n  integrity sha512-FFe8J38//+Ck3aSTCtWteQY6tkDi2curLPxFwkWOxq71Vv+1Zvga5pTRoa6O1k1f0OXnDkVhmU1Njcl4JRMveA==\n  dependencies:\n    \"@internationalized/number\" \"^3.2.0\"\n    \"@react-stately/utils\" \"^3.6.0\"\n    \"@react-types/numberfield\" \"^3.4.2\"\n    \"@react-types/shared\" \"^3.18.1\"\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-stately/overlays@^3.5.2\":\n  version \"3.5.2\"\n  resolved \"https://registry.yarnpkg.com/@react-stately/overlays/-/overlays-3.5.2.tgz#b084789fa2e3bcf30348fe09e848acccf01957c9\"\n  integrity sha512-NEwkF/ukXzI/Ku+6j6MhhqdMc5xMgDnuR6RwFPsoPq6UoHw9/ojifxg/sDj5e1gPoegNZ2nM8G6VmnPUGabg/g==\n  dependencies:\n    \"@react-stately/utils\" \"^3.6.0\"\n    \"@react-types/overlays\" \"^3.7.2\"\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-stately/radio@^3.8.1\":\n  version \"3.8.1\"\n  resolved \"https://registry.yarnpkg.com/@react-stately/radio/-/radio-3.8.1.tgz#9594044754894cd6edfdb99db8d5fc26b7e9d32c\"\n  integrity sha512-yhz6/2y/hkDW7dzjhNsxrVZ8T7n2/Y9LyVRKDCL7ZYOkpoVQGe0ELbU04ATJPHNx6Icg/jAfN0Z/uMov/q4VBQ==\n  dependencies:\n    \"@react-stately/utils\" \"^3.6.0\"\n    \"@react-types/radio\" \"^3.4.2\"\n    \"@react-types/shared\" \"^3.18.1\"\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-stately/searchfield@^3.4.2\":\n  version \"3.4.2\"\n  resolved \"https://registry.yarnpkg.com/@react-stately/searchfield/-/searchfield-3.4.2.tgz#fd9b87504dc0c394eb4be5e5d59b2b3ecdd10e2f\"\n  integrity sha512-MGxjDY3lV4q3eFRiFbDhzicXWFdcAQ84klbFeWnSg/QLebQPyWD9X35e3Gc8bkNKof2MmwcrEgUIuHOReDRr2w==\n  dependencies:\n    \"@react-stately/utils\" \"^3.6.0\"\n    \"@react-types/searchfield\" \"^3.4.2\"\n    \"@react-types/shared\" \"^3.18.1\"\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-stately/select@^3.5.1\":\n  version \"3.5.1\"\n  resolved \"https://registry.yarnpkg.com/@react-stately/select/-/select-3.5.1.tgz#15b00012f20804e640b80fe3d275ab3ceb75ac02\"\n  integrity sha512-a6/Y3yRwinYR08Pq7Vj2HjOLtRgn5Ctmorx+UR7hBekvV/7scu9RqNI3i/yxyF+8y7KeymuwuMe1iohn4uAP+g==\n  dependencies:\n    \"@react-stately/collections\" \"^3.8.0\"\n    \"@react-stately/list\" \"^3.8.1\"\n    \"@react-stately/menu\" \"^3.5.2\"\n    \"@react-stately/selection\" \"^3.13.1\"\n    \"@react-stately/utils\" \"^3.6.0\"\n    \"@react-types/select\" \"^3.8.1\"\n    \"@react-types/shared\" \"^3.18.1\"\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-stately/selection@^3.13.1\":\n  version \"3.13.1\"\n  resolved \"https://registry.yarnpkg.com/@react-stately/selection/-/selection-3.13.1.tgz#17752ed81bf0f3246cd010818c460fa0d749d3a1\"\n  integrity sha512-0B+gT6hyei/pzUSmrNliphoztOPZJ7v/xVT9b4HViRTwuOUQlmwi5BQai84EbVtgQaQghc07sJ/Y/Ec8WXCRHA==\n  dependencies:\n    \"@react-stately/collections\" \"^3.8.0\"\n    \"@react-stately/utils\" \"^3.6.0\"\n    \"@react-types/shared\" \"^3.18.1\"\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-stately/slider@^3.3.2\":\n  version \"3.3.2\"\n  resolved \"https://registry.yarnpkg.com/@react-stately/slider/-/slider-3.3.2.tgz#9e933fe5078ed0272f398c1c11ad078b7945b53d\"\n  integrity sha512-UHyBdFR/3Wl1UZmwxWwJ1rb/OCYhY62zZaN7GZrVsnjQ0ng7mFqkb6O0/SXWjsfXnmRAMqCg4ARk82d1PRUfsg==\n  dependencies:\n    \"@react-aria/i18n\" \"^3.7.2\"\n    \"@react-aria/utils\" \"^3.17.0\"\n    \"@react-stately/utils\" \"^3.6.0\"\n    \"@react-types/shared\" \"^3.18.1\"\n    \"@react-types/slider\" \"^3.5.1\"\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-stately/table@^3.9.1\":\n  version \"3.9.1\"\n  resolved \"https://registry.yarnpkg.com/@react-stately/table/-/table-3.9.1.tgz#628d5099e76cf9e81926b752ec178376dec7bda1\"\n  integrity sha512-/YWpV88RH4ElCiwNm/Ys+A5nyWhy+BwEsGTVatbjwZFmHwHxv1FeMrTiYZ9vXR7V7SMCvA8Pd9OJ9NmRkd2klg==\n  dependencies:\n    \"@react-stately/collections\" \"^3.8.0\"\n    \"@react-stately/grid\" \"^3.6.1\"\n    \"@react-stately/selection\" \"^3.13.1\"\n    \"@react-types/grid\" \"^3.1.8\"\n    \"@react-types/shared\" \"^3.18.1\"\n    \"@react-types/table\" \"^3.6.1\"\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-stately/tabs@^3.4.1\":\n  version \"3.4.1\"\n  resolved \"https://registry.yarnpkg.com/@react-stately/tabs/-/tabs-3.4.1.tgz#f1d74551808f4d0a33f1c8d0e918bfbb5feeea03\"\n  integrity sha512-8MTerdCSaZEc0qghINqIe/L/ja1Lbo5v5aFwJS014VjhYc2uFyJlTn+/kyccClBlmXpARqmiC7C3ASJ33385Fg==\n  dependencies:\n    \"@react-stately/list\" \"^3.8.1\"\n    \"@react-stately/utils\" \"^3.6.0\"\n    \"@react-types/shared\" \"^3.18.1\"\n    \"@react-types/tabs\" \"^3.3.0\"\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-stately/toggle@^3.5.2\":\n  version \"3.5.2\"\n  resolved \"https://registry.yarnpkg.com/@react-stately/toggle/-/toggle-3.5.2.tgz#580f4254e3c7c2c4d230409a36042813d9c0ab70\"\n  integrity sha512-2fDecu06job9NKdSIryU4AE+BoTGZqfinUsAvYTaaQN95Apq8IShEDFkY+gSnU09wRX26Ux+JJi5pYwg+HX1tw==\n  dependencies:\n    \"@react-stately/utils\" \"^3.6.0\"\n    \"@react-types/checkbox\" \"^3.4.4\"\n    \"@react-types/shared\" \"^3.18.1\"\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-stately/tooltip@^3.4.1\":\n  version \"3.4.1\"\n  resolved \"https://registry.yarnpkg.com/@react-stately/tooltip/-/tooltip-3.4.1.tgz#cee27bfcabfa54e37e7627f71ac2e3eb2da8495d\"\n  integrity sha512-ZHqyN/mqciKtUfQ/bwdPPPAKwVFeFfyMLkHSA34NrXr9/swj/ONBQtdRUzbu56rlajMUSw5R60hmyJOGNXZb3A==\n  dependencies:\n    \"@react-stately/overlays\" \"^3.5.2\"\n    \"@react-stately/utils\" \"^3.6.0\"\n    \"@react-types/tooltip\" \"^3.4.1\"\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-stately/tree@^3.6.1\":\n  version \"3.6.1\"\n  resolved \"https://registry.yarnpkg.com/@react-stately/tree/-/tree-3.6.1.tgz#191daac8dfd52a3603e2e138cab26fd2bfd493c3\"\n  integrity sha512-KfaUoc0/PeT9W25e/7jG1VGeTO54KDKULveuUqLFJEJeP8M8vCgT5Og4YdJkPfu//dlL8OZu1y6ZpdyA9+LBsg==\n  dependencies:\n    \"@react-stately/collections\" \"^3.8.0\"\n    \"@react-stately/selection\" \"^3.13.1\"\n    \"@react-stately/utils\" \"^3.6.0\"\n    \"@react-types/shared\" \"^3.18.1\"\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-stately/utils@^3.6.0\":\n  version \"3.6.0\"\n  resolved \"https://registry.yarnpkg.com/@react-stately/utils/-/utils-3.6.0.tgz#f273e7fcb348254347d2e88c8f0c45571060c207\"\n  integrity sha512-rptF7iUWDrquaYvBAS4QQhOBQyLBncDeHF03WnHXAxnuPJXNcr9cXJtjJPGCs036ZB8Q2hc9BGG5wNyMkF5v+Q==\n  dependencies:\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-stately/virtualizer@^3.5.2\":\n  version \"3.5.2\"\n  resolved \"https://registry.yarnpkg.com/@react-stately/virtualizer/-/virtualizer-3.5.2.tgz#f646a114662c18d34afbf3b1cba81636afadb231\"\n  integrity sha512-OmG9lPcbfnyuPhbSDVcDXDfPU0rc2E/V8VLGGd/yMOxSy4S90nWDSEoR8qAN6g9rY6xoLjPJ671nyxOu41EtyA==\n  dependencies:\n    \"@react-aria/utils\" \"^3.17.0\"\n    \"@react-types/shared\" \"^3.18.1\"\n    \"@swc/helpers\" \"^0.4.14\"\n\n\"@react-types/breadcrumbs@^3.5.2\":\n  version \"3.5.2\"\n  resolved \"https://registry.yarnpkg.com/@react-types/breadcrumbs/-/breadcrumbs-3.5.2.tgz#1717f3ffbad2d5da457195cb50c9d9c0a5b6be8f\"\n  integrity sha512-pKtahBLmcpSYhfNBv2j/k0e701U7xwDCf24U/JOyio9i7aAYCZ+RUcKc1kK3tRsVNj41seLv7Q9ElC48nXsfwg==\n  dependencies:\n    \"@react-types/link\" \"^3.4.2\"\n    \"@react-types/shared\" \"^3.18.1\"\n\n\"@react-types/button@^3.7.3\":\n  version \"3.7.3\"\n  resolved \"https://registry.yarnpkg.com/@react-types/button/-/button-3.7.3.tgz#00ad45ff0a304a6f6ef29a5d6adda73cea10942f\"\n  integrity sha512-Fz1t/kYinHDunmct3tADD2h3UDBPZUfRE+zCzYiymz0g+v/zYHTAqnkWToTF9ptf8HIB5L2Z2VFYpeUHFfpWzg==\n  dependencies:\n    \"@react-types/shared\" \"^3.18.1\"\n\n\"@react-types/calendar@^3.2.1\":\n  version \"3.2.1\"\n  resolved \"https://registry.yarnpkg.com/@react-types/calendar/-/calendar-3.2.1.tgz#f01bff7c373b19a18d96414b0680903ca508ae85\"\n  integrity sha512-lp+1KG7YxKCPvXuuyB1XyyhynV8g19JamojfGUaQGqsM1kxOr8x87Ikwh5zunHuOS6U4s/tO0C2LMA9iGxdBxQ==\n  dependencies:\n    \"@internationalized/date\" \"^3.2.0\"\n    \"@react-types/shared\" \"^3.18.1\"\n\n\"@react-types/checkbox@^3.4.4\":\n  version \"3.4.4\"\n  resolved \"https://registry.yarnpkg.com/@react-types/checkbox/-/checkbox-3.4.4.tgz#cf55e9fd0cabef6e4408d03b308c754e1add3bc1\"\n  integrity sha512-rJNhbW4R9HTvdbF2oTZmqGiZ/WVP3/XsU4gae7tfdhSYjG+5T5h9zau1vRhz++zwKn57wfcyNn6a83GDhhgkVw==\n  dependencies:\n    \"@react-types/shared\" \"^3.18.1\"\n\n\"@react-types/combobox@^3.6.2\":\n  version \"3.6.2\"\n  resolved \"https://registry.yarnpkg.com/@react-types/combobox/-/combobox-3.6.2.tgz#887cc2bce355773cb9dc5613c88264d008c92384\"\n  integrity sha512-qitu/W3Z3/ihyqocy+8n4HZKRXF5JTMHl1ug3rKps5yCNnVdkWwjPFPM6w180c9QjquThNY3o947LZ1v59qJ4A==\n  dependencies:\n    \"@react-types/shared\" \"^3.18.1\"\n\n\"@react-types/datepicker@^3.3.1\":\n  version \"3.3.1\"\n  resolved \"https://registry.yarnpkg.com/@react-types/datepicker/-/datepicker-3.3.1.tgz#035451586577077a65b89ee739bd1e29a777a28b\"\n  integrity sha512-kVZ9j3PovXjTIeQrq4YiURS48Rsp5Uc81/HumZyrTWtYtYSKAU0U0ifiTuPeJ044tfpi3wGkitJ5wtt8j5imKQ==\n  dependencies:\n    \"@internationalized/date\" \"^3.2.0\"\n    \"@react-types/overlays\" \"^3.7.2\"\n    \"@react-types/shared\" \"^3.18.1\"\n\n\"@react-types/dialog@^3.5.2\":\n  version \"3.5.2\"\n  resolved \"https://registry.yarnpkg.com/@react-types/dialog/-/dialog-3.5.2.tgz#e0dd2b459ebfeae649a93cd69f4fd12b8b043c71\"\n  integrity sha512-eus/TivlVqA8JNunMGv9w0Ey4Fmao6BRA3/2r6WTcbXTRw+nLXMmNO2j4CzXAhtrT5j187SADP5OXZjWuEzLFw==\n  dependencies:\n    \"@react-types/overlays\" \"^3.7.2\"\n    \"@react-types/shared\" \"^3.18.1\"\n\n\"@react-types/grid@^3.1.8\":\n  version \"3.1.8\"\n  resolved \"https://registry.yarnpkg.com/@react-types/grid/-/grid-3.1.8.tgz#2d8cf3ccbb2bba161917b9e242f920fed5f34026\"\n  integrity sha512-NKk4pDbW2QXJOYnDSAYhta81CGwXOc/9tVw2WFs+1wacvxeKmh1Q+n36uAFcIdQOvVRqeGTJaYiqLFmF3fC3tA==\n  dependencies:\n    \"@react-types/shared\" \"^3.18.1\"\n\n\"@react-types/label@^3.7.4\":\n  version \"3.7.4\"\n  resolved \"https://registry.yarnpkg.com/@react-types/label/-/label-3.7.4.tgz#db7ce5cc82785b11ed4c80308b2ec40768fec6e0\"\n  integrity sha512-SfTqPRI39GE3GFD5ZGYEeX9jXQrNqDeaaI36PJhnbgGVFz96oVVkhy9t9c2bMHcbhLLENYIHMzxrvVqXS07e7A==\n  dependencies:\n    \"@react-types/shared\" \"^3.18.1\"\n\n\"@react-types/link@^3.4.2\":\n  version \"3.4.2\"\n  resolved \"https://registry.yarnpkg.com/@react-types/link/-/link-3.4.2.tgz#85fd550284bf1270dcbdc7c31965ea4ea0b6dfe2\"\n  integrity sha512-EpHfphxt7QjdHbbzV9vfamDP3Xug2jLdM37Z8uu8fIvkJYbAI+r5+MMXTc4g0OMyqWU+/Ik7M+GbA+c6K9Papw==\n  dependencies:\n    \"@react-aria/interactions\" \"^3.15.1\"\n    \"@react-types/shared\" \"^3.18.1\"\n\n\"@react-types/listbox@^3.4.2\":\n  version \"3.4.2\"\n  resolved \"https://registry.yarnpkg.com/@react-types/listbox/-/listbox-3.4.2.tgz#13a217ca2c31e4e5c0ef46f00f770bf0d1b24726\"\n  integrity sha512-qg980T+tl15pqgfuK8V6z+vsvsIrJEEPxcupQXP3T1O0LxWxJDakZHF0lV9qwfyB9XlnVSMZfkjDiZp9Wgf8QQ==\n  dependencies:\n    \"@react-types/shared\" \"^3.18.1\"\n\n\"@react-types/menu@^3.9.1\":\n  version \"3.9.1\"\n  resolved \"https://registry.yarnpkg.com/@react-types/menu/-/menu-3.9.1.tgz#13b9c66a16ae0b5bff752295fe94f4f60c1dbd83\"\n  integrity sha512-VOhp/gDrFqbVV5kiqFoJCba9mxyQH2eCdR26nK3Fn92K8AAGqKt1C0naKCgdAmGp2+qTveR94Iw0iyDfMt60og==\n  dependencies:\n    \"@react-types/overlays\" \"^3.7.2\"\n    \"@react-types/shared\" \"^3.18.1\"\n\n\"@react-types/meter@^3.3.2\":\n  version \"3.3.2\"\n  resolved \"https://registry.yarnpkg.com/@react-types/meter/-/meter-3.3.2.tgz#f316eb4b47112137b0bbfc9e82b0f2814587c297\"\n  integrity sha512-o21Zz+3LNjvBueMap+q2otGp5t2Xeb/lIMM4Y+v8j5XO+bLcHaAjdQB/TgKRe8iYFm3IqwpVtV9A38IWDtpLRQ==\n  dependencies:\n    \"@react-types/progress\" \"^3.4.1\"\n    \"@react-types/shared\" \"^3.18.1\"\n\n\"@react-types/numberfield@^3.4.2\":\n  version \"3.4.2\"\n  resolved \"https://registry.yarnpkg.com/@react-types/numberfield/-/numberfield-3.4.2.tgz#6773e93b611131d45a4e5c4cac561945dc5ac7f3\"\n  integrity sha512-SGzuuFf5wCSRPvpV+bnykiXSIt8pkpBBVp8tlygB66pQSBV7VLdUvWGohaayPSM+3Z+WkU+osgzYtGq5wh+C3Q==\n  dependencies:\n    \"@react-types/shared\" \"^3.18.1\"\n\n\"@react-types/overlays@^3.7.2\":\n  version \"3.7.2\"\n  resolved \"https://registry.yarnpkg.com/@react-types/overlays/-/overlays-3.7.2.tgz#40881c6c6e05330e0ea8960646ca2371378b95c0\"\n  integrity sha512-I/mm/xjJVJX2VC4UwNwzhsgVKh8eTHjE2NT6Ek70t/AMR/AT8i3m+eLYb4LEoRFFuZ0ctoJDLKkSCAP7nTkT0A==\n  dependencies:\n    \"@react-types/shared\" \"^3.18.1\"\n\n\"@react-types/progress@^3.4.1\":\n  version \"3.4.1\"\n  resolved \"https://registry.yarnpkg.com/@react-types/progress/-/progress-3.4.1.tgz#3b45df4780b70573c27b316d557ce71b546e32bf\"\n  integrity sha512-Y6cTvvJjbfFBeB7Zb3PizhhO3+YLWXpIP8opto15RWu11ktgZVMUgsnlsJgE3dFeoZ7UHwXdCYf8JOzBw5VPHA==\n  dependencies:\n    \"@react-types/shared\" \"^3.18.1\"\n\n\"@react-types/radio@^3.4.2\":\n  version \"3.4.2\"\n  resolved \"https://registry.yarnpkg.com/@react-types/radio/-/radio-3.4.2.tgz#4a6a1f7ff11b71b6b69d13d28fd74de9c903df8c\"\n  integrity sha512-SE6sjZjZbyuJMJNNdlhoutVr+QFRt1Vz7DZj4UaOswW5SD/Xb+xFdW8i6ETKdRN17am/5SC89ltWe0R3q0pVkA==\n  dependencies:\n    \"@react-types/shared\" \"^3.18.1\"\n\n\"@react-types/searchfield@^3.4.2\":\n  version \"3.4.2\"\n  resolved \"https://registry.yarnpkg.com/@react-types/searchfield/-/searchfield-3.4.2.tgz#360ac97f52af5e2bb8e1a8a13e611fe9efc371fa\"\n  integrity sha512-HQm++hIXVfEbjbRey6hYV/5hLEO6gtwt4Mft3u5I5BiT7yoQqQAD/8z9S8aUXDUU9KTrAKfL1DwrFQSkOsCWJA==\n  dependencies:\n    \"@react-types/shared\" \"^3.18.1\"\n    \"@react-types/textfield\" \"^3.7.2\"\n\n\"@react-types/select@^3.8.1\":\n  version \"3.8.1\"\n  resolved \"https://registry.yarnpkg.com/@react-types/select/-/select-3.8.1.tgz#77d8ff3be70a5c342860469d71c8c23bbc1a877f\"\n  integrity sha512-ByVKKwgpE3d08jI+Ibuom/qphlBiDKpVMwXgFgVZRAN2YvVrsix8arSo7kmXtzekz91qqDBqtt7DBCfT0E1WKw==\n  dependencies:\n    \"@react-types/shared\" \"^3.18.1\"\n\n\"@react-types/shared@^3.18.1\":\n  version \"3.18.1\"\n  resolved \"https://registry.yarnpkg.com/@react-types/shared/-/shared-3.18.1.tgz#45bac7a1a433916d16535ea583d86a2b4c72ff8c\"\n  integrity sha512-OpTYRFS607Ctfd6Tmhyk6t6cbFyDhO5K+etU35X50pMzpypo1b7vF0mkngEeTc0Xwl0e749ONZNPZskMyu5k8w==\n\n\"@react-types/slider@^3.5.1\":\n  version \"3.5.1\"\n  resolved \"https://registry.yarnpkg.com/@react-types/slider/-/slider-3.5.1.tgz#bae46025de7d02a84918b3aca0e3ffd647e4fdf2\"\n  integrity sha512-8+AMNexx7q7DqfAtQKC5tgnZdG/tIwG2tcEbFCfAQA09Djrt/xiMNz+mc7SsV1PWoWwVuSDFH9QqKPodOrJHDg==\n  dependencies:\n    \"@react-types/shared\" \"^3.18.1\"\n\n\"@react-types/switch@^3.3.2\":\n  version \"3.3.2\"\n  resolved \"https://registry.yarnpkg.com/@react-types/switch/-/switch-3.3.2.tgz#af54e2dd8b599df3214360f593827c9033478ce4\"\n  integrity sha512-L0XF4J43Q7HCAJXqseAk6RMteK6k1jQ0zrG05r6lSCkxaS9fGUlgLTCiFUsf07x0ADH1Xyc7PwpfJjyEr5A4tA==\n  dependencies:\n    \"@react-types/checkbox\" \"^3.4.4\"\n    \"@react-types/shared\" \"^3.18.1\"\n\n\"@react-types/table@^3.6.1\":\n  version \"3.6.1\"\n  resolved \"https://registry.yarnpkg.com/@react-types/table/-/table-3.6.1.tgz#5c320f66a376dabc923cbddda3a19e9d4fb51c80\"\n  integrity sha512-DeiiBZPZUO2kH40P10Bn9Y4SvDobUlH7Flgx2afL3tJirKMkS1SNDU/B+X9B5Duyd1D0okf1+PLVmi0NBqM4vg==\n  dependencies:\n    \"@react-types/grid\" \"^3.1.8\"\n    \"@react-types/shared\" \"^3.18.1\"\n\n\"@react-types/tabs@^3.3.0\":\n  version \"3.3.0\"\n  resolved \"https://registry.yarnpkg.com/@react-types/tabs/-/tabs-3.3.0.tgz#d8230bac82fcd1dca414fbc1c17b769cef9c5bd8\"\n  integrity sha512-uXDVXBBppb+9S8bhxF7LZhgptrF5ll25SX8/jrpnXOR0jpihq6K3fkSe5M/OBnGsybuyVGN7+Np5v7UUYrM5SQ==\n  dependencies:\n    \"@react-types/shared\" \"^3.18.1\"\n\n\"@react-types/textfield@^3.7.2\":\n  version \"3.7.2\"\n  resolved \"https://registry.yarnpkg.com/@react-types/textfield/-/textfield-3.7.2.tgz#f23341e80b319b68f2298dd429ed2280ada0bbe1\"\n  integrity sha512-TsZTf1+4Ve9QHm6mbXr26uLOA4QtZPgyjYgYclL2nHoOl67algeQIFxIVfdlNIKFFMOw5BtC6Mer0I3KUWtbOQ==\n  dependencies:\n    \"@react-types/shared\" \"^3.18.1\"\n\n\"@react-types/tooltip@^3.4.1\":\n  version \"3.4.1\"\n  resolved \"https://registry.yarnpkg.com/@react-types/tooltip/-/tooltip-3.4.1.tgz#131b0a6e28a1865b8977ce108cb7b069d29e5fd8\"\n  integrity sha512-j1QbEX4RZ/uBQa9z1lBZ9bNUa20ji/UjwrIfTNyQm3wbezSZE0PWTQAkfxZdy3PQTBnVGOHSqxAP6iOS6NqOOQ==\n  dependencies:\n    \"@react-types/overlays\" \"^3.7.2\"\n    \"@react-types/shared\" \"^3.18.1\"\n\n\"@rollup/plugin-babel@^5.1.0\":\n  version \"5.2.1\"\n  resolved \"https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-5.2.1.tgz#20fc8f8864dc0eaa1c5578408459606808f72924\"\n  integrity sha512-Jd7oqFR2dzZJ3NWANDyBjwTtX/lYbZpVcmkHrfQcpvawHs9E4c0nYk5U2mfZ6I/DZcIvy506KZJi54XK/jxH7A==\n  dependencies:\n    \"@babel/helper-module-imports\" \"^7.10.4\"\n    \"@rollup/pluginutils\" \"^3.1.0\"\n\n\"@rollup/plugin-commonjs@^11.0.0\":\n  version \"11.0.2\"\n  resolved \"https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-11.0.2.tgz#837cc6950752327cb90177b608f0928a4e60b582\"\n  integrity sha512-MPYGZr0qdbV5zZj8/2AuomVpnRVXRU5XKXb3HVniwRoRCreGlf5kOE081isNWeiLIi6IYkwTX9zE0/c7V8g81g==\n  dependencies:\n    \"@rollup/pluginutils\" \"^3.0.0\"\n    estree-walker \"^1.0.1\"\n    is-reference \"^1.1.2\"\n    magic-string \"^0.25.2\"\n    resolve \"^1.11.0\"\n\n\"@rollup/plugin-json@^4.0.0\":\n  version \"4.0.2\"\n  resolved \"https://registry.yarnpkg.com/@rollup/plugin-json/-/plugin-json-4.0.2.tgz#482185ee36ac7dd21c346e2dbcc22ffed0c6f2d6\"\n  integrity sha512-t4zJMc98BdH42mBuzjhQA7dKh0t4vMJlUka6Fz0c+iO5IVnWaEMiYBy1uBj9ruHZzXBW23IPDGL9oCzBkQ9Udg==\n  dependencies:\n    \"@rollup/pluginutils\" \"^3.0.4\"\n\n\"@rollup/plugin-node-resolve@^9.0.0\":\n  version \"9.0.0\"\n  resolved \"https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-9.0.0.tgz#39bd0034ce9126b39c1699695f440b4b7d2b62e6\"\n  integrity sha512-gPz+utFHLRrd41WMP13Jq5mqqzHL3OXrfj3/MkSyB6UBIcuNt9j60GCbarzMzdf1VHFpOxfQh/ez7wyadLMqkg==\n  dependencies:\n    \"@rollup/pluginutils\" \"^3.1.0\"\n    \"@types/resolve\" \"1.17.1\"\n    builtin-modules \"^3.1.0\"\n    deepmerge \"^4.2.2\"\n    is-module \"^1.0.0\"\n    resolve \"^1.17.0\"\n\n\"@rollup/plugin-replace@^2.2.1\":\n  version \"2.3.1\"\n  resolved \"https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-2.3.1.tgz#16fb0563628f9e6c6ef9e05d48d3608916d466f5\"\n  integrity sha512-qDcXj2VOa5+j0iudjb+LiwZHvBRRgWbHPhRmo1qde2KItTjuxDVQO21rp9/jOlzKR5YO0EsgRQoyox7fnL7y/A==\n  dependencies:\n    \"@rollup/pluginutils\" \"^3.0.4\"\n    magic-string \"^0.25.5\"\n\n\"@rollup/pluginutils@^3.0.0\", \"@rollup/pluginutils@^3.0.4\":\n  version \"3.0.8\"\n  resolved \"https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.0.8.tgz#4e94d128d94b90699e517ef045422960d18c8fde\"\n  integrity sha512-rYGeAc4sxcZ+kPG/Tw4/fwJODC3IXHYDH4qusdN/b6aLw5LPUbzpecYbEJh4sVQGPFJxd2dBU4kc1H3oy9/bnw==\n  dependencies:\n    estree-walker \"^1.0.1\"\n\n\"@rollup/pluginutils@^3.0.9\", \"@rollup/pluginutils@^3.1.0\":\n  version \"3.1.0\"\n  resolved \"https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b\"\n  integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==\n  dependencies:\n    \"@types/estree\" \"0.0.39\"\n    estree-walker \"^1.0.1\"\n    picomatch \"^2.2.2\"\n\n\"@rushstack/eslint-patch@^1.1.3\":\n  version \"1.3.0\"\n  resolved \"https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.3.0.tgz#f5635b36fc0dad96ef1e542a302cd914230188c0\"\n  integrity sha512-IthPJsJR85GhOkp3Hvp8zFOPK5ynKn6STyHa/WZpioK7E1aYDiBzpqQPrngc14DszIUkIrdd3k9Iu0XSzlP/1w==\n\n\"@sinonjs/commons@^1.7.0\":\n  version \"1.8.1\"\n  resolved \"https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.1.tgz#e7df00f98a203324f6dc7cc606cad9d4a8ab2217\"\n  integrity sha512-892K+kWUUi3cl+LlqEWIDrhvLgdL79tECi8JZUyq6IviKy/DNhuzCRlbHUjxK89f4ypPMMaFnFuR9Ie6DoIMsw==\n  dependencies:\n    type-detect \"4.0.8\"\n\n\"@swc/helpers@0.5.1\":\n  version \"0.5.1\"\n  resolved \"https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.1.tgz#e9031491aa3f26bfcc974a67f48bd456c8a5357a\"\n  integrity sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==\n  dependencies:\n    tslib \"^2.4.0\"\n\n\"@swc/helpers@^0.4.14\":\n  version \"0.4.14\"\n  resolved \"https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.4.14.tgz#1352ac6d95e3617ccb7c1498ff019654f1e12a74\"\n  integrity sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==\n  dependencies:\n    tslib \"^2.4.0\"\n\n\"@tailwindcss/forms@^0.5.3\":\n  version \"0.5.3\"\n  resolved \"https://registry.yarnpkg.com/@tailwindcss/forms/-/forms-0.5.3.tgz#e4d7989686cbcaf416c53f1523df5225332a86e7\"\n  integrity sha512-y5mb86JUoiUgBjY/o6FJSFZSEttfb3Q5gllE4xoKjAAD+vBrnIhE4dViwUuow3va8mpH4s9jyUbUbrRGoRdc2Q==\n  dependencies:\n    mini-svg-data-uri \"^1.2.3\"\n\n\"@testing-library/dom@^9.0.0\":\n  version \"9.3.0\"\n  resolved \"https://registry.yarnpkg.com/@testing-library/dom/-/dom-9.3.0.tgz#ed8ce10aa5e05eb6eaf0635b5b8975d889f66075\"\n  integrity sha512-Dffe68pGwI6WlLRYR2I0piIkyole9cSBH5jGQKCGMRpHW5RHCqAUaqc2Kv0tUyd4dU4DLPKhJIjyKOnjv4tuUw==\n  dependencies:\n    \"@babel/code-frame\" \"^7.10.4\"\n    \"@babel/runtime\" \"^7.12.5\"\n    \"@types/aria-query\" \"^5.0.1\"\n    aria-query \"^5.0.0\"\n    chalk \"^4.1.0\"\n    dom-accessibility-api \"^0.5.9\"\n    lz-string \"^1.5.0\"\n    pretty-format \"^27.0.2\"\n\n\"@testing-library/react@^14.0.0\":\n  version \"14.0.0\"\n  resolved \"https://registry.yarnpkg.com/@testing-library/react/-/react-14.0.0.tgz#59030392a6792450b9ab8e67aea5f3cc18d6347c\"\n  integrity sha512-S04gSNJbYE30TlIMLTzv6QCTzt9AqIF5y6s6SzVFILNcNvbV/jU96GeiTPillGQo+Ny64M/5PV7klNYYgv5Dfg==\n  dependencies:\n    \"@babel/runtime\" \"^7.12.5\"\n    \"@testing-library/dom\" \"^9.0.0\"\n    \"@types/react-dom\" \"^18.0.0\"\n\n\"@types/aria-query@^5.0.1\":\n  version \"5.0.1\"\n  resolved \"https://registry.yarnpkg.com/@types/aria-query/-/aria-query-5.0.1.tgz#3286741fb8f1e1580ac28784add4c7a1d49bdfbc\"\n  integrity sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q==\n\n\"@types/async-retry@1.2.1\":\n  version \"1.2.1\"\n  resolved \"https://registry.yarnpkg.com/@types/async-retry/-/async-retry-1.2.1.tgz#fa9ac165907a8ee78f4924f4e393b656c65b5bb4\"\n  integrity sha512-yMQ6CVgICWtyFNBqJT3zqOc+TnqqEPLo4nKJNPFwcialiylil38Ie6q1ENeFTjvaLOkVim9K5LisHgAKJWidGQ==\n\n\"@types/babel__core@^7.1.7\":\n  version \"7.1.9\"\n  resolved \"https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.9.tgz#77e59d438522a6fb898fa43dc3455c6e72f3963d\"\n  integrity sha512-sY2RsIJ5rpER1u3/aQ8OFSI7qGIy8o1NEEbgb2UaJcvOtXOMpd39ko723NBpjQFg9SIX7TXtjejZVGeIMLhoOw==\n  dependencies:\n    \"@babel/parser\" \"^7.1.0\"\n    \"@babel/types\" \"^7.0.0\"\n    \"@types/babel__generator\" \"*\"\n    \"@types/babel__template\" \"*\"\n    \"@types/babel__traverse\" \"*\"\n\n\"@types/babel__generator@*\":\n  version \"7.6.0\"\n  resolved \"https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.0.tgz#f1ec1c104d1bb463556ecb724018ab788d0c172a\"\n  integrity sha512-c1mZUu4up5cp9KROs/QAw0gTeHrw/x7m52LcnvMxxOZ03DmLwPV0MlGmlgzV3cnSdjhJOZsj7E7FHeioai+egw==\n  dependencies:\n    \"@babel/types\" \"^7.0.0\"\n\n\"@types/babel__template@*\":\n  version \"7.0.2\"\n  resolved \"https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.0.2.tgz#4ff63d6b52eddac1de7b975a5223ed32ecea9307\"\n  integrity sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg==\n  dependencies:\n    \"@babel/parser\" \"^7.1.0\"\n    \"@babel/types\" \"^7.0.0\"\n\n\"@types/babel__traverse@*\", \"@types/babel__traverse@^7.0.6\":\n  version \"7.0.8\"\n  resolved \"https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.8.tgz#479a4ee3e291a403a1096106013ec22cf9b64012\"\n  integrity sha512-yGeB2dHEdvxjP0y4UbRtQaSkXJ9649fYCmIdRoul5kfAoGCwxuCbMhag0k3RPfnuh9kPGm8x89btcfDEXdVWGw==\n  dependencies:\n    \"@babel/types\" \"^7.3.0\"\n\n\"@types/benchmark@^2.1.2\":\n  version \"2.1.2\"\n  resolved \"https://registry.yarnpkg.com/@types/benchmark/-/benchmark-2.1.2.tgz#b7838408c93dc08ceb4e6e13147dbfbe6a151f82\"\n  integrity sha512-EDKtLYNMKrig22jEvhXq8TBFyFgVNSPmDF2b9UzJ7+eylPqdZVo17PCUMkn1jP6/1A/0u78VqYC6VrX6b8pDWA==\n\n\"@types/body-scroll-lock@^2.6.1\":\n  version \"2.6.2\"\n  resolved \"https://registry.yarnpkg.com/@types/body-scroll-lock/-/body-scroll-lock-2.6.2.tgz#ce56d17e1bf8383c08a074733c4e9e536a59ae61\"\n  integrity sha512-PhoQPbwPYspXqf7lkwtF7aJzAwL88t+9E/e0b2X84tlHpU8ZuS9UNnLtkT0XhyZJYHpET5qRfIdZ0HBIxuc7HQ==\n\n\"@types/buble@^0.20.0\":\n  version \"0.20.1\"\n  resolved \"https://registry.yarnpkg.com/@types/buble/-/buble-0.20.1.tgz#cba009801fd417b0d2eb8fa6824b537842e05803\"\n  integrity sha512-itmN3lGSTvXg9IImY5j290H+n0B3PpZST6AgEfJJDXfaMx2cdJJZro3/Ay+bZZdIAa25Z5rnoo9rHiPCbANZoQ==\n  dependencies:\n    magic-string \"^0.25.0\"\n\n\"@types/classnames@^2.3.1\":\n  version \"2.3.1\"\n  resolved \"https://registry.yarnpkg.com/@types/classnames/-/classnames-2.3.1.tgz#3c2467aa0f1a93f1f021e3b9bcf938bd5dfdc0dd\"\n  integrity sha512-zeOWb0JGBoVmlQoznvqXbE0tEC/HONsnoUNH19Hc96NFsTAwTXbTqb8FMYkru1F/iqp7a18Ws3nWJvtA1sHD1A==\n  dependencies:\n    classnames \"*\"\n\n\"@types/color-name@^1.1.1\":\n  version \"1.1.1\"\n  resolved \"https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0\"\n  integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==\n\n\"@types/eslint-visitor-keys@^1.0.0\":\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d\"\n  integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==\n\n\"@types/estree@*\":\n  version \"0.0.40\"\n  resolved \"https://registry.yarnpkg.com/@types/estree/-/estree-0.0.40.tgz#0e6cb9b9bbd098031fa19e4b4e8131bc70e5de13\"\n  integrity sha512-p3KZgMto/JyxosKGmnLDJ/dG5wf+qTRMUjHJcspC2oQKa4jP7mz+tv0ND56lLBu3ojHlhzY33Ol+khLyNmilkA==\n\n\"@types/estree@0.0.39\":\n  version \"0.0.39\"\n  resolved \"https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f\"\n  integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==\n\n\"@types/graceful-fs@^4.1.2\":\n  version \"4.1.3\"\n  resolved \"https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.3.tgz#039af35fe26bec35003e8d86d2ee9c586354348f\"\n  integrity sha512-AiHRaEB50LQg0pZmm659vNBb9f4SJ0qrAnteuzhSeAUcJKxoYgEnprg/83kppCnc2zvtCKbdZry1a5pVY3lOTQ==\n  dependencies:\n    \"@types/node\" \"*\"\n\n\"@types/hast@^2.0.0\":\n  version \"2.3.4\"\n  resolved \"https://registry.yarnpkg.com/@types/hast/-/hast-2.3.4.tgz#8aa5ef92c117d20d974a82bdfb6a648b08c0bafc\"\n  integrity sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==\n  dependencies:\n    \"@types/unist\" \"*\"\n\n\"@types/hoist-non-react-statics@^3.3.1\":\n  version \"3.3.1\"\n  resolved \"https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f\"\n  integrity sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==\n  dependencies:\n    \"@types/react\" \"*\"\n    hoist-non-react-statics \"^3.3.0\"\n\n\"@types/istanbul-lib-coverage@*\", \"@types/istanbul-lib-coverage@^2.0.0\":\n  version \"2.0.1\"\n  resolved \"https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#42995b446db9a48a11a07ec083499a860e9138ff\"\n  integrity sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg==\n\n\"@types/istanbul-lib-coverage@^2.0.1\":\n  version \"2.0.3\"\n  resolved \"https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762\"\n  integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==\n\n\"@types/istanbul-lib-report@*\":\n  version \"1.1.1\"\n  resolved \"https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz#e5471e7fa33c61358dd38426189c037a58433b8c\"\n  integrity sha512-3BUTyMzbZa2DtDI2BkERNC6jJw2Mr2Y0oGI7mRxYNBPxppbtEK1F66u3bKwU2g+wxwWI7PAoRpJnOY1grJqzHg==\n  dependencies:\n    \"@types/istanbul-lib-coverage\" \"*\"\n\n\"@types/istanbul-reports@^1.1.1\":\n  version \"1.1.1\"\n  resolved \"https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz#7a8cbf6a406f36c8add871625b278eaf0b0d255a\"\n  integrity sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA==\n  dependencies:\n    \"@types/istanbul-lib-coverage\" \"*\"\n    \"@types/istanbul-lib-report\" \"*\"\n\n\"@types/jest@^25.0.0\", \"@types/jest@^25.2.1\":\n  version \"25.2.3\"\n  resolved \"https://registry.yarnpkg.com/@types/jest/-/jest-25.2.3.tgz#33d27e4c4716caae4eced355097a47ad363fdcaf\"\n  integrity sha512-JXc1nK/tXHiDhV55dvfzqtmP4S3sy3T3ouV2tkViZgxY/zeUkcpQcQPGRlgF4KmWzWW5oiWYSZwtCB+2RsE4Fw==\n  dependencies:\n    jest-diff \"^25.2.1\"\n    pretty-format \"^25.2.1\"\n\n\"@types/json-schema@^7.0.3\":\n  version \"7.0.3\"\n  resolved \"https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.3.tgz#bdfd69d61e464dcc81b25159c270d75a73c1a636\"\n  integrity sha512-Il2DtDVRGDcqjDtE+rF8iqg1CArehSK84HZJCT7AMITlyXRBpuPhqGLDQMowraqqu1coEaimg4ZOqggt6L6L+A==\n\n\"@types/json5@^0.0.29\":\n  version \"0.0.29\"\n  resolved \"https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee\"\n  integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==\n\n\"@types/lodash@^4.14.119\":\n  version \"4.14.149\"\n  resolved \"https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.149.tgz#1342d63d948c6062838fbf961012f74d4e638440\"\n  integrity sha512-ijGqzZt/b7BfzcK9vTrS6MFljQRPn5BFWOx8oE0GYxribu6uV+aA9zZuXI1zc/etK9E8nrgdoF2+LgUw7+9tJQ==\n\n\"@types/lodash@^4.14.175\":\n  version \"4.14.195\"\n  resolved \"https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.195.tgz#bafc975b252eb6cea78882ce8a7b6bf22a6de632\"\n  integrity sha512-Hwx9EUgdwf2GLarOjQp5ZH8ZmblzcbTBC2wtQWNKARBSxM9ezRIAUpeDTgoQRAFB0+8CNWXVA9+MaSOzOF3nPg==\n\n\"@types/lru-cache@4.1.1\":\n  version \"4.1.1\"\n  resolved \"https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-4.1.1.tgz#b2d87a5e3df8d4b18ca426c5105cd701c2306d40\"\n  integrity sha512-8mNEUG6diOrI6pMqOHrHPDBB1JsrpedeMK9AWGzVCQ7StRRribiT9BRvUmF8aUws9iBbVlgVekOT5Sgzc1MTKw==\n\n\"@types/mdast@^3.0.0\", \"@types/mdast@^3.0.3\":\n  version \"3.0.11\"\n  resolved \"https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.11.tgz#dc130f7e7d9306124286f6d6cee40cf4d14a3dc0\"\n  integrity sha512-Y/uImid8aAwrEA24/1tcRZwpxX3pIFTSilcNDKSPn+Y2iDywSEachzRuvgAYYLR3wpGXAsMbv5lvKLDZLeYPAw==\n  dependencies:\n    \"@types/unist\" \"*\"\n\n\"@types/mdx-js__react@^1.5.1\":\n  version \"1.5.5\"\n  resolved \"https://registry.yarnpkg.com/@types/mdx-js__react/-/mdx-js__react-1.5.5.tgz#fa6daa1a28336d77b6cf071aacc7e497600de9ee\"\n  integrity sha512-k8pnaP6JXVlQh18HgL5X6sYFNC/qZnzO7R2+HsmwrwUd+JnnsU0d9lyyT0RQrHg1anxDU36S98TI/fsGtmYqqg==\n  dependencies:\n    \"@types/react\" \"*\"\n\n\"@types/node-fetch@^2.5.7\":\n  version \"2.6.4\"\n  resolved \"https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.4.tgz#1bc3a26de814f6bf466b25aeb1473fa1afe6a660\"\n  integrity sha512-1ZX9fcN4Rvkvgv4E6PAY5WXUFWFcRWxZa3EW83UjycOB9ljJCedb2CupIP4RZMEwF/M3eTcCihbBRgwtGbg5Rg==\n  dependencies:\n    \"@types/node\" \"*\"\n    form-data \"^3.0.0\"\n\n\"@types/node@*\":\n  version \"12.12.16\"\n  resolved \"https://registry.yarnpkg.com/@types/node/-/node-12.12.16.tgz#3ebcbd7bf978fa4c5120fee8be57083271a8b3ac\"\n  integrity sha512-vRuMyoOr5yfNf8QWxXegOjeyjpWJxFePzHzmBOIzDIzo+rSqF94RW0PkS6y4T2+VjAWLXHWrfbIJY3E3aS7lUw==\n\n\"@types/node@10.12.18\":\n  version \"10.12.18\"\n  resolved \"https://registry.yarnpkg.com/@types/node/-/node-10.12.18.tgz#1d3ca764718915584fcd9f6344621b7672665c67\"\n  integrity sha512-fh+pAqt4xRzPfqA6eh3Z2y6fyZavRIumvjhaCL753+TVkGKGhpPeyrJG2JftD0T9q4GF00KjefsQ+PQNDdWQaQ==\n\n\"@types/node@^12.7.1\":\n  version \"12.12.62\"\n  resolved \"https://registry.yarnpkg.com/@types/node/-/node-12.12.62.tgz#733923d73669188d35950253dd18a21570085d2b\"\n  integrity sha512-qAfo81CsD7yQIM9mVyh6B/U47li5g7cfpVQEDMfQeF8pSZVwzbhwU3crc0qG4DmpsebpJPR49AKOExQyJ05Cpg==\n\n\"@types/node@^13.13.0\":\n  version \"13.13.52\"\n  resolved \"https://registry.yarnpkg.com/@types/node/-/node-13.13.52.tgz#03c13be70b9031baaed79481c0c0cfb0045e53f7\"\n  integrity sha512-s3nugnZumCC//n4moGGe6tkNMyYEdaDBitVjwPxXmR5lnMG5dHePinH2EdxkG3Rh1ghFHHixAG4NJhpJW1rthQ==\n\n\"@types/normalize-package-data@^2.4.0\":\n  version \"2.4.0\"\n  resolved \"https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e\"\n  integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==\n\n\"@types/parse-json@^4.0.0\":\n  version \"4.0.0\"\n  resolved \"https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0\"\n  integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==\n\n\"@types/parse5@^5.0.0\":\n  version \"5.0.3\"\n  resolved \"https://registry.yarnpkg.com/@types/parse5/-/parse5-5.0.3.tgz#e7b5aebbac150f8b5fdd4a46e7f0bd8e65e19109\"\n  integrity sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==\n\n\"@types/prettier@^1.19.0\":\n  version \"1.19.1\"\n  resolved \"https://registry.yarnpkg.com/@types/prettier/-/prettier-1.19.1.tgz#33509849f8e679e4add158959fdb086440e9553f\"\n  integrity sha512-5qOlnZscTn4xxM5MeGXAMOsIOIKIbh9e85zJWfBRVPlRMEVawzoPhINYbRGkBZCI8LxvBe7tJCdWiarA99OZfQ==\n\n\"@types/prop-types@*\":\n  version \"15.7.5\"\n  resolved \"https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf\"\n  integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==\n\n\"@types/react-dom@^18.0.0\", \"@types/react-dom@^18.2.4\":\n  version \"18.2.4\"\n  resolved \"https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.4.tgz#13f25bfbf4e404d26f62ac6e406591451acba9e0\"\n  integrity sha512-G2mHoTMTL4yoydITgOGwWdWMVd8sNgyEP85xVmMKAPUBwQWm9wBPQUmvbeF4V3WBY1P7mmL4BkjQ0SqUpf1snw==\n  dependencies:\n    \"@types/react\" \"*\"\n\n\"@types/react-highlight@^0.12.2\":\n  version \"0.12.5\"\n  resolved \"https://registry.yarnpkg.com/@types/react-highlight/-/react-highlight-0.12.5.tgz#b2af7ca998247b0bc7859b674552df97b366c3b1\"\n  integrity sha512-P8+mTxltxDdQ+99l+pjn40clziSbNrZy5d5zmvG+j3jKzokAhCoCZlIRmmnFgETTYubuqwKjvXSlvesBZcTfvQ==\n  dependencies:\n    \"@types/react\" \"*\"\n\n\"@types/react-native@^0.63.32\":\n  version \"0.63.32\"\n  resolved \"https://registry.yarnpkg.com/@types/react-native/-/react-native-0.63.32.tgz#2f6785947c9e1bb634bffd509007c7e73af823b6\"\n  integrity sha512-q9JyN8eoCwLcPPyF7ldzWXAo1SOFIsh97b2WOZJVraozkvpTDcA9SZMdHxNhjP9M9KdKY0GWKB2B0pjew8VT3w==\n  dependencies:\n    \"@types/react\" \"*\"\n\n\"@types/react@*\", \"@types/react@^18.2.7\":\n  version \"18.2.7\"\n  resolved \"https://registry.yarnpkg.com/@types/react/-/react-18.2.7.tgz#dfb4518042a3117a045b8c222316f83414a783b3\"\n  integrity sha512-ojrXpSH2XFCmHm7Jy3q44nXDyN54+EYKP2lBhJ2bqfyPj6cIUW/FZW/Csdia34NQgq7KYcAlHi5184m4X88+yw==\n  dependencies:\n    \"@types/prop-types\" \"*\"\n    \"@types/scheduler\" \"*\"\n    csstype \"^3.0.2\"\n\n\"@types/resolve@1.17.1\":\n  version \"1.17.1\"\n  resolved \"https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6\"\n  integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==\n  dependencies:\n    \"@types/node\" \"*\"\n\n\"@types/scheduler@*\":\n  version \"0.16.3\"\n  resolved \"https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.3.tgz#cef09e3ec9af1d63d2a6cc5b383a737e24e6dcf5\"\n  integrity sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==\n\n\"@types/stack-utils@^1.0.1\":\n  version \"1.0.1\"\n  resolved \"https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e\"\n  integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==\n\n\"@types/unist@*\", \"@types/unist@^2.0.0\", \"@types/unist@^2.0.2\", \"@types/unist@^2.0.3\":\n  version \"2.0.6\"\n  resolved \"https://registry.yarnpkg.com/@types/unist/-/unist-2.0.6.tgz#250a7b16c3b91f672a24552ec64678eeb1d3a08d\"\n  integrity sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==\n\n\"@types/warning@^3.0.0\":\n  version \"3.0.0\"\n  resolved \"https://registry.yarnpkg.com/@types/warning/-/warning-3.0.0.tgz#0d2501268ad8f9962b740d387c4654f5f8e23e52\"\n  integrity sha1-DSUBJorY+ZYrdA04fEZU9fjiPlI=\n\n\"@types/yargs-parser@*\":\n  version \"13.1.0\"\n  resolved \"https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-13.1.0.tgz#c563aa192f39350a1d18da36c5a8da382bbd8228\"\n  integrity sha512-gCubfBUZ6KxzoibJ+SCUc/57Ms1jz5NjHe4+dI2krNmU5zCPAphyLJYyTOg06ueIyfj+SaCUqmzun7ImlxDcKg==\n\n\"@types/yargs@^15.0.0\":\n  version \"15.0.7\"\n  resolved \"https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.7.tgz#dad50a7a234a35ef9460737a56024287a3de1d2b\"\n  integrity sha512-Gf4u3EjaPNcC9cTu4/j2oN14nSVhr8PQ+BvBcBQHAhDZfl0bVIiLgvnRXv/dn58XhTm9UXvBpvJpDlwV65QxOA==\n  dependencies:\n    \"@types/yargs-parser\" \"*\"\n\n\"@typescript-eslint/eslint-plugin@^1.5.0\":\n  version \"1.13.0\"\n  resolved \"https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-1.13.0.tgz#22fed9b16ddfeb402fd7bcde56307820f6ebc49f\"\n  integrity sha512-WQHCozMnuNADiqMtsNzp96FNox5sOVpU8Xt4meaT4em8lOG1SrOv92/mUbEHQVh90sldKSfcOc/I0FOb/14G1g==\n  dependencies:\n    \"@typescript-eslint/experimental-utils\" \"1.13.0\"\n    eslint-utils \"^1.3.1\"\n    functional-red-black-tree \"^1.0.1\"\n    regexpp \"^2.0.1\"\n    tsutils \"^3.7.0\"\n\n\"@typescript-eslint/eslint-plugin@^2.12.0\":\n  version \"2.19.0\"\n  resolved \"https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.19.0.tgz#bf743448a4633e4b52bee0c40148ba072ab3adbd\"\n  integrity sha512-u7IcQ9qwsB6U806LupZmINRnQjC+RJyv36sV/ugaFWMHTbFm/hlLTRx3gGYJgHisxcGSTnf+I/fPDieRMhPSQQ==\n  dependencies:\n    \"@typescript-eslint/experimental-utils\" \"2.19.0\"\n    eslint-utils \"^1.4.3\"\n    functional-red-black-tree \"^1.0.1\"\n    regexpp \"^3.0.0\"\n    tsutils \"^3.17.1\"\n\n\"@typescript-eslint/experimental-utils@1.13.0\":\n  version \"1.13.0\"\n  resolved \"https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-1.13.0.tgz#b08c60d780c0067de2fb44b04b432f540138301e\"\n  integrity sha512-zmpS6SyqG4ZF64ffaJ6uah6tWWWgZ8m+c54XXgwFtUv0jNz8aJAVx8chMCvnk7yl6xwn8d+d96+tWp7fXzTuDg==\n  dependencies:\n    \"@types/json-schema\" \"^7.0.3\"\n    \"@typescript-eslint/typescript-estree\" \"1.13.0\"\n    eslint-scope \"^4.0.0\"\n\n\"@typescript-eslint/experimental-utils@2.19.0\":\n  version \"2.19.0\"\n  resolved \"https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.19.0.tgz#d5ca732f22c009e515ba09fcceb5f2127d841568\"\n  integrity sha512-zwpg6zEOPbhB3+GaQfufzlMUOO6GXCNZq6skk+b2ZkZAIoBhVoanWK255BS1g5x9bMwHpLhX0Rpn5Fc3NdCZdg==\n  dependencies:\n    \"@types/json-schema\" \"^7.0.3\"\n    \"@typescript-eslint/typescript-estree\" \"2.19.0\"\n    eslint-scope \"^5.0.0\"\n\n\"@typescript-eslint/parser@^1.5.0\":\n  version \"1.13.0\"\n  resolved \"https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-1.13.0.tgz#61ac7811ea52791c47dc9fd4dd4a184fae9ac355\"\n  integrity sha512-ITMBs52PCPgLb2nGPoeT4iU3HdQZHcPaZVw+7CsFagRJHUhyeTgorEwHXhFf3e7Evzi8oujKNpHc8TONth8AdQ==\n  dependencies:\n    \"@types/eslint-visitor-keys\" \"^1.0.0\"\n    \"@typescript-eslint/experimental-utils\" \"1.13.0\"\n    \"@typescript-eslint/typescript-estree\" \"1.13.0\"\n    eslint-visitor-keys \"^1.0.0\"\n\n\"@typescript-eslint/parser@^2.12.0\":\n  version \"2.19.0\"\n  resolved \"https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.19.0.tgz#912160d9425395d09857dcd5382352bc98be11ae\"\n  integrity sha512-s0jZoxAWjHnuidbbN7aA+BFVXn4TCcxEVGPV8lWMxZglSs3NRnFFAlL+aIENNmzB2/1jUJuySi6GiM6uACPmpg==\n  dependencies:\n    \"@types/eslint-visitor-keys\" \"^1.0.0\"\n    \"@typescript-eslint/experimental-utils\" \"2.19.0\"\n    \"@typescript-eslint/typescript-estree\" \"2.19.0\"\n    eslint-visitor-keys \"^1.1.0\"\n\n\"@typescript-eslint/parser@^5.42.0\":\n  version \"5.59.7\"\n  resolved \"https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.59.7.tgz#02682554d7c1028b89aa44a48bf598db33048caa\"\n  integrity sha512-VhpsIEuq/8i5SF+mPg9jSdIwgMBBp0z9XqjiEay+81PYLJuroN+ET1hM5IhkiYMJd9MkTz8iJLt7aaGAgzWUbQ==\n  dependencies:\n    \"@typescript-eslint/scope-manager\" \"5.59.7\"\n    \"@typescript-eslint/types\" \"5.59.7\"\n    \"@typescript-eslint/typescript-estree\" \"5.59.7\"\n    debug \"^4.3.4\"\n\n\"@typescript-eslint/scope-manager@5.59.7\":\n  version \"5.59.7\"\n  resolved \"https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.59.7.tgz#0243f41f9066f3339d2f06d7f72d6c16a16769e2\"\n  integrity sha512-FL6hkYWK9zBGdxT2wWEd2W8ocXMu3K94i3gvMrjXpx+koFYdYV7KprKfirpgY34vTGzEPPuKoERpP8kD5h7vZQ==\n  dependencies:\n    \"@typescript-eslint/types\" \"5.59.7\"\n    \"@typescript-eslint/visitor-keys\" \"5.59.7\"\n\n\"@typescript-eslint/types@5.59.7\":\n  version \"5.59.7\"\n  resolved \"https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.59.7.tgz#6f4857203fceee91d0034ccc30512d2939000742\"\n  integrity sha512-UnVS2MRRg6p7xOSATscWkKjlf/NDKuqo5TdbWck6rIRZbmKpVNTLALzNvcjIfHBE7736kZOFc/4Z3VcZwuOM/A==\n\n\"@typescript-eslint/typescript-estree@1.13.0\":\n  version \"1.13.0\"\n  resolved \"https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-1.13.0.tgz#8140f17d0f60c03619798f1d628b8434913dc32e\"\n  integrity sha512-b5rCmd2e6DCC6tCTN9GSUAuxdYwCM/k/2wdjHGrIRGPSJotWMCe/dGpi66u42bhuh8q3QBzqM4TMA1GUUCJvdw==\n  dependencies:\n    lodash.unescape \"4.0.1\"\n    semver \"5.5.0\"\n\n\"@typescript-eslint/typescript-estree@2.19.0\":\n  version \"2.19.0\"\n  resolved \"https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.19.0.tgz#6bd7310b9827e04756fe712909f26956aac4b196\"\n  integrity sha512-n6/Xa37k0jQdwpUszffi19AlNbVCR0sdvCs3DmSKMD7wBttKY31lhD2fug5kMD91B2qW4mQldaTEc1PEzvGu8w==\n  dependencies:\n    debug \"^4.1.1\"\n    eslint-visitor-keys \"^1.1.0\"\n    glob \"^7.1.6\"\n    is-glob \"^4.0.1\"\n    lodash \"^4.17.15\"\n    semver \"^6.3.0\"\n    tsutils \"^3.17.1\"\n\n\"@typescript-eslint/typescript-estree@5.59.7\":\n  version \"5.59.7\"\n  resolved \"https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.7.tgz#b887acbd4b58e654829c94860dbff4ac55c5cff8\"\n  integrity sha512-4A1NtZ1I3wMN2UGDkU9HMBL+TIQfbrh4uS0WDMMpf3xMRursDbqEf1ahh6vAAe3mObt8k3ZATnezwG4pdtWuUQ==\n  dependencies:\n    \"@typescript-eslint/types\" \"5.59.7\"\n    \"@typescript-eslint/visitor-keys\" \"5.59.7\"\n    debug \"^4.3.4\"\n    globby \"^11.1.0\"\n    is-glob \"^4.0.3\"\n    semver \"^7.3.7\"\n    tsutils \"^3.21.0\"\n\n\"@typescript-eslint/visitor-keys@5.59.7\":\n  version \"5.59.7\"\n  resolved \"https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.7.tgz#09c36eaf268086b4fbb5eb9dc5199391b6485fc5\"\n  integrity sha512-tyN+X2jvMslUszIiYbF0ZleP+RqQsFVpGrKI6e0Eet1w8WmhsAtmzaqm8oM8WJQ1ysLwhnsK/4hYHJjOgJVfQQ==\n  dependencies:\n    \"@typescript-eslint/types\" \"5.59.7\"\n    eslint-visitor-keys \"^3.3.0\"\n\n\"@vercel/analytics@^1.0.1\":\n  version \"1.0.1\"\n  resolved \"https://registry.yarnpkg.com/@vercel/analytics/-/analytics-1.0.1.tgz#38308a626c91866cb00a249c08bf65251e9b9d81\"\n  integrity sha512-Ux0c9qUfkcPqng3vrR0GTrlQdqNJ2JREn/2ydrVuKwM3RtMfF2mWX31Ijqo1opSjNAq6rK76PwtANw6kl6TAow==\n\n\"@zeit/dns-cached-resolve@2.1.0\":\n  version \"2.1.0\"\n  resolved \"https://registry.yarnpkg.com/@zeit/dns-cached-resolve/-/dns-cached-resolve-2.1.0.tgz#78583010df1683fdb7b05949b75593c9a8641bc1\"\n  integrity sha512-KD2zyRZEBNs9PJ3/ob7zx0CvR4wM0oV4G5s5gFfPwmM74GpFbUN2pAAivP2AXnUrJ14Nkh8NumNKOzOyc4LbFQ==\n  dependencies:\n    \"@types/async-retry\" \"1.2.1\"\n    \"@types/lru-cache\" \"4.1.1\"\n    \"@types/node\" \"10.12.18\"\n    async-retry \"1.2.3\"\n    lru-cache \"5.1.1\"\n\n\"@zeit/fetch-cached-dns@1.2.0\":\n  version \"1.2.0\"\n  resolved \"https://registry.yarnpkg.com/@zeit/fetch-cached-dns/-/fetch-cached-dns-1.2.0.tgz#2529bea33732df1044f72465b8f7760af7b53d46\"\n  integrity sha512-fEKOrDQJy3CewywYVwe2mHsv3H1rITmkfB68h2TiVOz6QWWuXU0C5xBIFG9Ov59sioEQdlk5829PXwJYyx6X0A==\n  dependencies:\n    \"@zeit/dns-cached-resolve\" \"2.1.0\"\n\n\"@zeit/fetch-retry@^5.0.0\":\n  version \"5.0.1\"\n  resolved \"https://registry.yarnpkg.com/@zeit/fetch-retry/-/fetch-retry-5.0.1.tgz#5d9d486d5c523fda6622050d6e054a0b5562ce60\"\n  integrity sha512-pypvAakip4gLrLDlYbyLDEbRk01YU2mFuJ87/BofZ/JqtCZf7NsIzbFgiqqaI93RxM9ZZIAQ9h373betrdR/YQ==\n  dependencies:\n    async-retry \"^1.3.1\"\n    debug \"^3.1.0\"\n\n\"@zeit/fetch@^6.0.0\":\n  version \"6.0.0\"\n  resolved \"https://registry.yarnpkg.com/@zeit/fetch/-/fetch-6.0.0.tgz#34825fee789a411965d90d7572ad81b5e97cddf8\"\n  integrity sha512-Sf7voV8Dx3bT245WSy/Pn2q2nJCVoDIxGKP8FGiBrfMAQaPtDP9nDO6rTV43EUDdilJ363YTYb/zLfrzj1lc5g==\n  dependencies:\n    \"@types/async-retry\" \"1.2.1\"\n    \"@zeit/fetch-cached-dns\" \"1.2.0\"\n    \"@zeit/fetch-retry\" \"^5.0.0\"\n    agentkeepalive \"3.4.1\"\n    debug \"3.1.0\"\n\nabab@^2.0.0:\n  version \"2.0.3\"\n  resolved \"https://registry.yarnpkg.com/abab/-/abab-2.0.3.tgz#623e2075e02eb2d3f2475e49f99c91846467907a\"\n  integrity sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg==\n\nabbrev@1:\n  version \"1.1.1\"\n  resolved \"https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8\"\n  integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==\n\nabsolute-path@^0.0.0:\n  version \"0.0.0\"\n  resolved \"https://registry.yarnpkg.com/absolute-path/-/absolute-path-0.0.0.tgz#a78762fbdadfb5297be99b15d35a785b2f095bf7\"\n  integrity sha1-p4di+9rftSl76ZsV01p4Wy8JW/c=\n\naccepts@~1.3.5, accepts@~1.3.7:\n  version \"1.3.7\"\n  resolved \"https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd\"\n  integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==\n  dependencies:\n    mime-types \"~2.1.24\"\n    negotiator \"0.6.2\"\n\naccepts@~1.3.8:\n  version \"1.3.8\"\n  resolved \"https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e\"\n  integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==\n  dependencies:\n    mime-types \"~2.1.34\"\n    negotiator \"0.6.3\"\n\nacorn-globals@^4.3.2:\n  version \"4.3.4\"\n  resolved \"https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7\"\n  integrity sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==\n  dependencies:\n    acorn \"^6.0.1\"\n    acorn-walk \"^6.0.1\"\n\nacorn-jsx@^5.1.0:\n  version \"5.1.0\"\n  resolved \"https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.1.0.tgz#294adb71b57398b0680015f0a38c563ee1db5384\"\n  integrity sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw==\n\nacorn-jsx@^5.3.1:\n  version \"5.3.2\"\n  resolved \"https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937\"\n  integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==\n\nacorn-walk@^6.0.1:\n  version \"6.2.0\"\n  resolved \"https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c\"\n  integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==\n\nacorn@^6.0.1:\n  version \"6.4.0\"\n  resolved \"https://registry.yarnpkg.com/acorn/-/acorn-6.4.0.tgz#b659d2ffbafa24baf5db1cdbb2c94a983ecd2784\"\n  integrity sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw==\n\nacorn@^7.1.0:\n  version \"7.1.0\"\n  resolved \"https://registry.yarnpkg.com/acorn/-/acorn-7.1.0.tgz#949d36f2c292535da602283586c2477c57eb2d6c\"\n  integrity sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==\n\nacorn@^7.4.0:\n  version \"7.4.1\"\n  resolved \"https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa\"\n  integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==\n\nagentkeepalive@3.4.1:\n  version \"3.4.1\"\n  resolved \"https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-3.4.1.tgz#aa95aebc3a749bca5ed53e3880a09f5235b48f0c\"\n  integrity sha512-MPIwsZU9PP9kOrZpyu2042kYA8Fdt/AedQYkYXucHgF9QoD9dXVp0ypuGnHXSR0hTstBxdt85Xkh4JolYfK5wg==\n  dependencies:\n    humanize-ms \"^1.2.1\"\n\nagentkeepalive@^2.2.0:\n  version \"2.2.0\"\n  resolved \"https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-2.2.0.tgz#c5d1bd4b129008f1163f236f86e5faea2026e2ef\"\n  integrity sha512-TnB6ziK363p7lR8QpeLC8aMr8EGYBKZTpgzQLfqTs3bR0Oo5VbKdwKf8h0dSzsYrB7lSCgfJnMZKqShvlq5Oyg==\n\naggregate-error@^3.0.0:\n  version \"3.0.1\"\n  resolved \"https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.0.1.tgz#db2fe7246e536f40d9b5442a39e117d7dd6a24e0\"\n  integrity sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA==\n  dependencies:\n    clean-stack \"^2.0.0\"\n    indent-string \"^4.0.0\"\n\najv@^6.10.0, ajv@^6.10.2:\n  version \"6.10.2\"\n  resolved \"https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52\"\n  integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==\n  dependencies:\n    fast-deep-equal \"^2.0.1\"\n    fast-json-stable-stringify \"^2.0.0\"\n    json-schema-traverse \"^0.4.1\"\n    uri-js \"^4.2.2\"\n\najv@^6.12.3:\n  version \"6.12.5\"\n  resolved \"https://registry.yarnpkg.com/ajv/-/ajv-6.12.5.tgz#19b0e8bae8f476e5ba666300387775fb1a00a4da\"\n  integrity sha512-lRF8RORchjpKG50/WFf8xmg7sgCLFiYNNnqdKflk63whMQcWR5ngGjiSXkL9bjxy6B2npOK2HSMN49jEBMSkag==\n  dependencies:\n    fast-deep-equal \"^3.1.1\"\n    fast-json-stable-stringify \"^2.0.0\"\n    json-schema-traverse \"^0.4.1\"\n    uri-js \"^4.2.2\"\n\najv@^6.12.4:\n  version \"6.12.6\"\n  resolved \"https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4\"\n  integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==\n  dependencies:\n    fast-deep-equal \"^3.1.1\"\n    fast-json-stable-stringify \"^2.0.0\"\n    json-schema-traverse \"^0.4.1\"\n    uri-js \"^4.2.2\"\n\najv@^8.0.1:\n  version \"8.12.0\"\n  resolved \"https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1\"\n  integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==\n  dependencies:\n    fast-deep-equal \"^3.1.1\"\n    json-schema-traverse \"^1.0.0\"\n    require-from-string \"^2.0.2\"\n    uri-js \"^4.2.2\"\n\nalgoliasearch@3.35.1, algoliasearch@^3.24.5:\n  version \"3.35.1\"\n  resolved \"https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-3.35.1.tgz#297d15f534a3507cab2f5dfb996019cac7568f0c\"\n  integrity sha512-K4yKVhaHkXfJ/xcUnil04xiSrB8B8yHZoFEhWNpXg23eiCnqvTZw1tn/SqvdsANlYHLJlKl0qi3I/Q2Sqo7LwQ==\n  dependencies:\n    agentkeepalive \"^2.2.0\"\n    debug \"^2.6.9\"\n    envify \"^4.0.0\"\n    es6-promise \"^4.1.0\"\n    events \"^1.1.0\"\n    foreach \"^2.0.5\"\n    global \"^4.3.2\"\n    inherits \"^2.0.1\"\n    isarray \"^2.0.1\"\n    load-script \"^1.0.0\"\n    object-keys \"^1.0.11\"\n    querystring-es3 \"^0.2.1\"\n    reduce \"^1.0.1\"\n    semver \"^5.1.0\"\n    tunnel-agent \"^0.6.0\"\n\nalgoliasearch@^4.0.0:\n  version \"4.17.1\"\n  resolved \"https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-4.17.1.tgz#23926448b815bbf9a921bc6077abc1ce8d3224b2\"\n  integrity sha512-4GDQ1RhP2qUR3x8PevFRbEdqZqIARNViZYjgTJmA1T7wRNtFA3W4Aqc/RsODqa1J8IO/QDla5x4tWuUS8NV8wA==\n  dependencies:\n    \"@algolia/cache-browser-local-storage\" \"4.17.1\"\n    \"@algolia/cache-common\" \"4.17.1\"\n    \"@algolia/cache-in-memory\" \"4.17.1\"\n    \"@algolia/client-account\" \"4.17.1\"\n    \"@algolia/client-analytics\" \"4.17.1\"\n    \"@algolia/client-common\" \"4.17.1\"\n    \"@algolia/client-personalization\" \"4.17.1\"\n    \"@algolia/client-search\" \"4.17.1\"\n    \"@algolia/logger-common\" \"4.17.1\"\n    \"@algolia/logger-console\" \"4.17.1\"\n    \"@algolia/requester-browser-xhr\" \"4.17.1\"\n    \"@algolia/requester-common\" \"4.17.1\"\n    \"@algolia/requester-node-http\" \"4.17.1\"\n    \"@algolia/transporter\" \"4.17.1\"\n\nansi-colors@^1.0.1:\n  version \"1.1.0\"\n  resolved \"https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-1.1.0.tgz#6374b4dd5d4718ff3ce27a671a3b1cad077132a9\"\n  integrity sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==\n  dependencies:\n    ansi-wrap \"^0.1.0\"\n\nansi-colors@^4.1.1:\n  version \"4.1.1\"\n  resolved \"https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348\"\n  integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==\n\nansi-colors@^4.1.3:\n  version \"4.1.3\"\n  resolved \"https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b\"\n  integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==\n\nansi-cyan@^0.1.1:\n  version \"0.1.1\"\n  resolved \"https://registry.yarnpkg.com/ansi-cyan/-/ansi-cyan-0.1.1.tgz#538ae528af8982f28ae30d86f2f17456d2609873\"\n  integrity sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM=\n  dependencies:\n    ansi-wrap \"0.1.0\"\n\nansi-escapes@^3.0.0:\n  version \"3.2.0\"\n  resolved \"https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b\"\n  integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==\n\nansi-escapes@^4.2.1:\n  version \"4.3.0\"\n  resolved \"https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.0.tgz#a4ce2b33d6b214b7950d8595c212f12ac9cc569d\"\n  integrity sha512-EiYhwo0v255HUL6eDyuLrXEkTi7WwVCLAw+SeOQ7M7qdun1z1pum4DEm/nuqIVbPvi9RPPc9k9LbyBv6H0DwVg==\n  dependencies:\n    type-fest \"^0.8.1\"\n\nansi-escapes@^4.3.0:\n  version \"4.3.1\"\n  resolved \"https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61\"\n  integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==\n  dependencies:\n    type-fest \"^0.11.0\"\n\nansi-gray@^0.1.1:\n  version \"0.1.1\"\n  resolved \"https://registry.yarnpkg.com/ansi-gray/-/ansi-gray-0.1.1.tgz#2962cf54ec9792c48510a3deb524436861ef7251\"\n  integrity sha1-KWLPVOyXksSFEKPetSRDaGHvclE=\n  dependencies:\n    ansi-wrap \"0.1.0\"\n\nansi-red@^0.1.1:\n  version \"0.1.1\"\n  resolved \"https://registry.yarnpkg.com/ansi-red/-/ansi-red-0.1.1.tgz#8c638f9d1080800a353c9c28c8a81ca4705d946c\"\n  integrity sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw=\n  dependencies:\n    ansi-wrap \"0.1.0\"\n\nansi-regex@^2.0.0:\n  version \"2.1.1\"\n  resolved \"https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df\"\n  integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=\n\nansi-regex@^3.0.0:\n  version \"3.0.0\"\n  resolved \"https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998\"\n  integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=\n\nansi-regex@^4.0.0, ansi-regex@^4.1.0:\n  version \"4.1.0\"\n  resolved \"https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997\"\n  integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==\n\nansi-regex@^5.0.0:\n  version \"5.0.0\"\n  resolved \"https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75\"\n  integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==\n\nansi-regex@^5.0.1:\n  version \"5.0.1\"\n  resolved \"https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304\"\n  integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==\n\nansi-styles@^2.2.1:\n  version \"2.2.1\"\n  resolved \"https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe\"\n  integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=\n\nansi-styles@^3.2.0, ansi-styles@^3.2.1:\n  version \"3.2.1\"\n  resolved \"https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d\"\n  integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==\n  dependencies:\n    color-convert \"^1.9.0\"\n\nansi-styles@^4.0.0, ansi-styles@^4.1.0:\n  version \"4.2.1\"\n  resolved \"https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359\"\n  integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==\n  dependencies:\n    \"@types/color-name\" \"^1.1.1\"\n    color-convert \"^2.0.1\"\n\nansi-styles@^5.0.0:\n  version \"5.2.0\"\n  resolved \"https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b\"\n  integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==\n\nansi-wrap@0.1.0, ansi-wrap@^0.1.0:\n  version \"0.1.0\"\n  resolved \"https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf\"\n  integrity sha1-qCJQ3bABXponyoLoLqYDu/pF768=\n\nansi@^0.3.0, ansi@~0.3.1:\n  version \"0.3.1\"\n  resolved \"https://registry.yarnpkg.com/ansi/-/ansi-0.3.1.tgz#0c42d4fb17160d5a9af1e484bace1c66922c1b21\"\n  integrity sha1-DELU+xcWDVqa8eSEus4cZpIsGyE=\n\nany-promise@^1.0.0:\n  version \"1.3.0\"\n  resolved \"https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f\"\n  integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==\n\nanymatch@^2.0.0:\n  version \"2.0.0\"\n  resolved \"https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb\"\n  integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==\n  dependencies:\n    micromatch \"^3.1.4\"\n    normalize-path \"^2.1.1\"\n\nanymatch@^3.0.3:\n  version \"3.1.1\"\n  resolved \"https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142\"\n  integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==\n  dependencies:\n    normalize-path \"^3.0.0\"\n    picomatch \"^2.0.4\"\n\nanymatch@~3.1.2:\n  version \"3.1.3\"\n  resolved \"https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e\"\n  integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==\n  dependencies:\n    normalize-path \"^3.0.0\"\n    picomatch \"^2.0.4\"\n\nare-passive-events-supported@^1.1.0:\n  version \"1.1.1\"\n  resolved \"https://registry.yarnpkg.com/are-passive-events-supported/-/are-passive-events-supported-1.1.1.tgz#3db180a1753a2186a2de50a32cded3ac0979f5dc\"\n  integrity sha512-5wnvlvB/dTbfrCvJ027Y4L4gW/6Mwoy1uFSavney0YO++GU+0e/flnjiBBwH+1kh7xNCgCOGvmJC3s32joYbww==\n\nare-we-there-yet@~1.1.2:\n  version \"1.1.5\"\n  resolved \"https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21\"\n  integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==\n  dependencies:\n    delegates \"^1.0.0\"\n    readable-stream \"^2.0.6\"\n\narg@^5.0.2:\n  version \"5.0.2\"\n  resolved \"https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c\"\n  integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==\n\nargparse@^1.0.7:\n  version \"1.0.10\"\n  resolved \"https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911\"\n  integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==\n  dependencies:\n    sprintf-js \"~1.0.2\"\n\naria-query@^3.0.0:\n  version \"3.0.0\"\n  resolved \"https://registry.yarnpkg.com/aria-query/-/aria-query-3.0.0.tgz#65b3fcc1ca1155a8c9ae64d6eee297f15d5133cc\"\n  integrity sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w=\n  dependencies:\n    ast-types-flow \"0.0.7\"\n    commander \"^2.11.0\"\n\naria-query@^5.0.0, aria-query@^5.1.3:\n  version \"5.1.3\"\n  resolved \"https://registry.yarnpkg.com/aria-query/-/aria-query-5.1.3.tgz#19db27cd101152773631396f7a95a3b58c22c35e\"\n  integrity sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==\n  dependencies:\n    deep-equal \"^2.0.5\"\n\narr-diff@^1.0.1:\n  version \"1.1.0\"\n  resolved \"https://registry.yarnpkg.com/arr-diff/-/arr-diff-1.1.0.tgz#687c32758163588fef7de7b36fabe495eb1a399a\"\n  integrity sha1-aHwydYFjWI/vfeezb6vklesaOZo=\n  dependencies:\n    arr-flatten \"^1.0.1\"\n    array-slice \"^0.2.3\"\n\narr-diff@^2.0.0:\n  version \"2.0.0\"\n  resolved \"https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf\"\n  integrity sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=\n  dependencies:\n    arr-flatten \"^1.0.1\"\n\narr-diff@^4.0.0:\n  version \"4.0.0\"\n  resolved \"https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520\"\n  integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=\n\narr-flatten@^1.0.1, arr-flatten@^1.1.0:\n  version \"1.1.0\"\n  resolved \"https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1\"\n  integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==\n\narr-union@^2.0.1:\n  version \"2.1.0\"\n  resolved \"https://registry.yarnpkg.com/arr-union/-/arr-union-2.1.0.tgz#20f9eab5ec70f5c7d215b1077b1c39161d292c7d\"\n  integrity sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=\n\narr-union@^3.1.0:\n  version \"3.1.0\"\n  resolved \"https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4\"\n  integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=\n\narray-buffer-byte-length@^1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead\"\n  integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==\n  dependencies:\n    call-bind \"^1.0.2\"\n    is-array-buffer \"^3.0.1\"\n\narray-equal@^1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93\"\n  integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=\n\narray-filter@~0.0.0:\n  version \"0.0.1\"\n  resolved \"https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec\"\n  integrity sha1-fajPLiZijtcygDWB/SH2fKzS7uw=\n\narray-flatten@1.1.1:\n  version \"1.1.1\"\n  resolved \"https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2\"\n  integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==\n\narray-includes@^3.0.3:\n  version \"3.0.3\"\n  resolved \"https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d\"\n  integrity sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=\n  dependencies:\n    define-properties \"^1.1.2\"\n    es-abstract \"^1.7.0\"\n\narray-includes@^3.1.1:\n  version \"3.1.1\"\n  resolved \"https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.1.tgz#cdd67e6852bdf9c1215460786732255ed2459348\"\n  integrity sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==\n  dependencies:\n    define-properties \"^1.1.3\"\n    es-abstract \"^1.17.0\"\n    is-string \"^1.0.5\"\n\narray-includes@^3.1.5, array-includes@^3.1.6:\n  version \"3.1.6\"\n  resolved \"https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f\"\n  integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==\n  dependencies:\n    call-bind \"^1.0.2\"\n    define-properties \"^1.1.4\"\n    es-abstract \"^1.20.4\"\n    get-intrinsic \"^1.1.3\"\n    is-string \"^1.0.7\"\n\narray-map@~0.0.0:\n  version \"0.0.0\"\n  resolved \"https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662\"\n  integrity sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=\n\narray-reduce@~0.0.0:\n  version \"0.0.0\"\n  resolved \"https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b\"\n  integrity sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=\n\narray-slice@^0.2.3:\n  version \"0.2.3\"\n  resolved \"https://registry.yarnpkg.com/array-slice/-/array-slice-0.2.3.tgz#dd3cfb80ed7973a75117cdac69b0b99ec86186f5\"\n  integrity sha1-3Tz7gO15c6dRF82sabC5nshhhvU=\n\narray-union@^2.1.0:\n  version \"2.1.0\"\n  resolved \"https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d\"\n  integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==\n\narray-unique@^0.2.1:\n  version \"0.2.1\"\n  resolved \"https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53\"\n  integrity sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=\n\narray-unique@^0.3.2:\n  version \"0.3.2\"\n  resolved \"https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428\"\n  integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=\n\narray.prototype.flat@^1.2.1:\n  version \"1.2.2\"\n  resolved \"https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.2.tgz#8f3c71d245ba349b6b64b4078f76f5576f1fd723\"\n  integrity sha512-VXjh7lAL4KXKF2hY4FnEW9eRW6IhdvFW1sN/JwLbmECbCgACCnBHNyP3lFiYuttr0jxRN9Bsc5+G27dMseSWqQ==\n  dependencies:\n    define-properties \"^1.1.3\"\n    es-abstract \"^1.15.0\"\n    function-bind \"^1.1.1\"\n\narray.prototype.flat@^1.3.1:\n  version \"1.3.1\"\n  resolved \"https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2\"\n  integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==\n  dependencies:\n    call-bind \"^1.0.2\"\n    define-properties \"^1.1.4\"\n    es-abstract \"^1.20.4\"\n    es-shim-unscopables \"^1.0.0\"\n\narray.prototype.flatmap@^1.3.1:\n  version \"1.3.1\"\n  resolved \"https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183\"\n  integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==\n  dependencies:\n    call-bind \"^1.0.2\"\n    define-properties \"^1.1.4\"\n    es-abstract \"^1.20.4\"\n    es-shim-unscopables \"^1.0.0\"\n\narray.prototype.tosorted@^1.1.1:\n  version \"1.1.1\"\n  resolved \"https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz#ccf44738aa2b5ac56578ffda97c03fd3e23dd532\"\n  integrity sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==\n  dependencies:\n    call-bind \"^1.0.2\"\n    define-properties \"^1.1.4\"\n    es-abstract \"^1.20.4\"\n    es-shim-unscopables \"^1.0.0\"\n    get-intrinsic \"^1.1.3\"\n\nart@^0.10.0:\n  version \"0.10.3\"\n  resolved \"https://registry.yarnpkg.com/art/-/art-0.10.3.tgz#b01d84a968ccce6208df55a733838c96caeeaea2\"\n  integrity sha512-HXwbdofRTiJT6qZX/FnchtldzJjS3vkLJxQilc3Xj+ma2MXjY4UAyQ0ls1XZYVnDvVIBiFZbC6QsvtW86TD6tQ==\n\nasap@~2.0.3:\n  version \"2.0.6\"\n  resolved \"https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46\"\n  integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=\n\nasn1@~0.2.3:\n  version \"0.2.4\"\n  resolved \"https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136\"\n  integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==\n  dependencies:\n    safer-buffer \"~2.1.0\"\n\nassert-plus@1.0.0, assert-plus@^1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525\"\n  integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=\n\nassign-symbols@^1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367\"\n  integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=\n\nast-types-flow@0.0.7, ast-types-flow@^0.0.7:\n  version \"0.0.7\"\n  resolved \"https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad\"\n  integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0=\n\nastral-regex@^1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9\"\n  integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==\n\nastral-regex@^2.0.0:\n  version \"2.0.0\"\n  resolved \"https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31\"\n  integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==\n\nasync-limiter@~1.0.0:\n  version \"1.0.1\"\n  resolved \"https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd\"\n  integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==\n\nasync-retry@1.2.3:\n  version \"1.2.3\"\n  resolved \"https://registry.yarnpkg.com/async-retry/-/async-retry-1.2.3.tgz#a6521f338358d322b1a0012b79030c6f411d1ce0\"\n  integrity sha512-tfDb02Th6CE6pJUF2gjW5ZVjsgwlucVXOEQMvEX9JgSJMs9gAX+Nz3xRuJBKuUYjTSYORqvDBORdAQ3LU59g7Q==\n  dependencies:\n    retry \"0.12.0\"\n\nasync-retry@^1.3.1:\n  version \"1.3.3\"\n  resolved \"https://registry.yarnpkg.com/async-retry/-/async-retry-1.3.3.tgz#0e7f36c04d8478e7a58bdbed80cedf977785f280\"\n  integrity sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==\n  dependencies:\n    retry \"0.13.1\"\n\nasync@^2.4.0:\n  version \"2.6.3\"\n  resolved \"https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff\"\n  integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==\n  dependencies:\n    lodash \"^4.17.14\"\n\nasynckit@^0.4.0:\n  version \"0.4.0\"\n  resolved \"https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79\"\n  integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=\n\nasyncro@^3.0.0:\n  version \"3.0.0\"\n  resolved \"https://registry.yarnpkg.com/asyncro/-/asyncro-3.0.0.tgz#3c7a732e263bc4a42499042f48d7d858e9c0134e\"\n  integrity sha512-nEnWYfrBmA3taTiuiOoZYmgJ/CNrSoQLeLs29SeLcPu60yaw/mHDBHV0iOZ051fTvsTHxpCY+gXibqT9wbQYfg==\n\nat-least-node@^1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2\"\n  integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==\n\natob@^2.1.2:\n  version \"2.1.2\"\n  resolved \"https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9\"\n  integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==\n\nautocomplete.js@0.36.0:\n  version \"0.36.0\"\n  resolved \"https://registry.yarnpkg.com/autocomplete.js/-/autocomplete.js-0.36.0.tgz#94fe775fe64b6cd42e622d076dc7fd26bedd837b\"\n  integrity sha512-jEwUXnVMeCHHutUt10i/8ZiRaCb0Wo+ZyKxeGsYwBDtw6EJHqEeDrq4UwZRD8YBSvp3g6klP678il2eeiVXN2Q==\n  dependencies:\n    immediate \"^3.2.3\"\n\nautoprefixer@^10.4.13:\n  version \"10.4.14\"\n  resolved \"https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.14.tgz#e28d49902f8e759dd25b153264e862df2705f79d\"\n  integrity sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==\n  dependencies:\n    browserslist \"^4.21.5\"\n    caniuse-lite \"^1.0.30001464\"\n    fraction.js \"^4.2.0\"\n    normalize-range \"^0.1.2\"\n    picocolors \"^1.0.0\"\n    postcss-value-parser \"^4.2.0\"\n\navailable-typed-arrays@^1.0.5:\n  version \"1.0.5\"\n  resolved \"https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7\"\n  integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==\n\naws-sign2@~0.7.0:\n  version \"0.7.0\"\n  resolved \"https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8\"\n  integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=\n\naws4@^1.8.0:\n  version \"1.9.0\"\n  resolved \"https://registry.yarnpkg.com/aws4/-/aws4-1.9.0.tgz#24390e6ad61386b0a747265754d2a17219de862c\"\n  integrity sha512-Uvq6hVe90D0B2WEnUqtdgY1bATGz3mw33nH9Y+dmA+w5DHvUmBgkr5rM/KCHpCsiFNRUfokW/szpPPgMK2hm4A==\n\naxe-core@^4.6.2:\n  version \"4.7.2\"\n  resolved \"https://registry.yarnpkg.com/axe-core/-/axe-core-4.7.2.tgz#040a7342b20765cb18bb50b628394c21bccc17a0\"\n  integrity sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g==\n\naxobject-query@^2.0.2:\n  version \"2.1.1\"\n  resolved \"https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.1.1.tgz#2a3b1271ec722d48a4cd4b3fcc20c853326a49a7\"\n  integrity sha512-lF98xa/yvy6j3fBHAgQXIYl+J4eZadOSqsPojemUqClzNbBV38wWGpUbQbVEyf4eUF5yF7eHmGgGA2JiHyjeqw==\n  dependencies:\n    \"@babel/runtime\" \"^7.7.4\"\n    \"@babel/runtime-corejs3\" \"^7.7.4\"\n\naxobject-query@^3.1.1:\n  version \"3.1.1\"\n  resolved \"https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.1.1.tgz#3b6e5c6d4e43ca7ba51c5babf99d22a9c68485e1\"\n  integrity sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==\n  dependencies:\n    deep-equal \"^2.0.5\"\n\nbabel-eslint@10.0.1:\n  version \"10.0.1\"\n  resolved \"https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.0.1.tgz#919681dc099614cd7d31d45c8908695092a1faed\"\n  integrity sha512-z7OT1iNV+TjOwHNLLyJk+HN+YVWX+CLE6fPD2SymJZOZQBs+QIexFjhm4keGTm8MW9xr4EC9Q0PbaLB24V5GoQ==\n  dependencies:\n    \"@babel/code-frame\" \"^7.0.0\"\n    \"@babel/parser\" \"^7.0.0\"\n    \"@babel/traverse\" \"^7.0.0\"\n    \"@babel/types\" \"^7.0.0\"\n    eslint-scope \"3.7.1\"\n    eslint-visitor-keys \"^1.0.0\"\n\nbabel-eslint@^10.0.3:\n  version \"10.0.3\"\n  resolved \"https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.0.3.tgz#81a2c669be0f205e19462fed2482d33e4687a88a\"\n  integrity sha512-z3U7eMY6r/3f3/JB9mTsLjyxrv0Yb1zb8PCWCLpguxfCzBIZUwy23R1t/XKewP+8mEN2Ck8Dtr4q20z6ce6SoA==\n  dependencies:\n    \"@babel/code-frame\" \"^7.0.0\"\n    \"@babel/parser\" \"^7.0.0\"\n    \"@babel/traverse\" \"^7.0.0\"\n    \"@babel/types\" \"^7.0.0\"\n    eslint-visitor-keys \"^1.0.0\"\n    resolve \"^1.12.0\"\n\nbabel-jest@^25.5.1:\n  version \"25.5.1\"\n  resolved \"https://registry.yarnpkg.com/babel-jest/-/babel-jest-25.5.1.tgz#bc2e6101f849d6f6aec09720ffc7bc5332e62853\"\n  integrity sha512-9dA9+GmMjIzgPnYtkhBg73gOo/RHqPmLruP3BaGL4KEX3Dwz6pI8auSN8G8+iuEG90+GSswyKvslN+JYSaacaQ==\n  dependencies:\n    \"@jest/transform\" \"^25.5.1\"\n    \"@jest/types\" \"^25.5.0\"\n    \"@types/babel__core\" \"^7.1.7\"\n    babel-plugin-istanbul \"^6.0.0\"\n    babel-preset-jest \"^25.5.0\"\n    chalk \"^3.0.0\"\n    graceful-fs \"^4.2.4\"\n    slash \"^3.0.0\"\n\nbabel-plugin-annotate-pure-calls@^0.4.0:\n  version \"0.4.0\"\n  resolved \"https://registry.yarnpkg.com/babel-plugin-annotate-pure-calls/-/babel-plugin-annotate-pure-calls-0.4.0.tgz#78aa00fd878c4fcde4d49f3da397fcf5defbcce8\"\n  integrity sha512-oi4M/PWUJOU9ZyRGoPTfPMqdyMp06jbJAomd3RcyYuzUtBOddv98BqLm96Lucpi2QFoQHkdGQt0ACvw7VzVEQA==\n\nbabel-plugin-apply-mdx-type-prop@1.6.22:\n  version \"1.6.22\"\n  resolved \"https://registry.yarnpkg.com/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz#d216e8fd0de91de3f1478ef3231e05446bc8705b\"\n  integrity sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"7.10.4\"\n    \"@mdx-js/util\" \"1.6.22\"\n\nbabel-plugin-dev-expression@^0.2.1:\n  version \"0.2.2\"\n  resolved \"https://registry.yarnpkg.com/babel-plugin-dev-expression/-/babel-plugin-dev-expression-0.2.2.tgz#c18de18a06150f9480edd151acbb01d2e65e999b\"\n  integrity sha512-y32lfBif+c2FIh5dwGfcc/IfX5aw/Bru7Du7W2n17sJE/GJGAsmIk5DPW/8JOoeKpXW5evJfJOvRq5xkiS6vng==\n\nbabel-plugin-dynamic-import-node@^2.3.3:\n  version \"2.3.3\"\n  resolved \"https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3\"\n  integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==\n  dependencies:\n    object.assign \"^4.1.0\"\n\nbabel-plugin-extract-import-names@1.6.22:\n  version \"1.6.22\"\n  resolved \"https://registry.yarnpkg.com/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz#de5f9a28eb12f3eb2578bf74472204e66d1a13dc\"\n  integrity sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"7.10.4\"\n\nbabel-plugin-istanbul@^6.0.0:\n  version \"6.0.0\"\n  resolved \"https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz#e159ccdc9af95e0b570c75b4573b7c34d671d765\"\n  integrity sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==\n  dependencies:\n    \"@babel/helper-plugin-utils\" \"^7.0.0\"\n    \"@istanbuljs/load-nyc-config\" \"^1.0.0\"\n    \"@istanbuljs/schema\" \"^0.1.2\"\n    istanbul-lib-instrument \"^4.0.0\"\n    test-exclude \"^6.0.0\"\n\nbabel-plugin-jest-hoist@^25.5.0:\n  version \"25.5.0\"\n  resolved \"https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-25.5.0.tgz#129c80ba5c7fc75baf3a45b93e2e372d57ca2677\"\n  integrity sha512-u+/W+WAjMlvoocYGTwthAiQSxDcJAyHpQ6oWlHdFZaaN+Rlk8Q7iiwDPg2lN/FyJtAYnKjFxbn7xus4HCFkg5g==\n  dependencies:\n    \"@babel/template\" \"^7.3.3\"\n    \"@babel/types\" \"^7.3.3\"\n    \"@types/babel__traverse\" \"^7.0.6\"\n\nbabel-plugin-macros@^2.6.1:\n  version \"2.8.0\"\n  resolved \"https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz#0f958a7cc6556b1e65344465d99111a1e5e10138\"\n  integrity sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==\n  dependencies:\n    \"@babel/runtime\" \"^7.7.2\"\n    cosmiconfig \"^6.0.0\"\n    resolve \"^1.12.0\"\n\nbabel-plugin-polyfill-regenerator@^0.0.4:\n  version \"0.0.4\"\n  resolved \"https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.0.4.tgz#588641af9a2cb4e299b1400c47672a4a104d2459\"\n  integrity sha512-+/uCzO9JTYVZVGCpZpVAQkgPGt2zkR0VYiZvJ4aVoCe4ccgpKvNQqcjzAgQzSsjK64Jhc5hvrCR3l0087BevkA==\n  dependencies:\n    \"@babel/helper-define-polyfill-provider\" \"^0.0.3\"\n\nbabel-plugin-syntax-trailing-function-commas@^7.0.0-beta.0:\n  version \"7.0.0-beta.0\"\n  resolved \"https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz#aa213c1435e2bffeb6fca842287ef534ad05d5cf\"\n  integrity sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==\n\nbabel-plugin-transform-rename-import@^2.3.0:\n  version \"2.3.0\"\n  resolved \"https://registry.yarnpkg.com/babel-plugin-transform-rename-import/-/babel-plugin-transform-rename-import-2.3.0.tgz#5d9d645f937b0ca5c26a24b2510a06277b6ffd9b\"\n  integrity sha512-dPgJoT57XC0PqSnLgl2FwNvxFrWlspatX2dkk7yjKQj5HHGw071vAcOf+hqW8ClqcBDMvEbm6mevn5yHAD8mlQ==\n\nbabel-preset-current-node-syntax@^0.1.2:\n  version \"0.1.3\"\n  resolved \"https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.3.tgz#b4b547acddbf963cba555ba9f9cbbb70bfd044da\"\n  integrity sha512-uyexu1sVwcdFnyq9o8UQYsXwXflIh8LvrF5+cKrYam93ned1CStffB3+BEcsxGSgagoA3GEyjDqO4a/58hyPYQ==\n  dependencies:\n    \"@babel/plugin-syntax-async-generators\" \"^7.8.4\"\n    \"@babel/plugin-syntax-bigint\" \"^7.8.3\"\n    \"@babel/plugin-syntax-class-properties\" \"^7.8.3\"\n    \"@babel/plugin-syntax-import-meta\" \"^7.8.3\"\n    \"@babel/plugin-syntax-json-strings\" \"^7.8.3\"\n    \"@babel/plugin-syntax-logical-assignment-operators\" \"^7.8.3\"\n    \"@babel/plugin-syntax-nullish-coalescing-operator\" \"^7.8.3\"\n    \"@babel/plugin-syntax-numeric-separator\" \"^7.8.3\"\n    \"@babel/plugin-syntax-object-rest-spread\" \"^7.8.3\"\n    \"@babel/plugin-syntax-optional-catch-binding\" \"^7.8.3\"\n    \"@babel/plugin-syntax-optional-chaining\" \"^7.8.3\"\n\nbabel-preset-fbjs@^3.0.1, babel-preset-fbjs@^3.2.0:\n  version \"3.3.0\"\n  resolved \"https://registry.yarnpkg.com/babel-preset-fbjs/-/babel-preset-fbjs-3.3.0.tgz#a6024764ea86c8e06a22d794ca8b69534d263541\"\n  integrity sha512-7QTLTCd2gwB2qGoi5epSULMHugSVgpcVt5YAeiFO9ABLrutDQzKfGwzxgZHLpugq8qMdg/DhRZDZ5CLKxBkEbw==\n  dependencies:\n    \"@babel/plugin-proposal-class-properties\" \"^7.0.0\"\n    \"@babel/plugin-proposal-object-rest-spread\" \"^7.0.0\"\n    \"@babel/plugin-syntax-class-properties\" \"^7.0.0\"\n    \"@babel/plugin-syntax-flow\" \"^7.0.0\"\n    \"@babel/plugin-syntax-jsx\" \"^7.0.0\"\n    \"@babel/plugin-syntax-object-rest-spread\" \"^7.0.0\"\n    \"@babel/plugin-transform-arrow-functions\" \"^7.0.0\"\n    \"@babel/plugin-transform-block-scoped-functions\" \"^7.0.0\"\n    \"@babel/plugin-transform-block-scoping\" \"^7.0.0\"\n    \"@babel/plugin-transform-classes\" \"^7.0.0\"\n    \"@babel/plugin-transform-computed-properties\" \"^7.0.0\"\n    \"@babel/plugin-transform-destructuring\" \"^7.0.0\"\n    \"@babel/plugin-transform-flow-strip-types\" \"^7.0.0\"\n    \"@babel/plugin-transform-for-of\" \"^7.0.0\"\n    \"@babel/plugin-transform-function-name\" \"^7.0.0\"\n    \"@babel/plugin-transform-literals\" \"^7.0.0\"\n    \"@babel/plugin-transform-member-expression-literals\" \"^7.0.0\"\n    \"@babel/plugin-transform-modules-commonjs\" \"^7.0.0\"\n    \"@babel/plugin-transform-object-super\" \"^7.0.0\"\n    \"@babel/plugin-transform-parameters\" \"^7.0.0\"\n    \"@babel/plugin-transform-property-literals\" \"^7.0.0\"\n    \"@babel/plugin-transform-react-display-name\" \"^7.0.0\"\n    \"@babel/plugin-transform-react-jsx\" \"^7.0.0\"\n    \"@babel/plugin-transform-shorthand-properties\" \"^7.0.0\"\n    \"@babel/plugin-transform-spread\" \"^7.0.0\"\n    \"@babel/plugin-transform-template-literals\" \"^7.0.0\"\n    babel-plugin-syntax-trailing-function-commas \"^7.0.0-beta.0\"\n\nbabel-preset-jest@^25.5.0:\n  version \"25.5.0\"\n  resolved \"https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-25.5.0.tgz#c1d7f191829487a907764c65307faa0e66590b49\"\n  integrity sha512-8ZczygctQkBU+63DtSOKGh7tFL0CeCuz+1ieud9lJ1WPQ9O6A1a/r+LGn6Y705PA6whHQ3T1XuB/PmpfNYf8Fw==\n  dependencies:\n    babel-plugin-jest-hoist \"^25.5.0\"\n    babel-preset-current-node-syntax \"^0.1.2\"\n\nbail@^1.0.0:\n  version \"1.0.5\"\n  resolved \"https://registry.yarnpkg.com/bail/-/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776\"\n  integrity sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==\n\nbalanced-match@^1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767\"\n  integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=\n\nbase64-js@^1.1.2, base64-js@^1.2.3:\n  version \"1.3.1\"\n  resolved \"https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1\"\n  integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==\n\nbase@^0.11.1:\n  version \"0.11.2\"\n  resolved \"https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f\"\n  integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==\n  dependencies:\n    cache-base \"^1.0.1\"\n    class-utils \"^0.3.5\"\n    component-emitter \"^1.2.1\"\n    define-property \"^1.0.0\"\n    isobject \"^3.0.1\"\n    mixin-deep \"^1.2.0\"\n    pascalcase \"^0.1.1\"\n\nbasic-auth@~2.0.1:\n  version \"2.0.1\"\n  resolved \"https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.1.tgz#b998279bf47ce38344b4f3cf916d4679bbf51e3a\"\n  integrity sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==\n  dependencies:\n    safe-buffer \"5.1.2\"\n\nbcrypt-pbkdf@^1.0.0:\n  version \"1.0.2\"\n  resolved \"https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e\"\n  integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=\n  dependencies:\n    tweetnacl \"^0.14.3\"\n\nbenchmark@^2.1.4:\n  version \"2.1.4\"\n  resolved \"https://registry.yarnpkg.com/benchmark/-/benchmark-2.1.4.tgz#09f3de31c916425d498cc2ee565a0ebf3c2a5629\"\n  integrity sha512-l9MlfN4M1K/H2fbhfMy3B7vJd6AGKJVQn2h6Sg/Yx+KckoUA7ewS5Vv6TjSq18ooE1kS9hhAlQRH3AkXIh/aOQ==\n  dependencies:\n    lodash \"^4.17.4\"\n    platform \"^1.3.3\"\n\nbetter-path-resolve@1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/better-path-resolve/-/better-path-resolve-1.0.0.tgz#13a35a1104cdd48a7b74bf8758f96a1ee613f99d\"\n  integrity sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==\n  dependencies:\n    is-windows \"^1.0.0\"\n\nbig-integer@^1.6.44:\n  version \"1.6.48\"\n  resolved \"https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.48.tgz#8fd88bd1632cba4a1c8c3e3d7159f08bb95b4b9e\"\n  integrity sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==\n\nbig.js@^5.2.2:\n  version \"5.2.2\"\n  resolved \"https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328\"\n  integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==\n\nbinary-extensions@^2.0.0:\n  version \"2.2.0\"\n  resolved \"https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d\"\n  integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==\n\nbindings@^1.5.0:\n  version \"1.5.0\"\n  resolved \"https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df\"\n  integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==\n  dependencies:\n    file-uri-to-path \"1.0.0\"\n\nbody-parser@1.20.1:\n  version \"1.20.1\"\n  resolved \"https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668\"\n  integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==\n  dependencies:\n    bytes \"3.1.2\"\n    content-type \"~1.0.4\"\n    debug \"2.6.9\"\n    depd \"2.0.0\"\n    destroy \"1.2.0\"\n    http-errors \"2.0.0\"\n    iconv-lite \"0.4.24\"\n    on-finished \"2.4.1\"\n    qs \"6.11.0\"\n    raw-body \"2.5.1\"\n    type-is \"~1.6.18\"\n    unpipe \"1.0.0\"\n\nbody-parser@^1.19.0:\n  version \"1.20.2\"\n  resolved \"https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd\"\n  integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==\n  dependencies:\n    bytes \"3.1.2\"\n    content-type \"~1.0.5\"\n    debug \"2.6.9\"\n    depd \"2.0.0\"\n    destroy \"1.2.0\"\n    http-errors \"2.0.0\"\n    iconv-lite \"0.4.24\"\n    on-finished \"2.4.1\"\n    qs \"6.11.0\"\n    raw-body \"2.5.2\"\n    type-is \"~1.6.18\"\n    unpipe \"1.0.0\"\n\nbody-scroll-lock@^3.0.1:\n  version \"3.1.5\"\n  resolved \"https://registry.yarnpkg.com/body-scroll-lock/-/body-scroll-lock-3.1.5.tgz#c1392d9217ed2c3e237fee1e910f6cdd80b7aaec\"\n  integrity sha512-Yi1Xaml0EvNA0OYWxXiYNqY24AfWkbA6w5vxE7GWxtKfzIbZM+Qw+aSmkgsbWzbHiy/RCSkUZBplVxTA+E4jJg==\n\nbplist-creator@0.0.8:\n  version \"0.0.8\"\n  resolved \"https://registry.yarnpkg.com/bplist-creator/-/bplist-creator-0.0.8.tgz#56b2a6e79e9aec3fc33bf831d09347d73794e79c\"\n  integrity sha512-Za9JKzD6fjLC16oX2wsXfc+qBEhJBJB1YPInoAQpMLhDuj5aVOv1baGeIQSq1Fr3OCqzvsoQcSBSwGId/Ja2PA==\n  dependencies:\n    stream-buffers \"~2.2.0\"\n\nbplist-parser@0.2.0, bplist-parser@^0.2.0:\n  version \"0.2.0\"\n  resolved \"https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.2.0.tgz#43a9d183e5bf9d545200ceac3e712f79ebbe8d0e\"\n  integrity sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==\n  dependencies:\n    big-integer \"^1.6.44\"\n\nbrace-expansion@^1.1.7:\n  version \"1.1.11\"\n  resolved \"https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd\"\n  integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==\n  dependencies:\n    balanced-match \"^1.0.0\"\n    concat-map \"0.0.1\"\n\nbraces@^1.8.2:\n  version \"1.8.5\"\n  resolved \"https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7\"\n  integrity sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=\n  dependencies:\n    expand-range \"^1.8.1\"\n    preserve \"^0.2.0\"\n    repeat-element \"^1.1.2\"\n\nbraces@^2.3.1:\n  version \"2.3.2\"\n  resolved \"https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729\"\n  integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==\n  dependencies:\n    arr-flatten \"^1.1.0\"\n    array-unique \"^0.3.2\"\n    extend-shallow \"^2.0.1\"\n    fill-range \"^4.0.0\"\n    isobject \"^3.0.1\"\n    repeat-element \"^1.1.2\"\n    snapdragon \"^0.8.1\"\n    snapdragon-node \"^2.0.1\"\n    split-string \"^3.0.2\"\n    to-regex \"^3.0.1\"\n\nbraces@^3.0.1, braces@^3.0.2, braces@~3.0.2:\n  version \"3.0.2\"\n  resolved \"https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107\"\n  integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==\n  dependencies:\n    fill-range \"^7.0.1\"\n\nbraces@^3.0.3:\n  version \"3.0.3\"\n  resolved \"https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789\"\n  integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==\n  dependencies:\n    fill-range \"^7.1.1\"\n\nbrowser-process-hrtime@^0.1.2:\n  version \"0.1.3\"\n  resolved \"https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz#616f00faef1df7ec1b5bf9cfe2bdc3170f26c7b4\"\n  integrity sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==\n\nbrowser-resolve@^1.11.3:\n  version \"1.11.3\"\n  resolved \"https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6\"\n  integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==\n  dependencies:\n    resolve \"1.1.7\"\n\nbrowserslist@^4.12.0, browserslist@^4.8.5:\n  version \"4.14.4\"\n  resolved \"https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.4.tgz#66a18131439f9e16c3da7f352518dfa12f60b0e3\"\n  integrity sha512-7FOuawafVdEwa5Jv4nzeik/PepAjVte6HmVGHsjt2bC237jeL9QlcTBDF3PnHEvcC6uHwLGYPwZHNZMB7wWAnw==\n  dependencies:\n    caniuse-lite \"^1.0.30001135\"\n    electron-to-chromium \"^1.3.570\"\n    escalade \"^3.1.0\"\n    node-releases \"^1.1.61\"\n\nbrowserslist@^4.21.5:\n  version \"4.21.6\"\n  resolved \"https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.6.tgz#18ab9830a5a61806a909a4717f85665792e7f267\"\n  integrity sha512-PF07dKGXKR+/bljJzCB6rAYtHEu21TthLxmJagtQizx+rwiqdRDBO5971Xu1N7MgcMLi4+mr4Cnl76x7O3DHtA==\n  dependencies:\n    caniuse-lite \"^1.0.30001489\"\n    electron-to-chromium \"^1.4.411\"\n    node-releases \"^2.0.12\"\n    update-browserslist-db \"^1.0.11\"\n\nbs-logger@0.x:\n  version \"0.2.6\"\n  resolved \"https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8\"\n  integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==\n  dependencies:\n    fast-json-stable-stringify \"2.x\"\n\nbser@2.1.1:\n  version \"2.1.1\"\n  resolved \"https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05\"\n  integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==\n  dependencies:\n    node-int64 \"^0.4.0\"\n\nbuble@0.19.6:\n  version \"0.19.6\"\n  resolved \"https://registry.yarnpkg.com/buble/-/buble-0.19.6.tgz#915909b6bd5b11ee03b1c885ec914a8b974d34d3\"\n  integrity sha512-9kViM6nJA1Q548Jrd06x0geh+BG2ru2+RMDkIHHgJY/8AcyCs34lTHwra9BX7YdPrZXd5aarkpr/SY8bmPgPdg==\n  dependencies:\n    chalk \"^2.4.1\"\n    magic-string \"^0.25.1\"\n    minimist \"^1.2.0\"\n    os-homedir \"^1.0.1\"\n    regexpu-core \"^4.2.0\"\n    vlq \"^1.0.0\"\n\nbuffer-crc32@^0.2.13:\n  version \"0.2.13\"\n  resolved \"https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242\"\n  integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=\n\nbuffer-from@1.x, buffer-from@^1.0.0:\n  version \"1.1.1\"\n  resolved \"https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef\"\n  integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==\n\nbuiltin-modules@^3.1.0:\n  version \"3.1.0\"\n  resolved \"https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.1.0.tgz#aad97c15131eb76b65b50ef208e7584cd76a7484\"\n  integrity sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==\n\nbundle-name@^3.0.0:\n  version \"3.0.0\"\n  resolved \"https://registry.yarnpkg.com/bundle-name/-/bundle-name-3.0.0.tgz#ba59bcc9ac785fb67ccdbf104a2bf60c099f0e1a\"\n  integrity sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==\n  dependencies:\n    run-applescript \"^5.0.0\"\n\nbusboy@1.6.0:\n  version \"1.6.0\"\n  resolved \"https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893\"\n  integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==\n  dependencies:\n    streamsearch \"^1.1.0\"\n\nbytes@3.0.0:\n  version \"3.0.0\"\n  resolved \"https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048\"\n  integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=\n\nbytes@3.1.2:\n  version \"3.1.2\"\n  resolved \"https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5\"\n  integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==\n\ncache-base@^1.0.1:\n  version \"1.0.1\"\n  resolved \"https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2\"\n  integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==\n  dependencies:\n    collection-visit \"^1.0.0\"\n    component-emitter \"^1.2.1\"\n    get-value \"^2.0.6\"\n    has-value \"^1.0.0\"\n    isobject \"^3.0.1\"\n    set-value \"^2.0.0\"\n    to-object-path \"^0.3.0\"\n    union-value \"^1.0.0\"\n    unset-value \"^1.0.0\"\n\ncall-bind@^1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.0.tgz#24127054bb3f9bdcb4b1fb82418186072f77b8ce\"\n  integrity sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==\n  dependencies:\n    function-bind \"^1.1.1\"\n    get-intrinsic \"^1.0.0\"\n\ncall-bind@^1.0.2:\n  version \"1.0.2\"\n  resolved \"https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c\"\n  integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==\n  dependencies:\n    function-bind \"^1.1.1\"\n    get-intrinsic \"^1.0.2\"\n\ncaller-callsite@^2.0.0:\n  version \"2.0.0\"\n  resolved \"https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134\"\n  integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=\n  dependencies:\n    callsites \"^2.0.0\"\n\ncaller-path@^2.0.0:\n  version \"2.0.0\"\n  resolved \"https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4\"\n  integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=\n  dependencies:\n    caller-callsite \"^2.0.0\"\n\ncallsites@^2.0.0:\n  version \"2.0.0\"\n  resolved \"https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50\"\n  integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=\n\ncallsites@^3.0.0:\n  version \"3.1.0\"\n  resolved \"https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73\"\n  integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==\n\ncamelcase-css@2.0.1, camelcase-css@^2.0.1:\n  version \"2.0.1\"\n  resolved \"https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5\"\n  integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==\n\ncamelcase@^4.1.0:\n  version \"4.1.0\"\n  resolved \"https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd\"\n  integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=\n\ncamelcase@^5.0.0, camelcase@^5.3.1:\n  version \"5.3.1\"\n  resolved \"https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320\"\n  integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==\n\ncamelcase@^6.0.0:\n  version \"6.0.0\"\n  resolved \"https://registry.yarnpkg.com/camelcase/-/camelcase-6.0.0.tgz#5259f7c30e35e278f1bdc2a4d91230b37cad981e\"\n  integrity sha512-8KMDF1Vz2gzOq54ONPJS65IvTUaB1cHJ2DMM7MbPmLZljDH1qpzzLsWdiN9pHh6qvkRVDTi/07+eNGch/oLU4w==\n\ncaniuse-lite@^1.0.30001135:\n  version \"1.0.30001135\"\n  resolved \"https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001135.tgz#995b1eb94404a3c9a0d7600c113c9bb27f2cd8aa\"\n  integrity sha512-ziNcheTGTHlu9g34EVoHQdIu5g4foc8EsxMGC7Xkokmvw0dqNtX8BS8RgCgFBaAiSp2IdjvBxNdh0ssib28eVQ==\n\ncaniuse-lite@^1.0.30001406, caniuse-lite@^1.0.30001464, caniuse-lite@^1.0.30001489:\n  version \"1.0.30001489\"\n  resolved \"https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001489.tgz#ca82ee2d4e4dbf2bd2589c9360d3fcc2c7ba3bd8\"\n  integrity sha512-x1mgZEXK8jHIfAxm+xgdpHpk50IN3z3q3zP261/WS+uvePxW8izXuCu6AHz0lkuYTlATDehiZ/tNyYBdSQsOUQ==\n\ncapture-exit@^1.2.0:\n  version \"1.2.0\"\n  resolved \"https://registry.yarnpkg.com/capture-exit/-/capture-exit-1.2.0.tgz#1c5fcc489fd0ab00d4f1ac7ae1072e3173fbab6f\"\n  integrity sha1-HF/MSJ/QqwDU8ax64QcuMXP7q28=\n  dependencies:\n    rsvp \"^3.3.3\"\n\ncapture-exit@^2.0.0:\n  version \"2.0.0\"\n  resolved \"https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4\"\n  integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==\n  dependencies:\n    rsvp \"^4.8.4\"\n\ncaseless@~0.12.0:\n  version \"0.12.0\"\n  resolved \"https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc\"\n  integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=\n\nccount@^1.0.0:\n  version \"1.1.0\"\n  resolved \"https://registry.yarnpkg.com/ccount/-/ccount-1.1.0.tgz#246687debb6014735131be8abab2d93898f8d043\"\n  integrity sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==\n\nchalk@^1.1.1:\n  version \"1.1.3\"\n  resolved \"https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98\"\n  integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=\n  dependencies:\n    ansi-styles \"^2.2.1\"\n    escape-string-regexp \"^1.0.2\"\n    has-ansi \"^2.0.0\"\n    strip-ansi \"^3.0.0\"\n    supports-color \"^2.0.0\"\n\nchalk@^2.0.0, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2:\n  version \"2.4.2\"\n  resolved \"https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424\"\n  integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==\n  dependencies:\n    ansi-styles \"^3.2.1\"\n    escape-string-regexp \"^1.0.5\"\n    supports-color \"^5.3.0\"\n\nchalk@^3.0.0:\n  version \"3.0.0\"\n  resolved \"https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4\"\n  integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==\n  dependencies:\n    ansi-styles \"^4.1.0\"\n    supports-color \"^7.1.0\"\n\nchalk@^4.0.0, chalk@^4.1.0:\n  version \"4.1.0\"\n  resolved \"https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a\"\n  integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==\n  dependencies:\n    ansi-styles \"^4.1.0\"\n    supports-color \"^7.1.0\"\n\ncharacter-entities-html4@^1.0.0:\n  version \"1.1.4\"\n  resolved \"https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-1.1.4.tgz#0e64b0a3753ddbf1fdc044c5fd01d0199a02e125\"\n  integrity sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g==\n\ncharacter-entities-legacy@^1.0.0:\n  version \"1.1.4\"\n  resolved \"https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1\"\n  integrity sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==\n\ncharacter-entities@^1.0.0:\n  version \"1.2.4\"\n  resolved \"https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.4.tgz#e12c3939b7eaf4e5b15e7ad4c5e28e1d48c5b16b\"\n  integrity sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==\n\ncharacter-reference-invalid@^1.0.0:\n  version \"1.1.4\"\n  resolved \"https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560\"\n  integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==\n\nchardet@^0.4.0:\n  version \"0.4.2\"\n  resolved \"https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2\"\n  integrity sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=\n\nchardet@^0.7.0:\n  version \"0.7.0\"\n  resolved \"https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e\"\n  integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==\n\nchardet@^2.1.0:\n  version \"2.1.1\"\n  resolved \"https://registry.yarnpkg.com/chardet/-/chardet-2.1.1.tgz#5c75593704a642f71ee53717df234031e65373c8\"\n  integrity sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==\n\ncharenc@0.0.2:\n  version \"0.0.2\"\n  resolved \"https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667\"\n  integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==\n\nchokidar@^3.4.0, chokidar@^3.5.3:\n  version \"3.5.3\"\n  resolved \"https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd\"\n  integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==\n  dependencies:\n    anymatch \"~3.1.2\"\n    braces \"~3.0.2\"\n    glob-parent \"~5.1.2\"\n    is-binary-path \"~2.1.0\"\n    is-glob \"~4.0.1\"\n    normalize-path \"~3.0.0\"\n    readdirp \"~3.6.0\"\n  optionalDependencies:\n    fsevents \"~2.3.2\"\n\nci-info@^2.0.0:\n  version \"2.0.0\"\n  resolved \"https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46\"\n  integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==\n\nci-info@^3.7.0:\n  version \"3.9.0\"\n  resolved \"https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4\"\n  integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==\n\nclass-utils@^0.3.5:\n  version \"0.3.6\"\n  resolved \"https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463\"\n  integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==\n  dependencies:\n    arr-union \"^3.1.0\"\n    define-property \"^0.2.5\"\n    isobject \"^3.0.0\"\n    static-extend \"^0.1.1\"\n\nclassnames@*, classnames@^2.3.1:\n  version \"2.3.2\"\n  resolved \"https://registry.yarnpkg.com/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924\"\n  integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==\n\nclean-stack@^2.0.0:\n  version \"2.2.0\"\n  resolved \"https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b\"\n  integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==\n\ncli-cursor@^2.0.0, cli-cursor@^2.1.0:\n  version \"2.1.0\"\n  resolved \"https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5\"\n  integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=\n  dependencies:\n    restore-cursor \"^2.0.0\"\n\ncli-cursor@^3.1.0:\n  version \"3.1.0\"\n  resolved \"https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307\"\n  integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==\n  dependencies:\n    restore-cursor \"^3.1.0\"\n\ncli-spinners@^1.3.1:\n  version \"1.3.1\"\n  resolved \"https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-1.3.1.tgz#002c1990912d0d59580c93bd36c056de99e4259a\"\n  integrity sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==\n\ncli-spinners@^2.2.0:\n  version \"2.4.0\"\n  resolved \"https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.4.0.tgz#c6256db216b878cfba4720e719cec7cf72685d7f\"\n  integrity sha512-sJAofoarcm76ZGpuooaO0eDy8saEy+YoZBLjC4h8srt4jeBnkYeOgqxgsJQTpyt2LjI5PTfLJHSL+41Yu4fEJA==\n\ncli-truncate@^2.1.0:\n  version \"2.1.0\"\n  resolved \"https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7\"\n  integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==\n  dependencies:\n    slice-ansi \"^3.0.0\"\n    string-width \"^4.2.0\"\n\ncli-width@^2.0.0:\n  version \"2.2.1\"\n  resolved \"https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48\"\n  integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==\n\nclient-only@0.0.1:\n  version \"0.0.1\"\n  resolved \"https://registry.yarnpkg.com/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1\"\n  integrity sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==\n\ncliui@^3.2.0:\n  version \"3.2.0\"\n  resolved \"https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d\"\n  integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=\n  dependencies:\n    string-width \"^1.0.1\"\n    strip-ansi \"^3.0.1\"\n    wrap-ansi \"^2.0.0\"\n\ncliui@^6.0.0:\n  version \"6.0.0\"\n  resolved \"https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1\"\n  integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==\n  dependencies:\n    string-width \"^4.2.0\"\n    strip-ansi \"^6.0.0\"\n    wrap-ansi \"^6.2.0\"\n\nclone@^1.0.2:\n  version \"1.0.4\"\n  resolved \"https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e\"\n  integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4=\n\nclsx@^1.1.1:\n  version \"1.2.1\"\n  resolved \"https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12\"\n  integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==\n\nco@^4.6.0:\n  version \"4.6.0\"\n  resolved \"https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184\"\n  integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=\n\ncode-point-at@^1.0.0:\n  version \"1.1.0\"\n  resolved \"https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77\"\n  integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=\n\ncollapse-white-space@^1.0.0, collapse-white-space@^1.0.2:\n  version \"1.0.6\"\n  resolved \"https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.6.tgz#e63629c0016665792060dbbeb79c42239d2c5287\"\n  integrity sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==\n\ncollect-v8-coverage@^1.0.0:\n  version \"1.0.1\"\n  resolved \"https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59\"\n  integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==\n\ncollection-visit@^1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0\"\n  integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=\n  dependencies:\n    map-visit \"^1.0.0\"\n    object-visit \"^1.0.0\"\n\ncolor-convert@^1.9.0:\n  version \"1.9.3\"\n  resolved \"https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8\"\n  integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==\n  dependencies:\n    color-name \"1.1.3\"\n\ncolor-convert@^2.0.1:\n  version \"2.0.1\"\n  resolved \"https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3\"\n  integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==\n  dependencies:\n    color-name \"~1.1.4\"\n\ncolor-name@1.1.3:\n  version \"1.1.3\"\n  resolved \"https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25\"\n  integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=\n\ncolor-name@~1.1.4:\n  version \"1.1.4\"\n  resolved \"https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2\"\n  integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==\n\ncolor-support@^1.1.3:\n  version \"1.1.3\"\n  resolved \"https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2\"\n  integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==\n\ncombined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6:\n  version \"1.0.8\"\n  resolved \"https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f\"\n  integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==\n  dependencies:\n    delayed-stream \"~1.0.0\"\n\ncomma-separated-tokens@^1.0.0:\n  version \"1.0.8\"\n  resolved \"https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz#632b80b6117867a158f1080ad498b2fbe7e3f5ea\"\n  integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==\n\ncommander@^2.11.0, commander@^2.19.0, commander@^2.20.0, commander@^2.9.0:\n  version \"2.20.3\"\n  resolved \"https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33\"\n  integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==\n\ncommander@^4.0.0:\n  version \"4.1.1\"\n  resolved \"https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068\"\n  integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==\n\ncommander@^5.0.0:\n  version \"5.1.0\"\n  resolved \"https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae\"\n  integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==\n\ncommander@^6.0.0:\n  version \"6.1.0\"\n  resolved \"https://registry.yarnpkg.com/commander/-/commander-6.1.0.tgz#f8d722b78103141006b66f4c7ba1e97315ba75bc\"\n  integrity sha512-wl7PNrYWd2y5mp1OK/LhTlv8Ff4kQJQRXXAvF+uU/TPNiVJUxZLRYGj/B0y/lPGAVcSbJqH2Za/cvHmrPMC8mA==\n\ncommander@~2.13.0:\n  version \"2.13.0\"\n  resolved \"https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c\"\n  integrity sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==\n\ncommondir@^1.0.1:\n  version \"1.0.1\"\n  resolved \"https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b\"\n  integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=\n\ncompare-versions@^3.6.0:\n  version \"3.6.0\"\n  resolved \"https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.6.0.tgz#1a5689913685e5a87637b8d3ffca75514ec41d62\"\n  integrity sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==\n\ncomponent-emitter@^1.2.1:\n  version \"1.3.0\"\n  resolved \"https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0\"\n  integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==\n\ncomponent-props@1.1.1:\n  version \"1.1.1\"\n  resolved \"https://registry.yarnpkg.com/component-props/-/component-props-1.1.1.tgz#f9b7df9b9927b6e6d97c9bd272aa867670f34944\"\n  integrity sha512-69pIRJs9fCCHRqCz3390YF2LV1Lu6iEMZ5zuVqqUn+G20V9BNXlMs0cWawWeW9g4Ynmg29JmkG6R7/lUJoGd1Q==\n\ncomponent-xor@0.0.4:\n  version \"0.0.4\"\n  resolved \"https://registry.yarnpkg.com/component-xor/-/component-xor-0.0.4.tgz#c55d83ccc1b94cd5089a4e93fa7891c7263e59aa\"\n  integrity sha512-ZIt6sla8gfo+AFVRZoZOertcnD5LJaY2T9CKE2j13NJxQt/mUafD69Bl7/Y4AnpI2LGjiXH7cOfJDx/n2G9edA==\n\ncompressible@~2.0.16:\n  version \"2.0.18\"\n  resolved \"https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba\"\n  integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==\n  dependencies:\n    mime-db \">= 1.43.0 < 2\"\n\ncompression@^1.7.1:\n  version \"1.7.4\"\n  resolved \"https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f\"\n  integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==\n  dependencies:\n    accepts \"~1.3.5\"\n    bytes \"3.0.0\"\n    compressible \"~2.0.16\"\n    debug \"2.6.9\"\n    on-headers \"~1.0.2\"\n    safe-buffer \"5.1.2\"\n    vary \"~1.1.2\"\n\ncompute-scroll-into-view@^1.0.20:\n  version \"1.0.20\"\n  resolved \"https://registry.yarnpkg.com/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz#1768b5522d1172754f5d0c9b02de3af6be506a43\"\n  integrity sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==\n\nconcat-map@0.0.1:\n  version \"0.0.1\"\n  resolved \"https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b\"\n  integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=\n\nconcat-stream@^1.6.0:\n  version \"1.6.2\"\n  resolved \"https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34\"\n  integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==\n  dependencies:\n    buffer-from \"^1.0.0\"\n    inherits \"^2.0.3\"\n    readable-stream \"^2.2.2\"\n    typedarray \"^0.0.6\"\n\nconfusing-browser-globals@^1.0.9:\n  version \"1.0.9\"\n  resolved \"https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.9.tgz#72bc13b483c0276801681871d4898516f8f54fdd\"\n  integrity sha512-KbS1Y0jMtyPgIxjO7ZzMAuUpAKMt1SzCL9fsrKsX6b0zJPTaT0SiSPmewwVZg9UAO83HVIlEhZF84LIjZ0lmAw==\n\nconnect@^3.6.5:\n  version \"3.7.0\"\n  resolved \"https://registry.yarnpkg.com/connect/-/connect-3.7.0.tgz#5d49348910caa5e07a01800b030d0c35f20484f8\"\n  integrity sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==\n  dependencies:\n    debug \"2.6.9\"\n    finalhandler \"1.1.2\"\n    parseurl \"~1.3.3\"\n    utils-merge \"1.0.1\"\n\ncontains-path@^0.1.0:\n  version \"0.1.0\"\n  resolved \"https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a\"\n  integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=\n\ncontent-disposition@0.5.4:\n  version \"0.5.4\"\n  resolved \"https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe\"\n  integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==\n  dependencies:\n    safe-buffer \"5.2.1\"\n\ncontent-type@~1.0.4, content-type@~1.0.5:\n  version \"1.0.5\"\n  resolved \"https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918\"\n  integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==\n\nconvert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0:\n  version \"1.7.0\"\n  resolved \"https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442\"\n  integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==\n  dependencies:\n    safe-buffer \"~5.1.1\"\n\ncookie-signature@1.0.6:\n  version \"1.0.6\"\n  resolved \"https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c\"\n  integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==\n\ncookie@0.5.0:\n  version \"0.5.0\"\n  resolved \"https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b\"\n  integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==\n\ncopy-descriptor@^0.1.0:\n  version \"0.1.1\"\n  resolved \"https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d\"\n  integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=\n\ncopy-to-clipboard@^3.3.1:\n  version \"3.3.3\"\n  resolved \"https://registry.yarnpkg.com/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz#55ac43a1db8ae639a4bd99511c148cdd1b83a1b0\"\n  integrity sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==\n  dependencies:\n    toggle-selection \"^1.0.6\"\n\ncore-js-compat@^3.6.2:\n  version \"3.6.5\"\n  resolved \"https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.5.tgz#2a51d9a4e25dfd6e690251aa81f99e3c05481f1c\"\n  integrity sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==\n  dependencies:\n    browserslist \"^4.8.5\"\n    semver \"7.0.0\"\n\ncore-js-pure@^3.0.0:\n  version \"3.4.8\"\n  resolved \"https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.4.8.tgz#a4415834383784e81974cd34321daf36a6d2366e\"\n  integrity sha512-K9iPNbLDZ0Epojwd8J3lhodmrLHYvxb07H3DaFme1ne4TIlFq/ufiyPC40rc3OX6NCaVa0zaSu+VV6BVDR2wiA==\n\ncore-js@^2.2.2, core-js@^2.4.1:\n  version \"2.6.11\"\n  resolved \"https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c\"\n  integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==\n\ncore-js@^3.14.0:\n  version \"3.30.2\"\n  resolved \"https://registry.yarnpkg.com/core-js/-/core-js-3.30.2.tgz#6528abfda65e5ad728143ea23f7a14f0dcf503fc\"\n  integrity sha512-uBJiDmwqsbJCWHAwjrx3cvjbMXP7xD72Dmsn5LOJpiRmE3WbBbN5rCqQ2Qh6Ek6/eOrjlWngEynBWo4VxerQhg==\n\ncore-util-is@1.0.2, core-util-is@~1.0.0:\n  version \"1.0.2\"\n  resolved \"https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7\"\n  integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=\n\ncosmiconfig@^5.0.5:\n  version \"5.2.1\"\n  resolved \"https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a\"\n  integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==\n  dependencies:\n    import-fresh \"^2.0.0\"\n    is-directory \"^0.3.1\"\n    js-yaml \"^3.13.1\"\n    parse-json \"^4.0.0\"\n\ncosmiconfig@^6.0.0:\n  version \"6.0.0\"\n  resolved \"https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982\"\n  integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==\n  dependencies:\n    \"@types/parse-json\" \"^4.0.0\"\n    import-fresh \"^3.1.0\"\n    parse-json \"^5.0.0\"\n    path-type \"^4.0.0\"\n    yaml \"^1.7.2\"\n\ncosmiconfig@^7.0.0:\n  version \"7.0.0\"\n  resolved \"https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.0.tgz#ef9b44d773959cae63ddecd122de23853b60f8d3\"\n  integrity sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==\n  dependencies:\n    \"@types/parse-json\" \"^4.0.0\"\n    import-fresh \"^3.2.1\"\n    parse-json \"^5.0.0\"\n    path-type \"^4.0.0\"\n    yaml \"^1.10.0\"\n\ncreate-react-class@^15.6.3:\n  version \"15.7.0\"\n  resolved \"https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.7.0.tgz#7499d7ca2e69bb51d13faf59bd04f0c65a1d6c1e\"\n  integrity sha512-QZv4sFWG9S5RUvkTYWbflxeZX+JG7Cz0Tn33rQBJ+WFQTqTfUTjMjiv9tnfXazjsO5r0KhPs+AqCjyrQX6h2ng==\n  dependencies:\n    loose-envify \"^1.3.1\"\n    object-assign \"^4.1.1\"\n\ncross-spawn@^5.0.1, cross-spawn@^5.1.0:\n  version \"5.1.0\"\n  resolved \"https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449\"\n  integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=\n  dependencies:\n    lru-cache \"^4.0.1\"\n    shebang-command \"^1.2.0\"\n    which \"^1.2.9\"\n\ncross-spawn@^6.0.0, cross-spawn@^6.0.5:\n  version \"6.0.5\"\n  resolved \"https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4\"\n  integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==\n  dependencies:\n    nice-try \"^1.0.4\"\n    path-key \"^2.0.1\"\n    semver \"^5.5.0\"\n    shebang-command \"^1.2.0\"\n    which \"^1.2.9\"\n\ncross-spawn@^7.0.0:\n  version \"7.0.1\"\n  resolved \"https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.1.tgz#0ab56286e0f7c24e153d04cc2aa027e43a9a5d14\"\n  integrity sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg==\n  dependencies:\n    path-key \"^3.1.0\"\n    shebang-command \"^2.0.0\"\n    which \"^2.0.1\"\n\ncross-spawn@^7.0.2, cross-spawn@^7.0.3:\n  version \"7.0.3\"\n  resolved \"https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6\"\n  integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==\n  dependencies:\n    path-key \"^3.1.0\"\n    shebang-command \"^2.0.0\"\n    which \"^2.0.1\"\n\ncross-spawn@^7.0.5:\n  version \"7.0.6\"\n  resolved \"https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f\"\n  integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==\n  dependencies:\n    path-key \"^3.1.0\"\n    shebang-command \"^2.0.0\"\n    which \"^2.0.1\"\n\ncrypt@0.0.2:\n  version \"0.0.2\"\n  resolved \"https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b\"\n  integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==\n\ncssesc@^3.0.0:\n  version \"3.0.0\"\n  resolved \"https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee\"\n  integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==\n\ncssom@^0.4.1:\n  version \"0.4.4\"\n  resolved \"https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10\"\n  integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==\n\ncssom@~0.3.6:\n  version \"0.3.8\"\n  resolved \"https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a\"\n  integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==\n\ncssstyle@^2.0.0:\n  version \"2.3.0\"\n  resolved \"https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852\"\n  integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==\n  dependencies:\n    cssom \"~0.3.6\"\n\ncsstype@^3.0.2:\n  version \"3.1.2\"\n  resolved \"https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b\"\n  integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==\n\ndamerau-levenshtein@^1.0.4:\n  version \"1.0.5\"\n  resolved \"https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.5.tgz#780cf7144eb2e8dbd1c3bb83ae31100ccc31a414\"\n  integrity sha512-CBCRqFnpu715iPmw1KrdOrzRqbdFwQTwAWyyyYS42+iAgHCuXZ+/TdMgQkUENPomxEz9z1BEzuQU2Xw0kUuAgA==\n\ndamerau-levenshtein@^1.0.8:\n  version \"1.0.8\"\n  resolved \"https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7\"\n  integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==\n\ndashdash@^1.12.0:\n  version \"1.14.1\"\n  resolved \"https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0\"\n  integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=\n  dependencies:\n    assert-plus \"^1.0.0\"\n\ndata-urls@^1.1.0:\n  version \"1.1.0\"\n  resolved \"https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe\"\n  integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==\n  dependencies:\n    abab \"^2.0.0\"\n    whatwg-mimetype \"^2.2.0\"\n    whatwg-url \"^7.0.0\"\n\ndataloader@^1.4.0:\n  version \"1.4.0\"\n  resolved \"https://registry.yarnpkg.com/dataloader/-/dataloader-1.4.0.tgz#bca11d867f5d3f1b9ed9f737bd15970c65dff5c8\"\n  integrity sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==\n\ndate-fns@^2.12.0, date-fns@^2.9.0:\n  version \"2.30.0\"\n  resolved \"https://registry.yarnpkg.com/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0\"\n  integrity sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==\n  dependencies:\n    \"@babel/runtime\" \"^7.21.0\"\n\ndebug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9:\n  version \"2.6.9\"\n  resolved \"https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f\"\n  integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==\n  dependencies:\n    ms \"2.0.0\"\n\ndebug@3.1.0:\n  version \"3.1.0\"\n  resolved \"https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261\"\n  integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==\n  dependencies:\n    ms \"2.0.0\"\n\ndebug@^3.1.0, debug@^3.2.7:\n  version \"3.2.7\"\n  resolved \"https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a\"\n  integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==\n  dependencies:\n    ms \"^2.1.1\"\n\ndebug@^4.0.1, debug@^4.1.1:\n  version \"4.1.1\"\n  resolved \"https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791\"\n  integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==\n  dependencies:\n    ms \"^2.1.1\"\n\ndebug@^4.1.0:\n  version \"4.2.0\"\n  resolved \"https://registry.yarnpkg.com/debug/-/debug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1\"\n  integrity sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==\n  dependencies:\n    ms \"2.1.2\"\n\ndebug@^4.3.4:\n  version \"4.3.4\"\n  resolved \"https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865\"\n  integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==\n  dependencies:\n    ms \"2.1.2\"\n\ndecamelize@^1.1.1, decamelize@^1.2.0:\n  version \"1.2.0\"\n  resolved \"https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290\"\n  integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=\n\ndecode-uri-component@^0.2.0:\n  version \"0.2.0\"\n  resolved \"https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545\"\n  integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=\n\ndedent@^0.7.0:\n  version \"0.7.0\"\n  resolved \"https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c\"\n  integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=\n\ndeep-equal@^2.0.5:\n  version \"2.2.1\"\n  resolved \"https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.1.tgz#c72ab22f3a7d3503a4ca87dde976fe9978816739\"\n  integrity sha512-lKdkdV6EOGoVn65XaOsPdH4rMxTZOnmFyuIkMjM1i5HHCbfjC97dawgTAy0deYNfuqUqW+Q5VrVaQYtUpSd6yQ==\n  dependencies:\n    array-buffer-byte-length \"^1.0.0\"\n    call-bind \"^1.0.2\"\n    es-get-iterator \"^1.1.3\"\n    get-intrinsic \"^1.2.0\"\n    is-arguments \"^1.1.1\"\n    is-array-buffer \"^3.0.2\"\n    is-date-object \"^1.0.5\"\n    is-regex \"^1.1.4\"\n    is-shared-array-buffer \"^1.0.2\"\n    isarray \"^2.0.5\"\n    object-is \"^1.1.5\"\n    object-keys \"^1.1.1\"\n    object.assign \"^4.1.4\"\n    regexp.prototype.flags \"^1.5.0\"\n    side-channel \"^1.0.4\"\n    which-boxed-primitive \"^1.0.2\"\n    which-collection \"^1.0.1\"\n    which-typed-array \"^1.1.9\"\n\ndeep-is@^0.1.3:\n  version \"0.1.4\"\n  resolved \"https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831\"\n  integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==\n\ndeep-is@~0.1.3:\n  version \"0.1.3\"\n  resolved \"https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34\"\n  integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=\n\ndeepmerge@^2.1.1:\n  version \"2.2.1\"\n  resolved \"https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.2.1.tgz#5d3ff22a01c00f645405a2fbc17d0778a1801170\"\n  integrity sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==\n\ndeepmerge@^4.2.2:\n  version \"4.2.2\"\n  resolved \"https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955\"\n  integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==\n\ndefault-browser-id@^3.0.0:\n  version \"3.0.0\"\n  resolved \"https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-3.0.0.tgz#bee7bbbef1f4e75d31f98f4d3f1556a14cea790c\"\n  integrity sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==\n  dependencies:\n    bplist-parser \"^0.2.0\"\n    untildify \"^4.0.0\"\n\ndefault-browser@^4.0.0:\n  version \"4.0.0\"\n  resolved \"https://registry.yarnpkg.com/default-browser/-/default-browser-4.0.0.tgz#53c9894f8810bf86696de117a6ce9085a3cbc7da\"\n  integrity sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==\n  dependencies:\n    bundle-name \"^3.0.0\"\n    default-browser-id \"^3.0.0\"\n    execa \"^7.1.1\"\n    titleize \"^3.0.0\"\n\ndefaults@^1.0.3:\n  version \"1.0.3\"\n  resolved \"https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d\"\n  integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=\n  dependencies:\n    clone \"^1.0.2\"\n\ndefine-lazy-prop@^3.0.0:\n  version \"3.0.0\"\n  resolved \"https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f\"\n  integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==\n\ndefine-properties@^1.1.2, define-properties@^1.1.3:\n  version \"1.1.3\"\n  resolved \"https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1\"\n  integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==\n  dependencies:\n    object-keys \"^1.0.12\"\n\ndefine-properties@^1.1.4, define-properties@^1.2.0:\n  version \"1.2.0\"\n  resolved \"https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5\"\n  integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==\n  dependencies:\n    has-property-descriptors \"^1.0.0\"\n    object-keys \"^1.1.1\"\n\ndefine-property@^0.2.5:\n  version \"0.2.5\"\n  resolved \"https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116\"\n  integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=\n  dependencies:\n    is-descriptor \"^0.1.0\"\n\ndefine-property@^1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6\"\n  integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY=\n  dependencies:\n    is-descriptor \"^1.0.0\"\n\ndefine-property@^2.0.2:\n  version \"2.0.2\"\n  resolved \"https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d\"\n  integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==\n  dependencies:\n    is-descriptor \"^1.0.2\"\n    isobject \"^3.0.1\"\n\ndelayed-stream@~1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619\"\n  integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=\n\ndelegates@^1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a\"\n  integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=\n\ndenodeify@^1.2.1:\n  version \"1.2.1\"\n  resolved \"https://registry.yarnpkg.com/denodeify/-/denodeify-1.2.1.tgz#3a36287f5034e699e7577901052c2e6c94251631\"\n  integrity sha1-OjYof1A05pnnV3kBBSwubJQlFjE=\n\ndepd@2.0.0, depd@~2.0.0:\n  version \"2.0.0\"\n  resolved \"https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df\"\n  integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==\n\ndepd@~1.1.2:\n  version \"1.1.2\"\n  resolved \"https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9\"\n  integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=\n\ndestroy@1.2.0:\n  version \"1.2.0\"\n  resolved \"https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015\"\n  integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==\n\ndestroy@~1.0.4:\n  version \"1.0.4\"\n  resolved \"https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80\"\n  integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=\n\ndetab@2.0.4, detab@^2.0.0:\n  version \"2.0.4\"\n  resolved \"https://registry.yarnpkg.com/detab/-/detab-2.0.4.tgz#b927892069aff405fbb9a186fe97a44a92a94b43\"\n  integrity sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==\n  dependencies:\n    repeat-string \"^1.5.4\"\n\ndetect-indent@^6.0.0:\n  version \"6.1.0\"\n  resolved \"https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6\"\n  integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==\n\ndetect-newline@^3.0.0:\n  version \"3.1.0\"\n  resolved \"https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651\"\n  integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==\n\ndidyoumean@^1.2.2:\n  version \"1.2.2\"\n  resolved \"https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037\"\n  integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==\n\ndiff-sequences@^25.2.6:\n  version \"25.2.6\"\n  resolved \"https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.2.6.tgz#5f467c00edd35352b7bca46d7927d60e687a76dd\"\n  integrity sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg==\n\ndir-glob@^3.0.1:\n  version \"3.0.1\"\n  resolved \"https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f\"\n  integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==\n  dependencies:\n    path-type \"^4.0.0\"\n\ndlv@^1.1.3:\n  version \"1.1.3\"\n  resolved \"https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79\"\n  integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==\n\ndocsearch.js@^2.6.3:\n  version \"2.6.3\"\n  resolved \"https://registry.yarnpkg.com/docsearch.js/-/docsearch.js-2.6.3.tgz#57cb4600d3b6553c677e7cbbe6a734593e38625d\"\n  integrity sha512-GN+MBozuyz664ycpZY0ecdQE0ND/LSgJKhTLA0/v3arIS3S1Rpf2OJz6A35ReMsm91V5apcmzr5/kM84cvUg+A==\n  dependencies:\n    algoliasearch \"^3.24.5\"\n    autocomplete.js \"0.36.0\"\n    hogan.js \"^3.0.2\"\n    request \"^2.87.0\"\n    stack-utils \"^1.0.1\"\n    to-factory \"^1.0.0\"\n    zepto \"^1.2.0\"\n\ndoctrine@1.5.0:\n  version \"1.5.0\"\n  resolved \"https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa\"\n  integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=\n  dependencies:\n    esutils \"^2.0.2\"\n    isarray \"^1.0.0\"\n\ndoctrine@^2.1.0:\n  version \"2.1.0\"\n  resolved \"https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d\"\n  integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==\n  dependencies:\n    esutils \"^2.0.2\"\n\ndoctrine@^3.0.0:\n  version \"3.0.0\"\n  resolved \"https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961\"\n  integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==\n  dependencies:\n    esutils \"^2.0.2\"\n\ndom-accessibility-api@^0.5.9:\n  version \"0.5.16\"\n  resolved \"https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz#5a7429e6066eb3664d911e33fb0e45de8eb08453\"\n  integrity sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==\n\ndom-iterator@^1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/dom-iterator/-/dom-iterator-1.0.0.tgz#9c09899846ec41c2d257adc4d6015e4759ef05ad\"\n  integrity sha512-7dsMOQI07EMU98gQM8NSB3GsAiIeBYIPKpnxR3c9xOvdvBjChAcOM0iJ222I3p5xyiZO9e5oggkNaCusuTdYig==\n  dependencies:\n    component-props \"1.1.1\"\n    component-xor \"0.0.4\"\n\ndom-walk@^0.1.0:\n  version \"0.1.2\"\n  resolved \"https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84\"\n  integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==\n\ndomexception@^1.0.1:\n  version \"1.0.1\"\n  resolved \"https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90\"\n  integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==\n  dependencies:\n    webidl-conversions \"^4.0.2\"\n\ndotenv@^8.1.0:\n  version \"8.2.0\"\n  resolved \"https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a\"\n  integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==\n\necc-jsbn@~0.1.1:\n  version \"0.1.2\"\n  resolved \"https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9\"\n  integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=\n  dependencies:\n    jsbn \"~0.1.0\"\n    safer-buffer \"^2.1.0\"\n\nee-first@1.1.1:\n  version \"1.1.1\"\n  resolved \"https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d\"\n  integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=\n\nelectron-to-chromium@^1.3.570:\n  version \"1.3.571\"\n  resolved \"https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.571.tgz#e57977f1569f8326ae2a7905e26f3943536ba28f\"\n  integrity sha512-UYEQ2Gtc50kqmyOmOVtj6Oqi38lm5yRJY3pLuWt6UIot0No1L09uu6Ja6/1XKwmz/p0eJFZTUZi+khd1PV1hHA==\n\nelectron-to-chromium@^1.4.411:\n  version \"1.4.411\"\n  resolved \"https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.411.tgz#8cb7787f0442fcb4209590e9951bdb482caa93b2\"\n  integrity sha512-5VXLW4Qw89vM2WTICHua/y8v7fKGDRVa2VPOtBB9IpLvW316B+xd8yD1wTmLPY2ot/00P/qt87xdolj4aG/Lzg==\n\nemoji-regex@^7.0.1, emoji-regex@^7.0.2:\n  version \"7.0.3\"\n  resolved \"https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156\"\n  integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==\n\nemoji-regex@^8.0.0:\n  version \"8.0.0\"\n  resolved \"https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37\"\n  integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==\n\nemoji-regex@^9.2.2:\n  version \"9.2.2\"\n  resolved \"https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72\"\n  integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==\n\nemojis-list@^3.0.0:\n  version \"3.0.0\"\n  resolved \"https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78\"\n  integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==\n\nemoticon@^3.2.0:\n  version \"3.2.0\"\n  resolved \"https://registry.yarnpkg.com/emoticon/-/emoticon-3.2.0.tgz#c008ca7d7620fac742fe1bf4af8ff8fed154ae7f\"\n  integrity sha512-SNujglcLTTg+lDAcApPNgEdudaqQFiAbJCqzjNxJkvN9vAwCGi0uu8IUVvx+f16h+V44KCY6Y2yboroc9pilHg==\n\nencodeurl@~1.0.2:\n  version \"1.0.2\"\n  resolved \"https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59\"\n  integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=\n\nencoding@^0.1.11:\n  version \"0.1.13\"\n  resolved \"https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9\"\n  integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==\n  dependencies:\n    iconv-lite \"^0.6.2\"\n\nend-of-stream@^1.1.0:\n  version \"1.4.4\"\n  resolved \"https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0\"\n  integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==\n  dependencies:\n    once \"^1.4.0\"\n\nenhanced-resolve@^5.12.0:\n  version \"5.14.1\"\n  resolved \"https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.14.1.tgz#de684b6803724477a4af5d74ccae5de52c25f6b3\"\n  integrity sha512-Vklwq2vDKtl0y/vtwjSesgJ5MYS7Etuk5txS8VdKL4AOS1aUlD96zqIfsOSLQsdv3xgMRbtkWM8eG9XDfKUPow==\n  dependencies:\n    graceful-fs \"^4.2.4\"\n    tapable \"^2.2.0\"\n\nenquirer@^2.3.4, enquirer@^2.3.5, enquirer@^2.3.6:\n  version \"2.3.6\"\n  resolved \"https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d\"\n  integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==\n  dependencies:\n    ansi-colors \"^4.1.1\"\n\nenquirer@^2.4.1:\n  version \"2.4.1\"\n  resolved \"https://registry.yarnpkg.com/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56\"\n  integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==\n  dependencies:\n    ansi-colors \"^4.1.1\"\n    strip-ansi \"^6.0.1\"\n\nenvify@^4.0.0:\n  version \"4.1.0\"\n  resolved \"https://registry.yarnpkg.com/envify/-/envify-4.1.0.tgz#f39ad3db9d6801b4e6b478b61028d3f0b6819f7e\"\n  integrity sha512-IKRVVoAYr4pIx4yIWNsz9mOsboxlNXiu7TNBnem/K/uTHdkyzXWDzHCK7UTolqBbgaBz0tQHsD3YNls0uIIjiw==\n  dependencies:\n    esprima \"^4.0.0\"\n    through \"~2.3.4\"\n\nenvinfo@^5.7.0:\n  version \"5.12.1\"\n  resolved \"https://registry.yarnpkg.com/envinfo/-/envinfo-5.12.1.tgz#83068c33e0972eb657d6bc69a6df30badefb46ef\"\n  integrity sha512-pwdo0/G3CIkQ0y6PCXq4RdkvId2elvtPCJMG0konqlrfkWQbf1DWeH9K2b/cvu2YgGvPPTOnonZxXM1gikFu1w==\n\nerror-ex@^1.2.0, error-ex@^1.3.1:\n  version \"1.3.2\"\n  resolved \"https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf\"\n  integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==\n  dependencies:\n    is-arrayish \"^0.2.1\"\n\nerrorhandler@^1.5.0:\n  version \"1.5.1\"\n  resolved \"https://registry.yarnpkg.com/errorhandler/-/errorhandler-1.5.1.tgz#b9ba5d17cf90744cd1e851357a6e75bf806a9a91\"\n  integrity sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A==\n  dependencies:\n    accepts \"~1.3.7\"\n    escape-html \"~1.0.3\"\n\nes-abstract@^1.12.0, es-abstract@^1.15.0, es-abstract@^1.7.0:\n  version \"1.16.3\"\n  resolved \"https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.16.3.tgz#52490d978f96ff9f89ec15b5cf244304a5bca161\"\n  integrity sha512-WtY7Fx5LiOnSYgF5eg/1T+GONaGmpvpPdCpSnYij+U2gDTL0UPfWrhDw7b2IYb+9NQJsYpCA0wOQvZfsd6YwRw==\n  dependencies:\n    es-to-primitive \"^1.2.1\"\n    function-bind \"^1.1.1\"\n    has \"^1.0.3\"\n    has-symbols \"^1.0.1\"\n    is-callable \"^1.1.4\"\n    is-regex \"^1.0.4\"\n    object-inspect \"^1.7.0\"\n    object-keys \"^1.1.1\"\n    string.prototype.trimleft \"^2.1.0\"\n    string.prototype.trimright \"^2.1.0\"\n\nes-abstract@^1.17.0, es-abstract@^1.17.0-next.1, es-abstract@^1.17.5:\n  version \"1.17.6\"\n  resolved \"https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.6.tgz#9142071707857b2cacc7b89ecb670316c3e2d52a\"\n  integrity sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==\n  dependencies:\n    es-to-primitive \"^1.2.1\"\n    function-bind \"^1.1.1\"\n    has \"^1.0.3\"\n    has-symbols \"^1.0.1\"\n    is-callable \"^1.2.0\"\n    is-regex \"^1.1.0\"\n    object-inspect \"^1.7.0\"\n    object-keys \"^1.1.1\"\n    object.assign \"^4.1.0\"\n    string.prototype.trimend \"^1.0.1\"\n    string.prototype.trimstart \"^1.0.1\"\n\nes-abstract@^1.19.0, es-abstract@^1.20.4:\n  version \"1.21.2\"\n  resolved \"https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.2.tgz#a56b9695322c8a185dc25975aa3b8ec31d0e7eff\"\n  integrity sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==\n  dependencies:\n    array-buffer-byte-length \"^1.0.0\"\n    available-typed-arrays \"^1.0.5\"\n    call-bind \"^1.0.2\"\n    es-set-tostringtag \"^2.0.1\"\n    es-to-primitive \"^1.2.1\"\n    function.prototype.name \"^1.1.5\"\n    get-intrinsic \"^1.2.0\"\n    get-symbol-description \"^1.0.0\"\n    globalthis \"^1.0.3\"\n    gopd \"^1.0.1\"\n    has \"^1.0.3\"\n    has-property-descriptors \"^1.0.0\"\n    has-proto \"^1.0.1\"\n    has-symbols \"^1.0.3\"\n    internal-slot \"^1.0.5\"\n    is-array-buffer \"^3.0.2\"\n    is-callable \"^1.2.7\"\n    is-negative-zero \"^2.0.2\"\n    is-regex \"^1.1.4\"\n    is-shared-array-buffer \"^1.0.2\"\n    is-string \"^1.0.7\"\n    is-typed-array \"^1.1.10\"\n    is-weakref \"^1.0.2\"\n    object-inspect \"^1.12.3\"\n    object-keys \"^1.1.1\"\n    object.assign \"^4.1.4\"\n    regexp.prototype.flags \"^1.4.3\"\n    safe-regex-test \"^1.0.0\"\n    string.prototype.trim \"^1.2.7\"\n    string.prototype.trimend \"^1.0.6\"\n    string.prototype.trimstart \"^1.0.6\"\n    typed-array-length \"^1.0.4\"\n    unbox-primitive \"^1.0.2\"\n    which-typed-array \"^1.1.9\"\n\nes-get-iterator@^1.1.3:\n  version \"1.1.3\"\n  resolved \"https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6\"\n  integrity sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==\n  dependencies:\n    call-bind \"^1.0.2\"\n    get-intrinsic \"^1.1.3\"\n    has-symbols \"^1.0.3\"\n    is-arguments \"^1.1.1\"\n    is-map \"^2.0.2\"\n    is-set \"^2.0.2\"\n    is-string \"^1.0.7\"\n    isarray \"^2.0.5\"\n    stop-iteration-iterator \"^1.0.0\"\n\nes-set-tostringtag@^2.0.1:\n  version \"2.0.1\"\n  resolved \"https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8\"\n  integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==\n  dependencies:\n    get-intrinsic \"^1.1.3\"\n    has \"^1.0.3\"\n    has-tostringtag \"^1.0.0\"\n\nes-shim-unscopables@^1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241\"\n  integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==\n  dependencies:\n    has \"^1.0.3\"\n\nes-to-primitive@^1.2.1:\n  version \"1.2.1\"\n  resolved \"https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a\"\n  integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==\n  dependencies:\n    is-callable \"^1.1.4\"\n    is-date-object \"^1.0.1\"\n    is-symbol \"^1.0.2\"\n\nes6-promise@^4.1.0:\n  version \"4.2.8\"\n  resolved \"https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a\"\n  integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==\n\nesbuild@^0.12.9:\n  version \"0.12.29\"\n  resolved \"https://registry.yarnpkg.com/esbuild/-/esbuild-0.12.29.tgz#be602db7c4dc78944a9dbde0d1ea19d36c1f882d\"\n  integrity sha512-w/XuoBCSwepyiZtIRsKsetiLDUVGPVw1E/R3VTFSecIy8UR7Cq3SOtwKHJMFoVqqVG36aGkzh4e8BvpO1Fdc7g==\n\nesbuild@~0.23.0:\n  version \"0.23.1\"\n  resolved \"https://registry.yarnpkg.com/esbuild/-/esbuild-0.23.1.tgz#40fdc3f9265ec0beae6f59824ade1bd3d3d2dab8\"\n  integrity sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==\n  optionalDependencies:\n    \"@esbuild/aix-ppc64\" \"0.23.1\"\n    \"@esbuild/android-arm\" \"0.23.1\"\n    \"@esbuild/android-arm64\" \"0.23.1\"\n    \"@esbuild/android-x64\" \"0.23.1\"\n    \"@esbuild/darwin-arm64\" \"0.23.1\"\n    \"@esbuild/darwin-x64\" \"0.23.1\"\n    \"@esbuild/freebsd-arm64\" \"0.23.1\"\n    \"@esbuild/freebsd-x64\" \"0.23.1\"\n    \"@esbuild/linux-arm\" \"0.23.1\"\n    \"@esbuild/linux-arm64\" \"0.23.1\"\n    \"@esbuild/linux-ia32\" \"0.23.1\"\n    \"@esbuild/linux-loong64\" \"0.23.1\"\n    \"@esbuild/linux-mips64el\" \"0.23.1\"\n    \"@esbuild/linux-ppc64\" \"0.23.1\"\n    \"@esbuild/linux-riscv64\" \"0.23.1\"\n    \"@esbuild/linux-s390x\" \"0.23.1\"\n    \"@esbuild/linux-x64\" \"0.23.1\"\n    \"@esbuild/netbsd-x64\" \"0.23.1\"\n    \"@esbuild/openbsd-arm64\" \"0.23.1\"\n    \"@esbuild/openbsd-x64\" \"0.23.1\"\n    \"@esbuild/sunos-x64\" \"0.23.1\"\n    \"@esbuild/win32-arm64\" \"0.23.1\"\n    \"@esbuild/win32-ia32\" \"0.23.1\"\n    \"@esbuild/win32-x64\" \"0.23.1\"\n\nescalade@^3.1.0:\n  version \"3.1.0\"\n  resolved \"https://registry.yarnpkg.com/escalade/-/escalade-3.1.0.tgz#e8e2d7c7a8b76f6ee64c2181d6b8151441602d4e\"\n  integrity sha512-mAk+hPSO8fLDkhV7V0dXazH5pDc6MrjBTPyD3VeKzxnVFjH1MIxbCdqGZB9O8+EwWakZs3ZCbDS4IpRt79V1ig==\n\nescalade@^3.1.1:\n  version \"3.1.1\"\n  resolved \"https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40\"\n  integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==\n\nescape-html@~1.0.3:\n  version \"1.0.3\"\n  resolved \"https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988\"\n  integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=\n\nescape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:\n  version \"1.0.5\"\n  resolved \"https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4\"\n  integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=\n\nescape-string-regexp@^4.0.0:\n  version \"4.0.0\"\n  resolved \"https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34\"\n  integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==\n\nescodegen@^1.11.1:\n  version \"1.14.3\"\n  resolved \"https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503\"\n  integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==\n  dependencies:\n    esprima \"^4.0.1\"\n    estraverse \"^4.2.0\"\n    esutils \"^2.0.2\"\n    optionator \"^0.8.1\"\n  optionalDependencies:\n    source-map \"~0.6.1\"\n\neslint-config-next@^13.4.4:\n  version \"13.4.4\"\n  resolved \"https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-13.4.4.tgz#95356e96f3796ad0587fa2aaa51ec4a81e71cedc\"\n  integrity sha512-z/PMbm6L0iC/fwISULxe8IVy4DtNqZk2wQY711o35klenq70O6ns82A8yuMVCFjHC0DIyB2lyugesRtuk9u8dQ==\n  dependencies:\n    \"@next/eslint-plugin-next\" \"13.4.4\"\n    \"@rushstack/eslint-patch\" \"^1.1.3\"\n    \"@typescript-eslint/parser\" \"^5.42.0\"\n    eslint-import-resolver-node \"^0.3.6\"\n    eslint-import-resolver-typescript \"^3.5.2\"\n    eslint-plugin-import \"^2.26.0\"\n    eslint-plugin-jsx-a11y \"^6.5.1\"\n    eslint-plugin-react \"^7.31.7\"\n    eslint-plugin-react-hooks \"^4.5.0\"\n\neslint-config-prettier@^6.0.0:\n  version \"6.7.0\"\n  resolved \"https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.7.0.tgz#9a876952e12df2b284adbd3440994bf1f39dfbb9\"\n  integrity sha512-FamQVKM3jjUVwhG4hEMnbtsq7xOIDm+SY5iBPfR8gKsJoAB2IQnNF+bk1+8Fy44Nq7PPJaLvkRxILYdJWoguKQ==\n  dependencies:\n    get-stdin \"^6.0.0\"\n\neslint-config-react-app@^5.2.1:\n  version \"5.2.1\"\n  resolved \"https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-5.2.1.tgz#698bf7aeee27f0cea0139eaef261c7bf7dd623df\"\n  integrity sha512-pGIZ8t0mFLcV+6ZirRgYK6RVqUIKRIi9MmgzUEmrIknsn3AdO0I32asO86dJgloHq+9ZPl8UIg8mYrvgP5u2wQ==\n  dependencies:\n    confusing-browser-globals \"^1.0.9\"\n\neslint-import-resolver-node@^0.3.2:\n  version \"0.3.2\"\n  resolved \"https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a\"\n  integrity sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==\n  dependencies:\n    debug \"^2.6.9\"\n    resolve \"^1.5.0\"\n\neslint-import-resolver-node@^0.3.6, eslint-import-resolver-node@^0.3.7:\n  version \"0.3.7\"\n  resolved \"https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz#83b375187d412324a1963d84fa664377a23eb4d7\"\n  integrity sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==\n  dependencies:\n    debug \"^3.2.7\"\n    is-core-module \"^2.11.0\"\n    resolve \"^1.22.1\"\n\neslint-import-resolver-typescript@^3.5.2:\n  version \"3.5.5\"\n  resolved \"https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.5.tgz#0a9034ae7ed94b254a360fbea89187b60ea7456d\"\n  integrity sha512-TdJqPHs2lW5J9Zpe17DZNQuDnox4xo2o+0tE7Pggain9Rbc19ik8kFtXdxZ250FVx2kF4vlt2RSf4qlUpG7bhw==\n  dependencies:\n    debug \"^4.3.4\"\n    enhanced-resolve \"^5.12.0\"\n    eslint-module-utils \"^2.7.4\"\n    get-tsconfig \"^4.5.0\"\n    globby \"^13.1.3\"\n    is-core-module \"^2.11.0\"\n    is-glob \"^4.0.3\"\n    synckit \"^0.8.5\"\n\neslint-module-utils@^2.4.1:\n  version \"2.5.0\"\n  resolved \"https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.5.0.tgz#cdf0b40d623032274ccd2abd7e64c4e524d6e19c\"\n  integrity sha512-kCo8pZaNz2dsAW7nCUjuVoI11EBXXpIzfNxmaoLhXoRDOnqXLC4iSGVRdZPhOitfbdEfMEfKOiENaK6wDPZEGw==\n  dependencies:\n    debug \"^2.6.9\"\n    pkg-dir \"^2.0.0\"\n\neslint-module-utils@^2.7.4:\n  version \"2.8.0\"\n  resolved \"https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49\"\n  integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==\n  dependencies:\n    debug \"^3.2.7\"\n\neslint-plugin-eslint-comments@^3.1.1:\n  version \"3.2.0\"\n  resolved \"https://registry.yarnpkg.com/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz#9e1cd7b4413526abb313933071d7aba05ca12ffa\"\n  integrity sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==\n  dependencies:\n    escape-string-regexp \"^1.0.5\"\n    ignore \"^5.0.5\"\n\neslint-plugin-eslint-plugin@^2.1.0:\n  version \"2.1.0\"\n  resolved \"https://registry.yarnpkg.com/eslint-plugin-eslint-plugin/-/eslint-plugin-eslint-plugin-2.1.0.tgz#a7a00f15a886957d855feacaafee264f039e62d5\"\n  integrity sha512-kT3A/ZJftt28gbl/Cv04qezb/NQ1dwYIbi8lyf806XMxkus7DvOVCLIfTXMrorp322Pnoez7+zabXH29tADIDg==\n\neslint-plugin-flowtype@2.50.3:\n  version \"2.50.3\"\n  resolved \"https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.50.3.tgz#61379d6dce1d010370acd6681740fd913d68175f\"\n  integrity sha512-X+AoKVOr7Re0ko/yEXyM5SSZ0tazc6ffdIOocp2fFUlWoDt7DV0Bz99mngOkAFLOAWjqRA5jPwqUCbrx13XoxQ==\n  dependencies:\n    lodash \"^4.17.10\"\n\neslint-plugin-flowtype@^3.13.0:\n  version \"3.13.0\"\n  resolved \"https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-3.13.0.tgz#e241ebd39c0ce519345a3f074ec1ebde4cf80f2c\"\n  integrity sha512-bhewp36P+t7cEV0b6OdmoRWJCBYRiHFlqPZAG1oS3SF+Y0LQkeDvFSM4oxoxvczD1OdONCXMlJfQFiWLcV9urw==\n  dependencies:\n    lodash \"^4.17.15\"\n\neslint-plugin-import@^2.18.2:\n  version \"2.19.1\"\n  resolved \"https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.19.1.tgz#5654e10b7839d064dd0d46cd1b88ec2133a11448\"\n  integrity sha512-x68131aKoCZlCae7rDXKSAQmbT5DQuManyXo2sK6fJJ0aK5CWAkv6A6HJZGgqC8IhjQxYPgo6/IY4Oz8AFsbBw==\n  dependencies:\n    array-includes \"^3.0.3\"\n    array.prototype.flat \"^1.2.1\"\n    contains-path \"^0.1.0\"\n    debug \"^2.6.9\"\n    doctrine \"1.5.0\"\n    eslint-import-resolver-node \"^0.3.2\"\n    eslint-module-utils \"^2.4.1\"\n    has \"^1.0.3\"\n    minimatch \"^3.0.4\"\n    object.values \"^1.1.0\"\n    read-pkg-up \"^2.0.0\"\n    resolve \"^1.12.0\"\n\neslint-plugin-import@^2.26.0:\n  version \"2.27.5\"\n  resolved \"https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz#876a6d03f52608a3e5bb439c2550588e51dd6c65\"\n  integrity sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==\n  dependencies:\n    array-includes \"^3.1.6\"\n    array.prototype.flat \"^1.3.1\"\n    array.prototype.flatmap \"^1.3.1\"\n    debug \"^3.2.7\"\n    doctrine \"^2.1.0\"\n    eslint-import-resolver-node \"^0.3.7\"\n    eslint-module-utils \"^2.7.4\"\n    has \"^1.0.3\"\n    is-core-module \"^2.11.0\"\n    is-glob \"^4.0.3\"\n    minimatch \"^3.1.2\"\n    object.values \"^1.1.6\"\n    resolve \"^1.22.1\"\n    semver \"^6.3.0\"\n    tsconfig-paths \"^3.14.1\"\n\neslint-plugin-jest@22.4.1:\n  version \"22.4.1\"\n  resolved \"https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-22.4.1.tgz#a5fd6f7a2a41388d16f527073b778013c5189a9c\"\n  integrity sha512-gcLfn6P2PrFAVx3AobaOzlIEevpAEf9chTpFZz7bYfc7pz8XRv7vuKTIE4hxPKZSha6XWKKplDQ0x9Pq8xX2mg==\n\neslint-plugin-jsx-a11y@^6.2.3:\n  version \"6.2.3\"\n  resolved \"https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.3.tgz#b872a09d5de51af70a97db1eea7dc933043708aa\"\n  integrity sha512-CawzfGt9w83tyuVekn0GDPU9ytYtxyxyFZ3aSWROmnRRFQFT2BiPJd7jvRdzNDi6oLWaS2asMeYSNMjWTV4eNg==\n  dependencies:\n    \"@babel/runtime\" \"^7.4.5\"\n    aria-query \"^3.0.0\"\n    array-includes \"^3.0.3\"\n    ast-types-flow \"^0.0.7\"\n    axobject-query \"^2.0.2\"\n    damerau-levenshtein \"^1.0.4\"\n    emoji-regex \"^7.0.2\"\n    has \"^1.0.3\"\n    jsx-ast-utils \"^2.2.1\"\n\neslint-plugin-jsx-a11y@^6.5.1:\n  version \"6.7.1\"\n  resolved \"https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz#fca5e02d115f48c9a597a6894d5bcec2f7a76976\"\n  integrity sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==\n  dependencies:\n    \"@babel/runtime\" \"^7.20.7\"\n    aria-query \"^5.1.3\"\n    array-includes \"^3.1.6\"\n    array.prototype.flatmap \"^1.3.1\"\n    ast-types-flow \"^0.0.7\"\n    axe-core \"^4.6.2\"\n    axobject-query \"^3.1.1\"\n    damerau-levenshtein \"^1.0.8\"\n    emoji-regex \"^9.2.2\"\n    has \"^1.0.3\"\n    jsx-ast-utils \"^3.3.3\"\n    language-tags \"=1.0.5\"\n    minimatch \"^3.1.2\"\n    object.entries \"^1.1.6\"\n    object.fromentries \"^2.0.6\"\n    semver \"^6.3.0\"\n\neslint-plugin-prettier@2.6.2:\n  version \"2.6.2\"\n  resolved \"https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-2.6.2.tgz#71998c60aedfa2141f7bfcbf9d1c459bf98b4fad\"\n  integrity sha512-tGek5clmW5swrAx1mdPYM8oThrBE83ePh7LeseZHBWfHVGrHPhKn7Y5zgRMbU/9D5Td9K4CEmUPjGxA7iw98Og==\n  dependencies:\n    fast-diff \"^1.1.1\"\n    jest-docblock \"^21.0.0\"\n\neslint-plugin-prettier@^3.1.0:\n  version \"3.1.1\"\n  resolved \"https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.1.tgz#507b8562410d02a03f0ddc949c616f877852f2ba\"\n  integrity sha512-A+TZuHZ0KU0cnn56/9mfR7/KjUJ9QNVXUhwvRFSR7PGPe0zQR6PTkmyqg1AtUUEOzTqeRsUwyKFh0oVZKVCrtA==\n  dependencies:\n    prettier-linter-helpers \"^1.0.0\"\n\neslint-plugin-prettier@^4.0.0:\n  version \"4.2.1\"\n  resolved \"https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b\"\n  integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==\n  dependencies:\n    prettier-linter-helpers \"^1.0.0\"\n\neslint-plugin-react-hooks@^1.5.1:\n  version \"1.7.0\"\n  resolved \"https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-1.7.0.tgz#6210b6d5a37205f0b92858f895a4e827020a7d04\"\n  integrity sha512-iXTCFcOmlWvw4+TOE8CLWj6yX1GwzT0Y6cUfHHZqWnSk144VmVIRcVGtUAzrLES7C798lmvnt02C7rxaOX1HNA==\n\neslint-plugin-react-hooks@^2.2.0:\n  version \"2.3.0\"\n  resolved \"https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-2.3.0.tgz#53e073961f1f5ccf8dd19558036c1fac8c29d99a\"\n  integrity sha512-gLKCa52G4ee7uXzdLiorca7JIQZPPXRAQDXV83J4bUEeUuc5pIEyZYAZ45Xnxe5IuupxEqHS+hUhSLIimK1EMw==\n\neslint-plugin-react-hooks@^4.5.0:\n  version \"4.6.0\"\n  resolved \"https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3\"\n  integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==\n\neslint-plugin-react-native-globals@^0.1.1:\n  version \"0.1.2\"\n  resolved \"https://registry.yarnpkg.com/eslint-plugin-react-native-globals/-/eslint-plugin-react-native-globals-0.1.2.tgz#ee1348bc2ceb912303ce6bdbd22e2f045ea86ea2\"\n  integrity sha512-9aEPf1JEpiTjcFAmmyw8eiIXmcNZOqaZyHO77wgm0/dWfT/oxC1SrIq8ET38pMxHYrcB6Uew+TzUVsBeczF88g==\n\neslint-plugin-react-native@3.6.0:\n  version \"3.6.0\"\n  resolved \"https://registry.yarnpkg.com/eslint-plugin-react-native/-/eslint-plugin-react-native-3.6.0.tgz#7cad3b7c6159df6d26fe3252c6c5417a17f27b4b\"\n  integrity sha512-BEQcHZ06hZSBYWFVuNEq0xuui5VEsWpHDsZGBtfadHfCRqRMUrkYPgdDb3bpc60qShHE83kqIv59uKdinEg91Q==\n  dependencies:\n    eslint-plugin-react-native-globals \"^0.1.1\"\n\neslint-plugin-react@7.12.4:\n  version \"7.12.4\"\n  resolved \"https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.12.4.tgz#b1ecf26479d61aee650da612e425c53a99f48c8c\"\n  integrity sha512-1puHJkXJY+oS1t467MjbqjvX53uQ05HXwjqDgdbGBqf5j9eeydI54G3KwiJmWciQ0HTBacIKw2jgwSBSH3yfgQ==\n  dependencies:\n    array-includes \"^3.0.3\"\n    doctrine \"^2.1.0\"\n    has \"^1.0.3\"\n    jsx-ast-utils \"^2.0.1\"\n    object.fromentries \"^2.0.0\"\n    prop-types \"^15.6.2\"\n    resolve \"^1.9.0\"\n\neslint-plugin-react@^7.14.3:\n  version \"7.17.0\"\n  resolved \"https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.17.0.tgz#a31b3e134b76046abe3cd278e7482bd35a1d12d7\"\n  integrity sha512-ODB7yg6lxhBVMeiH1c7E95FLD4E/TwmFjltiU+ethv7KPdCwgiFuOZg9zNRHyufStTDLl/dEFqI2Q1VPmCd78A==\n  dependencies:\n    array-includes \"^3.0.3\"\n    doctrine \"^2.1.0\"\n    eslint-plugin-eslint-plugin \"^2.1.0\"\n    has \"^1.0.3\"\n    jsx-ast-utils \"^2.2.3\"\n    object.entries \"^1.1.0\"\n    object.fromentries \"^2.0.1\"\n    object.values \"^1.1.0\"\n    prop-types \"^15.7.2\"\n    resolve \"^1.13.1\"\n\neslint-plugin-react@^7.31.7:\n  version \"7.32.2\"\n  resolved \"https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz#e71f21c7c265ebce01bcbc9d0955170c55571f10\"\n  integrity sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==\n  dependencies:\n    array-includes \"^3.1.6\"\n    array.prototype.flatmap \"^1.3.1\"\n    array.prototype.tosorted \"^1.1.1\"\n    doctrine \"^2.1.0\"\n    estraverse \"^5.3.0\"\n    jsx-ast-utils \"^2.4.1 || ^3.0.0\"\n    minimatch \"^3.1.2\"\n    object.entries \"^1.1.6\"\n    object.fromentries \"^2.0.6\"\n    object.hasown \"^1.1.2\"\n    object.values \"^1.1.6\"\n    prop-types \"^15.8.1\"\n    resolve \"^2.0.0-next.4\"\n    semver \"^6.3.0\"\n    string.prototype.matchall \"^4.0.8\"\n\neslint-scope@3.7.1:\n  version \"3.7.1\"\n  resolved \"https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8\"\n  integrity sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=\n  dependencies:\n    esrecurse \"^4.1.0\"\n    estraverse \"^4.1.1\"\n\neslint-scope@^4.0.0:\n  version \"4.0.3\"\n  resolved \"https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848\"\n  integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==\n  dependencies:\n    esrecurse \"^4.1.0\"\n    estraverse \"^4.1.1\"\n\neslint-scope@^5.0.0:\n  version \"5.0.0\"\n  resolved \"https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9\"\n  integrity sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==\n  dependencies:\n    esrecurse \"^4.1.0\"\n    estraverse \"^4.1.1\"\n\neslint-scope@^5.1.1:\n  version \"5.1.1\"\n  resolved \"https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c\"\n  integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==\n  dependencies:\n    esrecurse \"^4.3.0\"\n    estraverse \"^4.1.1\"\n\neslint-utils@^1.3.1, eslint-utils@^1.4.3:\n  version \"1.4.3\"\n  resolved \"https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f\"\n  integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==\n  dependencies:\n    eslint-visitor-keys \"^1.1.0\"\n\neslint-utils@^2.1.0:\n  version \"2.1.0\"\n  resolved \"https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27\"\n  integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==\n  dependencies:\n    eslint-visitor-keys \"^1.1.0\"\n\neslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0:\n  version \"1.1.0\"\n  resolved \"https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2\"\n  integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==\n\neslint-visitor-keys@^1.3.0:\n  version \"1.3.0\"\n  resolved \"https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e\"\n  integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==\n\neslint-visitor-keys@^2.0.0:\n  version \"2.1.0\"\n  resolved \"https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303\"\n  integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==\n\neslint-visitor-keys@^3.3.0:\n  version \"3.4.1\"\n  resolved \"https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz#c22c48f48942d08ca824cc526211ae400478a994\"\n  integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==\n\neslint@^6.1.0:\n  version \"6.7.2\"\n  resolved \"https://registry.yarnpkg.com/eslint/-/eslint-6.7.2.tgz#c17707ca4ad7b2d8af986a33feba71e18a9fecd1\"\n  integrity sha512-qMlSWJaCSxDFr8fBPvJM9kJwbazrhNcBU3+DszDW1OlEwKBBRWsJc7NJFelvwQpanHCR14cOLD41x8Eqvo3Nng==\n  dependencies:\n    \"@babel/code-frame\" \"^7.0.0\"\n    ajv \"^6.10.0\"\n    chalk \"^2.1.0\"\n    cross-spawn \"^6.0.5\"\n    debug \"^4.0.1\"\n    doctrine \"^3.0.0\"\n    eslint-scope \"^5.0.0\"\n    eslint-utils \"^1.4.3\"\n    eslint-visitor-keys \"^1.1.0\"\n    espree \"^6.1.2\"\n    esquery \"^1.0.1\"\n    esutils \"^2.0.2\"\n    file-entry-cache \"^5.0.1\"\n    functional-red-black-tree \"^1.0.1\"\n    glob-parent \"^5.0.0\"\n    globals \"^12.1.0\"\n    ignore \"^4.0.6\"\n    import-fresh \"^3.0.0\"\n    imurmurhash \"^0.1.4\"\n    inquirer \"^7.0.0\"\n    is-glob \"^4.0.0\"\n    js-yaml \"^3.13.1\"\n    json-stable-stringify-without-jsonify \"^1.0.1\"\n    levn \"^0.3.0\"\n    lodash \"^4.17.14\"\n    minimatch \"^3.0.4\"\n    mkdirp \"^0.5.1\"\n    natural-compare \"^1.4.0\"\n    optionator \"^0.8.3\"\n    progress \"^2.0.0\"\n    regexpp \"^2.0.1\"\n    semver \"^6.1.2\"\n    strip-ansi \"^5.2.0\"\n    strip-json-comments \"^3.0.1\"\n    table \"^5.2.3\"\n    text-table \"^0.2.0\"\n    v8-compile-cache \"^2.0.3\"\n\neslint@^7.32.0:\n  version \"7.32.0\"\n  resolved \"https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d\"\n  integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==\n  dependencies:\n    \"@babel/code-frame\" \"7.12.11\"\n    \"@eslint/eslintrc\" \"^0.4.3\"\n    \"@humanwhocodes/config-array\" \"^0.5.0\"\n    ajv \"^6.10.0\"\n    chalk \"^4.0.0\"\n    cross-spawn \"^7.0.2\"\n    debug \"^4.0.1\"\n    doctrine \"^3.0.0\"\n    enquirer \"^2.3.5\"\n    escape-string-regexp \"^4.0.0\"\n    eslint-scope \"^5.1.1\"\n    eslint-utils \"^2.1.0\"\n    eslint-visitor-keys \"^2.0.0\"\n    espree \"^7.3.1\"\n    esquery \"^1.4.0\"\n    esutils \"^2.0.2\"\n    fast-deep-equal \"^3.1.3\"\n    file-entry-cache \"^6.0.1\"\n    functional-red-black-tree \"^1.0.1\"\n    glob-parent \"^5.1.2\"\n    globals \"^13.6.0\"\n    ignore \"^4.0.6\"\n    import-fresh \"^3.0.0\"\n    imurmurhash \"^0.1.4\"\n    is-glob \"^4.0.0\"\n    js-yaml \"^3.13.1\"\n    json-stable-stringify-without-jsonify \"^1.0.1\"\n    levn \"^0.4.1\"\n    lodash.merge \"^4.6.2\"\n    minimatch \"^3.0.4\"\n    natural-compare \"^1.4.0\"\n    optionator \"^0.9.1\"\n    progress \"^2.0.0\"\n    regexpp \"^3.1.0\"\n    semver \"^7.2.1\"\n    strip-ansi \"^6.0.0\"\n    strip-json-comments \"^3.1.0\"\n    table \"^6.0.9\"\n    text-table \"^0.2.0\"\n    v8-compile-cache \"^2.0.3\"\n\nesm@^3.2.25:\n  version \"3.2.25\"\n  resolved \"https://registry.yarnpkg.com/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10\"\n  integrity sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==\n\nespree@^6.1.2:\n  version \"6.1.2\"\n  resolved \"https://registry.yarnpkg.com/espree/-/espree-6.1.2.tgz#6c272650932b4f91c3714e5e7b5f5e2ecf47262d\"\n  integrity sha512-2iUPuuPP+yW1PZaMSDM9eyVf8D5P0Hi8h83YtZ5bPc/zHYjII5khoixIUTMO794NOY8F/ThF1Bo8ncZILarUTA==\n  dependencies:\n    acorn \"^7.1.0\"\n    acorn-jsx \"^5.1.0\"\n    eslint-visitor-keys \"^1.1.0\"\n\nespree@^7.3.0, espree@^7.3.1:\n  version \"7.3.1\"\n  resolved \"https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6\"\n  integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==\n  dependencies:\n    acorn \"^7.4.0\"\n    acorn-jsx \"^5.3.1\"\n    eslint-visitor-keys \"^1.3.0\"\n\nesprima@^4.0.0, esprima@^4.0.1:\n  version \"4.0.1\"\n  resolved \"https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71\"\n  integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==\n\nesquery@^1.0.1:\n  version \"1.0.1\"\n  resolved \"https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708\"\n  integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==\n  dependencies:\n    estraverse \"^4.0.0\"\n\nesquery@^1.4.0:\n  version \"1.5.0\"\n  resolved \"https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b\"\n  integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==\n  dependencies:\n    estraverse \"^5.1.0\"\n\nesrecurse@^4.1.0:\n  version \"4.2.1\"\n  resolved \"https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf\"\n  integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==\n  dependencies:\n    estraverse \"^4.1.0\"\n\nesrecurse@^4.3.0:\n  version \"4.3.0\"\n  resolved \"https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921\"\n  integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==\n  dependencies:\n    estraverse \"^5.2.0\"\n\nestraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0:\n  version \"4.3.0\"\n  resolved \"https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d\"\n  integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==\n\nestraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0:\n  version \"5.3.0\"\n  resolved \"https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123\"\n  integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==\n\nestree-walker@^0.6.1:\n  version \"0.6.1\"\n  resolved \"https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362\"\n  integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==\n\nestree-walker@^1.0.1:\n  version \"1.0.1\"\n  resolved \"https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700\"\n  integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==\n\nesutils@^2.0.2:\n  version \"2.0.3\"\n  resolved \"https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64\"\n  integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==\n\netag@~1.8.1:\n  version \"1.8.1\"\n  resolved \"https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887\"\n  integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=\n\nevent-target-shim@^1.0.5:\n  version \"1.1.1\"\n  resolved \"https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-1.1.1.tgz#a86e5ee6bdaa16054475da797ccddf0c55698491\"\n  integrity sha1-qG5e5r2qFgVEddp5fM3fDFVphJE=\n\neventemitter3@^3.0.0:\n  version \"3.1.2\"\n  resolved \"https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7\"\n  integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==\n\nevents@^1.1.0:\n  version \"1.1.1\"\n  resolved \"https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924\"\n  integrity sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==\n\nexec-sh@^0.2.0:\n  version \"0.2.2\"\n  resolved \"https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.2.tgz#2a5e7ffcbd7d0ba2755bdecb16e5a427dfbdec36\"\n  integrity sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw==\n  dependencies:\n    merge \"^1.2.0\"\n\nexec-sh@^0.3.2:\n  version \"0.3.4\"\n  resolved \"https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.4.tgz#3a018ceb526cc6f6df2bb504b2bfe8e3a4934ec5\"\n  integrity sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==\n\nexeca@^0.7.0:\n  version \"0.7.0\"\n  resolved \"https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777\"\n  integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=\n  dependencies:\n    cross-spawn \"^5.0.1\"\n    get-stream \"^3.0.0\"\n    is-stream \"^1.1.0\"\n    npm-run-path \"^2.0.0\"\n    p-finally \"^1.0.0\"\n    signal-exit \"^3.0.0\"\n    strip-eof \"^1.0.0\"\n\nexeca@^1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8\"\n  integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==\n  dependencies:\n    cross-spawn \"^6.0.0\"\n    get-stream \"^4.0.0\"\n    is-stream \"^1.1.0\"\n    npm-run-path \"^2.0.0\"\n    p-finally \"^1.0.0\"\n    signal-exit \"^3.0.0\"\n    strip-eof \"^1.0.0\"\n\nexeca@^3.2.0:\n  version \"3.4.0\"\n  resolved \"https://registry.yarnpkg.com/execa/-/execa-3.4.0.tgz#c08ed4550ef65d858fac269ffc8572446f37eb89\"\n  integrity sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==\n  dependencies:\n    cross-spawn \"^7.0.0\"\n    get-stream \"^5.0.0\"\n    human-signals \"^1.1.1\"\n    is-stream \"^2.0.0\"\n    merge-stream \"^2.0.0\"\n    npm-run-path \"^4.0.0\"\n    onetime \"^5.1.0\"\n    p-finally \"^2.0.0\"\n    signal-exit \"^3.0.2\"\n    strip-final-newline \"^2.0.0\"\n\nexeca@^4.0.3:\n  version \"4.0.3\"\n  resolved \"https://registry.yarnpkg.com/execa/-/execa-4.0.3.tgz#0a34dabbad6d66100bd6f2c576c8669403f317f2\"\n  integrity sha512-WFDXGHckXPWZX19t1kCsXzOpqX9LWYNqn4C+HqZlk/V0imTkzJZqf87ZBhvpHaftERYknpk0fjSylnXVlVgI0A==\n  dependencies:\n    cross-spawn \"^7.0.0\"\n    get-stream \"^5.0.0\"\n    human-signals \"^1.1.1\"\n    is-stream \"^2.0.0\"\n    merge-stream \"^2.0.0\"\n    npm-run-path \"^4.0.0\"\n    onetime \"^5.1.0\"\n    signal-exit \"^3.0.2\"\n    strip-final-newline \"^2.0.0\"\n\nexeca@^5.0.0:\n  version \"5.1.1\"\n  resolved \"https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd\"\n  integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==\n  dependencies:\n    cross-spawn \"^7.0.3\"\n    get-stream \"^6.0.0\"\n    human-signals \"^2.1.0\"\n    is-stream \"^2.0.0\"\n    merge-stream \"^2.0.0\"\n    npm-run-path \"^4.0.1\"\n    onetime \"^5.1.2\"\n    signal-exit \"^3.0.3\"\n    strip-final-newline \"^2.0.0\"\n\nexeca@^7.1.1:\n  version \"7.1.1\"\n  resolved \"https://registry.yarnpkg.com/execa/-/execa-7.1.1.tgz#3eb3c83d239488e7b409d48e8813b76bb55c9c43\"\n  integrity sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==\n  dependencies:\n    cross-spawn \"^7.0.3\"\n    get-stream \"^6.0.1\"\n    human-signals \"^4.3.0\"\n    is-stream \"^3.0.0\"\n    merge-stream \"^2.0.0\"\n    npm-run-path \"^5.1.0\"\n    onetime \"^6.0.0\"\n    signal-exit \"^3.0.7\"\n    strip-final-newline \"^3.0.0\"\n\nexit@^0.1.2:\n  version \"0.1.2\"\n  resolved \"https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c\"\n  integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=\n\nexpand-brackets@^0.1.4:\n  version \"0.1.5\"\n  resolved \"https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b\"\n  integrity sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=\n  dependencies:\n    is-posix-bracket \"^0.1.0\"\n\nexpand-brackets@^2.1.4:\n  version \"2.1.4\"\n  resolved \"https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622\"\n  integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI=\n  dependencies:\n    debug \"^2.3.3\"\n    define-property \"^0.2.5\"\n    extend-shallow \"^2.0.1\"\n    posix-character-classes \"^0.1.0\"\n    regex-not \"^1.0.0\"\n    snapdragon \"^0.8.1\"\n    to-regex \"^3.0.1\"\n\nexpand-range@^1.8.1:\n  version \"1.8.2\"\n  resolved \"https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337\"\n  integrity sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=\n  dependencies:\n    fill-range \"^2.1.0\"\n\nexpect@^25.5.0:\n  version \"25.5.0\"\n  resolved \"https://registry.yarnpkg.com/expect/-/expect-25.5.0.tgz#f07f848712a2813bb59167da3fb828ca21f58bba\"\n  integrity sha512-w7KAXo0+6qqZZhovCaBVPSIqQp7/UTcx4M9uKt2m6pd2VB1voyC8JizLRqeEqud3AAVP02g+hbErDu5gu64tlA==\n  dependencies:\n    \"@jest/types\" \"^25.5.0\"\n    ansi-styles \"^4.0.0\"\n    jest-get-type \"^25.2.6\"\n    jest-matcher-utils \"^25.5.0\"\n    jest-message-util \"^25.5.0\"\n    jest-regex-util \"^25.2.6\"\n\nexpress@^4.17.1:\n  version \"4.18.2\"\n  resolved \"https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59\"\n  integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==\n  dependencies:\n    accepts \"~1.3.8\"\n    array-flatten \"1.1.1\"\n    body-parser \"1.20.1\"\n    content-disposition \"0.5.4\"\n    content-type \"~1.0.4\"\n    cookie \"0.5.0\"\n    cookie-signature \"1.0.6\"\n    debug \"2.6.9\"\n    depd \"2.0.0\"\n    encodeurl \"~1.0.2\"\n    escape-html \"~1.0.3\"\n    etag \"~1.8.1\"\n    finalhandler \"1.2.0\"\n    fresh \"0.5.2\"\n    http-errors \"2.0.0\"\n    merge-descriptors \"1.0.1\"\n    methods \"~1.1.2\"\n    on-finished \"2.4.1\"\n    parseurl \"~1.3.3\"\n    path-to-regexp \"0.1.7\"\n    proxy-addr \"~2.0.7\"\n    qs \"6.11.0\"\n    range-parser \"~1.2.1\"\n    safe-buffer \"5.2.1\"\n    send \"0.18.0\"\n    serve-static \"1.15.0\"\n    setprototypeof \"1.2.0\"\n    statuses \"2.0.1\"\n    type-is \"~1.6.18\"\n    utils-merge \"1.0.1\"\n    vary \"~1.1.2\"\n\nextend-shallow@^1.1.2:\n  version \"1.1.4\"\n  resolved \"https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-1.1.4.tgz#19d6bf94dfc09d76ba711f39b872d21ff4dd9071\"\n  integrity sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=\n  dependencies:\n    kind-of \"^1.1.0\"\n\nextend-shallow@^2.0.1:\n  version \"2.0.1\"\n  resolved \"https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f\"\n  integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=\n  dependencies:\n    is-extendable \"^0.1.0\"\n\nextend-shallow@^3.0.0, extend-shallow@^3.0.2:\n  version \"3.0.2\"\n  resolved \"https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8\"\n  integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=\n  dependencies:\n    assign-symbols \"^1.0.0\"\n    is-extendable \"^1.0.1\"\n\nextend@^3.0.0, extend@^3.0.2, extend@~3.0.2:\n  version \"3.0.2\"\n  resolved \"https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa\"\n  integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==\n\nextendable-error@^0.1.5:\n  version \"0.1.7\"\n  resolved \"https://registry.yarnpkg.com/extendable-error/-/extendable-error-0.1.7.tgz#60b9adf206264ac920058a7395685ae4670c2b96\"\n  integrity sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==\n\nexternal-editor@^2.0.4:\n  version \"2.2.0\"\n  resolved \"https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5\"\n  integrity sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==\n  dependencies:\n    chardet \"^0.4.0\"\n    iconv-lite \"^0.4.17\"\n    tmp \"^0.0.33\"\n\nexternal-editor@^3.0.3:\n  version \"3.1.0\"\n  resolved \"https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495\"\n  integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==\n  dependencies:\n    chardet \"^0.7.0\"\n    iconv-lite \"^0.4.24\"\n    tmp \"^0.0.33\"\n\nextglob@^0.3.1:\n  version \"0.3.2\"\n  resolved \"https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1\"\n  integrity sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=\n  dependencies:\n    is-extglob \"^1.0.0\"\n\nextglob@^2.0.4:\n  version \"2.0.4\"\n  resolved \"https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543\"\n  integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==\n  dependencies:\n    array-unique \"^0.3.2\"\n    define-property \"^1.0.0\"\n    expand-brackets \"^2.1.4\"\n    extend-shallow \"^2.0.1\"\n    fragment-cache \"^0.2.1\"\n    regex-not \"^1.0.0\"\n    snapdragon \"^0.8.1\"\n    to-regex \"^3.0.1\"\n\nextsprintf@1.3.0:\n  version \"1.3.0\"\n  resolved \"https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05\"\n  integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=\n\nextsprintf@^1.2.0:\n  version \"1.4.0\"\n  resolved \"https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f\"\n  integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=\n\nfancy-log@^1.3.2:\n  version \"1.3.3\"\n  resolved \"https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.3.tgz#dbc19154f558690150a23953a0adbd035be45fc7\"\n  integrity sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==\n  dependencies:\n    ansi-gray \"^0.1.1\"\n    color-support \"^1.1.3\"\n    parse-node-version \"^1.0.0\"\n    time-stamp \"^1.0.0\"\n\nfast-deep-equal@^2.0.1:\n  version \"2.0.1\"\n  resolved \"https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49\"\n  integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=\n\nfast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:\n  version \"3.1.3\"\n  resolved \"https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525\"\n  integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==\n\nfast-diff@^1.1.1, fast-diff@^1.1.2:\n  version \"1.2.0\"\n  resolved \"https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03\"\n  integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==\n\nfast-glob@^3.1.1:\n  version \"3.2.4\"\n  resolved \"https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.4.tgz#d20aefbf99579383e7f3cc66529158c9b98554d3\"\n  integrity sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==\n  dependencies:\n    \"@nodelib/fs.stat\" \"^2.0.2\"\n    \"@nodelib/fs.walk\" \"^1.2.3\"\n    glob-parent \"^5.1.0\"\n    merge2 \"^1.3.0\"\n    micromatch \"^4.0.2\"\n    picomatch \"^2.2.1\"\n\nfast-glob@^3.2.11, fast-glob@^3.2.12, fast-glob@^3.2.9:\n  version \"3.2.12\"\n  resolved \"https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80\"\n  integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==\n  dependencies:\n    \"@nodelib/fs.stat\" \"^2.0.2\"\n    \"@nodelib/fs.walk\" \"^1.2.3\"\n    glob-parent \"^5.1.2\"\n    merge2 \"^1.3.0\"\n    micromatch \"^4.0.4\"\n\nfast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0:\n  version \"2.0.0\"\n  resolved \"https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2\"\n  integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I=\n\nfast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6:\n  version \"2.0.6\"\n  resolved \"https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917\"\n  integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=\n\nfastq@^1.6.0:\n  version \"1.8.0\"\n  resolved \"https://registry.yarnpkg.com/fastq/-/fastq-1.8.0.tgz#550e1f9f59bbc65fe185cb6a9b4d95357107f481\"\n  integrity sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q==\n  dependencies:\n    reusify \"^1.0.4\"\n\nfb-watchman@^2.0.0:\n  version \"2.0.1\"\n  resolved \"https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85\"\n  integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==\n  dependencies:\n    bser \"2.1.1\"\n\nfbjs-css-vars@^1.0.0:\n  version \"1.0.2\"\n  resolved \"https://registry.yarnpkg.com/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz#216551136ae02fe255932c3ec8775f18e2c078b8\"\n  integrity sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==\n\nfbjs-scripts@^1.0.0:\n  version \"1.2.0\"\n  resolved \"https://registry.yarnpkg.com/fbjs-scripts/-/fbjs-scripts-1.2.0.tgz#069a0c0634242d10031c6460ef1fccefcdae8b27\"\n  integrity sha512-5krZ8T0Bf8uky0abPoCLrfa7Orxd8UH4Qq8hRUF2RZYNMu+FmEOrBc7Ib3YVONmxTXTlLAvyrrdrVmksDb2OqQ==\n  dependencies:\n    \"@babel/core\" \"^7.0.0\"\n    ansi-colors \"^1.0.1\"\n    babel-preset-fbjs \"^3.2.0\"\n    core-js \"^2.4.1\"\n    cross-spawn \"^5.1.0\"\n    fancy-log \"^1.3.2\"\n    object-assign \"^4.0.1\"\n    plugin-error \"^0.1.2\"\n    semver \"^5.1.0\"\n    through2 \"^2.0.0\"\n\nfbjs@^1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/fbjs/-/fbjs-1.0.0.tgz#52c215e0883a3c86af2a7a776ed51525ae8e0a5a\"\n  integrity sha512-MUgcMEJaFhCaF1QtWGnmq9ZDRAzECTCRAF7O6UZIlAlkTs1SasiX9aP0Iw7wfD2mJ7wDTNfg2w7u5fSCwJk1OA==\n  dependencies:\n    core-js \"^2.4.1\"\n    fbjs-css-vars \"^1.0.0\"\n    isomorphic-fetch \"^2.1.1\"\n    loose-envify \"^1.0.0\"\n    object-assign \"^4.1.0\"\n    promise \"^7.1.1\"\n    setimmediate \"^1.0.5\"\n    ua-parser-js \"^0.7.18\"\n\nfigures@^2.0.0:\n  version \"2.0.0\"\n  resolved \"https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962\"\n  integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=\n  dependencies:\n    escape-string-regexp \"^1.0.5\"\n\nfigures@^3.0.0:\n  version \"3.1.0\"\n  resolved \"https://registry.yarnpkg.com/figures/-/figures-3.1.0.tgz#4b198dd07d8d71530642864af2d45dd9e459c4ec\"\n  integrity sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg==\n  dependencies:\n    escape-string-regexp \"^1.0.5\"\n\nfigures@^3.2.0:\n  version \"3.2.0\"\n  resolved \"https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af\"\n  integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==\n  dependencies:\n    escape-string-regexp \"^1.0.5\"\n\nfile-entry-cache@^5.0.1:\n  version \"5.0.1\"\n  resolved \"https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c\"\n  integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==\n  dependencies:\n    flat-cache \"^2.0.1\"\n\nfile-entry-cache@^6.0.1:\n  version \"6.0.1\"\n  resolved \"https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027\"\n  integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==\n  dependencies:\n    flat-cache \"^3.0.4\"\n\nfile-uri-to-path@1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd\"\n  integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==\n\nfilename-regex@^2.0.0:\n  version \"2.0.1\"\n  resolved \"https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26\"\n  integrity sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=\n\nfill-range@^2.1.0:\n  version \"2.2.4\"\n  resolved \"https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565\"\n  integrity sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==\n  dependencies:\n    is-number \"^2.1.0\"\n    isobject \"^2.0.0\"\n    randomatic \"^3.0.0\"\n    repeat-element \"^1.1.2\"\n    repeat-string \"^1.5.2\"\n\nfill-range@^4.0.0:\n  version \"4.0.0\"\n  resolved \"https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7\"\n  integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=\n  dependencies:\n    extend-shallow \"^2.0.1\"\n    is-number \"^3.0.0\"\n    repeat-string \"^1.6.1\"\n    to-regex-range \"^2.1.0\"\n\nfill-range@^7.0.1:\n  version \"7.0.1\"\n  resolved \"https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40\"\n  integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==\n  dependencies:\n    to-regex-range \"^5.0.1\"\n\nfill-range@^7.1.1:\n  version \"7.1.1\"\n  resolved \"https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292\"\n  integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==\n  dependencies:\n    to-regex-range \"^5.0.1\"\n\nfinalhandler@1.1.2:\n  version \"1.1.2\"\n  resolved \"https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d\"\n  integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==\n  dependencies:\n    debug \"2.6.9\"\n    encodeurl \"~1.0.2\"\n    escape-html \"~1.0.3\"\n    on-finished \"~2.3.0\"\n    parseurl \"~1.3.3\"\n    statuses \"~1.5.0\"\n    unpipe \"~1.0.0\"\n\nfinalhandler@1.2.0:\n  version \"1.2.0\"\n  resolved \"https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32\"\n  integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==\n  dependencies:\n    debug \"2.6.9\"\n    encodeurl \"~1.0.2\"\n    escape-html \"~1.0.3\"\n    on-finished \"2.4.1\"\n    parseurl \"~1.3.3\"\n    statuses \"2.0.1\"\n    unpipe \"~1.0.0\"\n\nfind-cache-dir@^2.0.0:\n  version \"2.1.0\"\n  resolved \"https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7\"\n  integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==\n  dependencies:\n    commondir \"^1.0.1\"\n    make-dir \"^2.0.0\"\n    pkg-dir \"^3.0.0\"\n\nfind-cache-dir@^3.3.1:\n  version \"3.3.1\"\n  resolved \"https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880\"\n  integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==\n  dependencies:\n    commondir \"^1.0.1\"\n    make-dir \"^3.0.2\"\n    pkg-dir \"^4.1.0\"\n\nfind-up@^2.0.0, find-up@^2.1.0:\n  version \"2.1.0\"\n  resolved \"https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7\"\n  integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c=\n  dependencies:\n    locate-path \"^2.0.0\"\n\nfind-up@^3.0.0:\n  version \"3.0.0\"\n  resolved \"https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73\"\n  integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==\n  dependencies:\n    locate-path \"^3.0.0\"\n\nfind-up@^4.0.0, find-up@^4.1.0:\n  version \"4.1.0\"\n  resolved \"https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19\"\n  integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==\n  dependencies:\n    locate-path \"^5.0.0\"\n    path-exists \"^4.0.0\"\n\nfind-up@^5.0.0:\n  version \"5.0.0\"\n  resolved \"https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc\"\n  integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==\n  dependencies:\n    locate-path \"^6.0.0\"\n    path-exists \"^4.0.0\"\n\nfind-versions@^3.2.0:\n  version \"3.2.0\"\n  resolved \"https://registry.yarnpkg.com/find-versions/-/find-versions-3.2.0.tgz#10297f98030a786829681690545ef659ed1d254e\"\n  integrity sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==\n  dependencies:\n    semver-regex \"^2.0.0\"\n\nflat-cache@^2.0.1:\n  version \"2.0.1\"\n  resolved \"https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0\"\n  integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==\n  dependencies:\n    flatted \"^2.0.0\"\n    rimraf \"2.6.3\"\n    write \"1.0.3\"\n\nflat-cache@^3.0.4:\n  version \"3.0.4\"\n  resolved \"https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11\"\n  integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==\n  dependencies:\n    flatted \"^3.1.0\"\n    rimraf \"^3.0.2\"\n\nflatted@^2.0.0:\n  version \"2.0.1\"\n  resolved \"https://registry.yarnpkg.com/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08\"\n  integrity sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==\n\nflatted@^3.1.0:\n  version \"3.2.7\"\n  resolved \"https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787\"\n  integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==\n\nfor-each@^0.3.3:\n  version \"0.3.3\"\n  resolved \"https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e\"\n  integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==\n  dependencies:\n    is-callable \"^1.1.3\"\n\nfor-in@^1.0.1, for-in@^1.0.2:\n  version \"1.0.2\"\n  resolved \"https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80\"\n  integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=\n\nfor-own@^0.1.4:\n  version \"0.1.5\"\n  resolved \"https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce\"\n  integrity sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=\n  dependencies:\n    for-in \"^1.0.1\"\n\nforeach@^2.0.5:\n  version \"2.0.6\"\n  resolved \"https://registry.yarnpkg.com/foreach/-/foreach-2.0.6.tgz#87bcc8a1a0e74000ff2bf9802110708cfb02eb6e\"\n  integrity sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg==\n\nforever-agent@~0.6.1:\n  version \"0.6.1\"\n  resolved \"https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91\"\n  integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=\n\nform-data@^3.0.0:\n  version \"3.0.1\"\n  resolved \"https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f\"\n  integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==\n  dependencies:\n    asynckit \"^0.4.0\"\n    combined-stream \"^1.0.8\"\n    mime-types \"^2.1.12\"\n\nform-data@~2.3.2:\n  version \"2.3.3\"\n  resolved \"https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6\"\n  integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==\n  dependencies:\n    asynckit \"^0.4.0\"\n    combined-stream \"^1.0.6\"\n    mime-types \"^2.1.12\"\n\nforwarded@0.2.0:\n  version \"0.2.0\"\n  resolved \"https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811\"\n  integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==\n\nfraction.js@^4.2.0:\n  version \"4.2.0\"\n  resolved \"https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950\"\n  integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==\n\nfragment-cache@^0.2.1:\n  version \"0.2.1\"\n  resolved \"https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19\"\n  integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=\n  dependencies:\n    map-cache \"^0.2.2\"\n\nframer-motion@^1.11.1:\n  version \"1.11.1\"\n  resolved \"https://registry.yarnpkg.com/framer-motion/-/framer-motion-1.11.1.tgz#b031d1556a78854e0989b8c7e96418c6e15aa474\"\n  integrity sha512-CP6aYLPSivAWkq9UoSurefHBggxG85IT8ObYyWYkcZppgtjHzpwRzhaA8P0ljMGRqtcpeQAIybiGgPioBPlOSw==\n  dependencies:\n    \"@popmotion/easing\" \"^1.0.2\"\n    \"@popmotion/popcorn\" \"^0.4.2\"\n    framesync \"^4.0.4\"\n    hey-listen \"^1.0.8\"\n    popmotion \"9.0.0-beta-8\"\n    style-value-types \"^3.1.6\"\n    stylefire \"^7.0.2\"\n    tslib \"^1.10.0\"\n  optionalDependencies:\n    \"@emotion/is-prop-valid\" \"^0.8.2\"\n\nframesync@^4.0.0, framesync@^4.0.1, framesync@^4.0.4:\n  version \"4.1.0\"\n  resolved \"https://registry.yarnpkg.com/framesync/-/framesync-4.1.0.tgz#69a8db3ca432dc70d6a76ba882684a1497ef068a\"\n  integrity sha512-MmgZ4wCoeVxNbx2xp5hN/zPDCbLSKiDt4BbbslK7j/pM2lg5S0vhTNv1v8BCVb99JPIo6hXBFdwzU7Q4qcAaoQ==\n  dependencies:\n    hey-listen \"^1.0.5\"\n\nfresh@0.5.2:\n  version \"0.5.2\"\n  resolved \"https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7\"\n  integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=\n\nfs-extra@8.1.0, fs-extra@^8.1.0:\n  version \"8.1.0\"\n  resolved \"https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0\"\n  integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==\n  dependencies:\n    graceful-fs \"^4.2.0\"\n    jsonfile \"^4.0.0\"\n    universalify \"^0.1.0\"\n\nfs-extra@^1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/fs-extra/-/fs-extra-1.0.0.tgz#cd3ce5f7e7cb6145883fcae3191e9877f8587950\"\n  integrity sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=\n  dependencies:\n    graceful-fs \"^4.1.2\"\n    jsonfile \"^2.1.0\"\n    klaw \"^1.0.0\"\n\nfs-extra@^7.0.1:\n  version \"7.0.1\"\n  resolved \"https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9\"\n  integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==\n  dependencies:\n    graceful-fs \"^4.1.2\"\n    jsonfile \"^4.0.0\"\n    universalify \"^0.1.0\"\n\nfs-extra@^9.0.0:\n  version \"9.0.1\"\n  resolved \"https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc\"\n  integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==\n  dependencies:\n    at-least-node \"^1.0.0\"\n    graceful-fs \"^4.2.0\"\n    jsonfile \"^6.0.1\"\n    universalify \"^1.0.0\"\n\nfs.realpath@^1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f\"\n  integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=\n\nfsevents@2.3.2, fsevents@~2.3.2:\n  version \"2.3.2\"\n  resolved \"https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a\"\n  integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==\n\nfsevents@^1.2.3:\n  version \"1.2.13\"\n  resolved \"https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38\"\n  integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==\n  dependencies:\n    bindings \"^1.5.0\"\n    nan \"^2.12.1\"\n\nfsevents@^2.1.2:\n  version \"2.1.3\"\n  resolved \"https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e\"\n  integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==\n\nfsevents@~2.3.3:\n  version \"2.3.3\"\n  resolved \"https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6\"\n  integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==\n\nfunction-bind@^1.1.1:\n  version \"1.1.1\"\n  resolved \"https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d\"\n  integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==\n\nfunction.prototype.name@^1.1.5:\n  version \"1.1.5\"\n  resolved \"https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621\"\n  integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==\n  dependencies:\n    call-bind \"^1.0.2\"\n    define-properties \"^1.1.3\"\n    es-abstract \"^1.19.0\"\n    functions-have-names \"^1.2.2\"\n\nfunctional-red-black-tree@^1.0.1:\n  version \"1.0.1\"\n  resolved \"https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327\"\n  integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=\n\nfunctions-have-names@^1.2.2, functions-have-names@^1.2.3:\n  version \"1.2.3\"\n  resolved \"https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834\"\n  integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==\n\ngauge@~1.2.5:\n  version \"1.2.7\"\n  resolved \"https://registry.yarnpkg.com/gauge/-/gauge-1.2.7.tgz#e9cec5483d3d4ee0ef44b60a7d99e4935e136d93\"\n  integrity sha1-6c7FSD09TuDvRLYKfZnkk14TbZM=\n  dependencies:\n    ansi \"^0.3.0\"\n    has-unicode \"^2.0.0\"\n    lodash.pad \"^4.1.0\"\n    lodash.padend \"^4.1.0\"\n    lodash.padstart \"^4.1.0\"\n\ngensync@^1.0.0-beta.1:\n  version \"1.0.0-beta.2\"\n  resolved \"https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0\"\n  integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==\n\nget-caller-file@^1.0.1:\n  version \"1.0.3\"\n  resolved \"https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a\"\n  integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==\n\nget-caller-file@^2.0.1:\n  version \"2.0.5\"\n  resolved \"https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e\"\n  integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==\n\nget-intrinsic@^1.0.0:\n  version \"1.0.1\"\n  resolved \"https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.0.1.tgz#94a9768fcbdd0595a1c9273aacf4c89d075631be\"\n  integrity sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg==\n  dependencies:\n    function-bind \"^1.1.1\"\n    has \"^1.0.3\"\n    has-symbols \"^1.0.1\"\n\nget-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0:\n  version \"1.2.1\"\n  resolved \"https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82\"\n  integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==\n  dependencies:\n    function-bind \"^1.1.1\"\n    has \"^1.0.3\"\n    has-proto \"^1.0.1\"\n    has-symbols \"^1.0.3\"\n\nget-own-enumerable-property-symbols@^3.0.0:\n  version \"3.0.2\"\n  resolved \"https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664\"\n  integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==\n\nget-package-type@^0.1.0:\n  version \"0.1.0\"\n  resolved \"https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a\"\n  integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==\n\nget-stdin@^6.0.0:\n  version \"6.0.0\"\n  resolved \"https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b\"\n  integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==\n\nget-stream@^3.0.0:\n  version \"3.0.0\"\n  resolved \"https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14\"\n  integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=\n\nget-stream@^4.0.0:\n  version \"4.1.0\"\n  resolved \"https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5\"\n  integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==\n  dependencies:\n    pump \"^3.0.0\"\n\nget-stream@^5.0.0:\n  version \"5.1.0\"\n  resolved \"https://registry.yarnpkg.com/get-stream/-/get-stream-5.1.0.tgz#01203cdc92597f9b909067c3e656cc1f4d3c4dc9\"\n  integrity sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==\n  dependencies:\n    pump \"^3.0.0\"\n\nget-stream@^6.0.0, get-stream@^6.0.1:\n  version \"6.0.1\"\n  resolved \"https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7\"\n  integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==\n\nget-symbol-description@^1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6\"\n  integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==\n  dependencies:\n    call-bind \"^1.0.2\"\n    get-intrinsic \"^1.1.1\"\n\nget-tsconfig@^4.5.0:\n  version \"4.5.0\"\n  resolved \"https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.5.0.tgz#6d52d1c7b299bd3ee9cd7638561653399ac77b0f\"\n  integrity sha512-MjhiaIWCJ1sAU4pIQ5i5OfOuHHxVo1oYeNsWTON7jxYkod8pHocXeh+SSbmu5OZZZK73B6cbJ2XADzXehLyovQ==\n\nget-tsconfig@^4.7.5:\n  version \"4.7.6\"\n  resolved \"https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.6.tgz#118fd5b7b9bae234cc7705a00cd771d7eb65d62a\"\n  integrity sha512-ZAqrLlu18NbDdRaHq+AKXzAmqIUPswPWKUchfytdAjiRFnCe5ojG2bstg6mRiZabkKfCoL/e98pbBELIV/YCeA==\n  dependencies:\n    resolve-pkg-maps \"^1.0.0\"\n\nget-value@^2.0.3, get-value@^2.0.6:\n  version \"2.0.6\"\n  resolved \"https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28\"\n  integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=\n\ngetpass@^0.1.1:\n  version \"0.1.7\"\n  resolved \"https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa\"\n  integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=\n  dependencies:\n    assert-plus \"^1.0.0\"\n\ngithub-slugger@^1.0.0, github-slugger@^1.2.1, github-slugger@^1.3.0:\n  version \"1.5.0\"\n  resolved \"https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.5.0.tgz#17891bbc73232051474d68bd867a34625c955f7d\"\n  integrity sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==\n\nglob-base@^0.3.0:\n  version \"0.3.0\"\n  resolved \"https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4\"\n  integrity sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=\n  dependencies:\n    glob-parent \"^2.0.0\"\n    is-glob \"^2.0.0\"\n\nglob-parent@^2.0.0:\n  version \"2.0.0\"\n  resolved \"https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28\"\n  integrity sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=\n  dependencies:\n    is-glob \"^2.0.0\"\n\nglob-parent@^5.0.0:\n  version \"5.1.0\"\n  resolved \"https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.0.tgz#5f4c1d1e748d30cd73ad2944b3577a81b081e8c2\"\n  integrity sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==\n  dependencies:\n    is-glob \"^4.0.1\"\n\nglob-parent@^5.1.0:\n  version \"5.1.1\"\n  resolved \"https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229\"\n  integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==\n  dependencies:\n    is-glob \"^4.0.1\"\n\nglob-parent@^5.1.2, glob-parent@~5.1.2:\n  version \"5.1.2\"\n  resolved \"https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4\"\n  integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==\n  dependencies:\n    is-glob \"^4.0.1\"\n\nglob-parent@^6.0.2:\n  version \"6.0.2\"\n  resolved \"https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3\"\n  integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==\n  dependencies:\n    is-glob \"^4.0.3\"\n\nglob@7.1.6, glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6:\n  version \"7.1.6\"\n  resolved \"https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6\"\n  integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==\n  dependencies:\n    fs.realpath \"^1.0.0\"\n    inflight \"^1.0.4\"\n    inherits \"2\"\n    minimatch \"^3.0.4\"\n    once \"^1.3.0\"\n    path-is-absolute \"^1.0.0\"\n\nglob@7.1.7:\n  version \"7.1.7\"\n  resolved \"https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90\"\n  integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==\n  dependencies:\n    fs.realpath \"^1.0.0\"\n    inflight \"^1.0.4\"\n    inherits \"2\"\n    minimatch \"^3.0.4\"\n    once \"^1.3.0\"\n    path-is-absolute \"^1.0.0\"\n\nglobal@^4.3.0, global@^4.3.2:\n  version \"4.4.0\"\n  resolved \"https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406\"\n  integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==\n  dependencies:\n    min-document \"^2.19.0\"\n    process \"^0.11.10\"\n\nglobals@^11.1.0:\n  version \"11.12.0\"\n  resolved \"https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e\"\n  integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==\n\nglobals@^12.1.0:\n  version \"12.3.0\"\n  resolved \"https://registry.yarnpkg.com/globals/-/globals-12.3.0.tgz#1e564ee5c4dded2ab098b0f88f24702a3c56be13\"\n  integrity sha512-wAfjdLgFsPZsklLJvOBUBmzYE8/CwhEqSBEMRXA3qxIiNtyqvjYurAtIfDh6chlEPUfmTY3MnZh5Hfh4q0UlIw==\n  dependencies:\n    type-fest \"^0.8.1\"\n\nglobals@^13.6.0, globals@^13.9.0:\n  version \"13.20.0\"\n  resolved \"https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82\"\n  integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==\n  dependencies:\n    type-fest \"^0.20.2\"\n\nglobalthis@^1.0.3:\n  version \"1.0.3\"\n  resolved \"https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf\"\n  integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==\n  dependencies:\n    define-properties \"^1.1.3\"\n\nglobalyzer@^0.1.0:\n  version \"0.1.4\"\n  resolved \"https://registry.yarnpkg.com/globalyzer/-/globalyzer-0.1.4.tgz#bc8e273afe1ac7c24eea8def5b802340c5cc534f\"\n  integrity sha512-LeguVWaxgHN0MNbWC6YljNMzHkrCny9fzjmEUdnF1kQ7wATFD1RHFRqA1qxaX2tgxGENlcxjOflopBwj3YZiXA==\n\nglobby@^11.0.0:\n  version \"11.0.1\"\n  resolved \"https://registry.yarnpkg.com/globby/-/globby-11.0.1.tgz#9a2bf107a068f3ffeabc49ad702c79ede8cfd357\"\n  integrity sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==\n  dependencies:\n    array-union \"^2.1.0\"\n    dir-glob \"^3.0.1\"\n    fast-glob \"^3.1.1\"\n    ignore \"^5.1.4\"\n    merge2 \"^1.3.0\"\n    slash \"^3.0.0\"\n\nglobby@^11.1.0:\n  version \"11.1.0\"\n  resolved \"https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b\"\n  integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==\n  dependencies:\n    array-union \"^2.1.0\"\n    dir-glob \"^3.0.1\"\n    fast-glob \"^3.2.9\"\n    ignore \"^5.2.0\"\n    merge2 \"^1.4.1\"\n    slash \"^3.0.0\"\n\nglobby@^13.1.3:\n  version \"13.1.4\"\n  resolved \"https://registry.yarnpkg.com/globby/-/globby-13.1.4.tgz#2f91c116066bcec152465ba36e5caa4a13c01317\"\n  integrity sha512-iui/IiiW+QrJ1X1hKH5qwlMQyv34wJAYwH1vrf8b9kBA4sNiif3gKsMHa+BrdnOpEudWjpotfa7LrTzB1ERS/g==\n  dependencies:\n    dir-glob \"^3.0.1\"\n    fast-glob \"^3.2.11\"\n    ignore \"^5.2.0\"\n    merge2 \"^1.4.1\"\n    slash \"^4.0.0\"\n\nglobrex@^0.1.1:\n  version \"0.1.2\"\n  resolved \"https://registry.yarnpkg.com/globrex/-/globrex-0.1.2.tgz#dd5d9ec826232730cd6793a5e33a9302985e6098\"\n  integrity sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==\n\ngopd@^1.0.1:\n  version \"1.0.1\"\n  resolved \"https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c\"\n  integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==\n  dependencies:\n    get-intrinsic \"^1.1.3\"\n\ngraceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.5, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.4:\n  version \"4.2.4\"\n  resolved \"https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb\"\n  integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==\n\ngraceful-fs@^4.2.0:\n  version \"4.2.3\"\n  resolved \"https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423\"\n  integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==\n\ngray-matter@^4.0.2:\n  version \"4.0.3\"\n  resolved \"https://registry.yarnpkg.com/gray-matter/-/gray-matter-4.0.3.tgz#e893c064825de73ea1f5f7d88c7a9f7274288798\"\n  integrity sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==\n  dependencies:\n    js-yaml \"^3.13.1\"\n    kind-of \"^6.0.2\"\n    section-matter \"^1.0.0\"\n    strip-bom-string \"^1.0.0\"\n\ngrowly@^1.3.0:\n  version \"1.3.0\"\n  resolved \"https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081\"\n  integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=\n\nhar-schema@^2.0.0:\n  version \"2.0.0\"\n  resolved \"https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92\"\n  integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=\n\nhar-validator@~5.1.3:\n  version \"5.1.5\"\n  resolved \"https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd\"\n  integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==\n  dependencies:\n    ajv \"^6.12.3\"\n    har-schema \"^2.0.0\"\n\nhas-ansi@^2.0.0:\n  version \"2.0.0\"\n  resolved \"https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91\"\n  integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=\n  dependencies:\n    ansi-regex \"^2.0.0\"\n\nhas-bigints@^1.0.1, has-bigints@^1.0.2:\n  version \"1.0.2\"\n  resolved \"https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa\"\n  integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==\n\nhas-flag@^3.0.0:\n  version \"3.0.0\"\n  resolved \"https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd\"\n  integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=\n\nhas-flag@^4.0.0:\n  version \"4.0.0\"\n  resolved \"https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b\"\n  integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==\n\nhas-property-descriptors@^1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861\"\n  integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==\n  dependencies:\n    get-intrinsic \"^1.1.1\"\n\nhas-proto@^1.0.1:\n  version \"1.0.1\"\n  resolved \"https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0\"\n  integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==\n\nhas-symbols@^1.0.1:\n  version \"1.0.1\"\n  resolved \"https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8\"\n  integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==\n\nhas-symbols@^1.0.2, has-symbols@^1.0.3:\n  version \"1.0.3\"\n  resolved \"https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8\"\n  integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==\n\nhas-tostringtag@^1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25\"\n  integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==\n  dependencies:\n    has-symbols \"^1.0.2\"\n\nhas-unicode@^2.0.0:\n  version \"2.0.1\"\n  resolved \"https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9\"\n  integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=\n\nhas-value@^0.3.1:\n  version \"0.3.1\"\n  resolved \"https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f\"\n  integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=\n  dependencies:\n    get-value \"^2.0.3\"\n    has-values \"^0.1.4\"\n    isobject \"^2.0.0\"\n\nhas-value@^1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177\"\n  integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=\n  dependencies:\n    get-value \"^2.0.6\"\n    has-values \"^1.0.0\"\n    isobject \"^3.0.0\"\n\nhas-values@^0.1.4:\n  version \"0.1.4\"\n  resolved \"https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771\"\n  integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E=\n\nhas-values@^1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f\"\n  integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=\n  dependencies:\n    is-number \"^3.0.0\"\n    kind-of \"^4.0.0\"\n\nhas@^1.0.1, has@^1.0.3:\n  version \"1.0.3\"\n  resolved \"https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796\"\n  integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==\n  dependencies:\n    function-bind \"^1.1.1\"\n\nhast-to-hyperscript@^9.0.0:\n  version \"9.0.1\"\n  resolved \"https://registry.yarnpkg.com/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz#9b67fd188e4c81e8ad66f803855334173920218d\"\n  integrity sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==\n  dependencies:\n    \"@types/unist\" \"^2.0.3\"\n    comma-separated-tokens \"^1.0.0\"\n    property-information \"^5.3.0\"\n    space-separated-tokens \"^1.0.0\"\n    style-to-object \"^0.3.0\"\n    unist-util-is \"^4.0.0\"\n    web-namespaces \"^1.0.0\"\n\nhast-util-embedded@^1.0.0:\n  version \"1.0.6\"\n  resolved \"https://registry.yarnpkg.com/hast-util-embedded/-/hast-util-embedded-1.0.6.tgz#ea7007323351cc43e19e1d6256b7cde66ad1aa03\"\n  integrity sha512-JQMW+TJe0UAIXZMjCJ4Wf6ayDV9Yv3PBDPsHD4ExBpAspJ6MOcCX+nzVF+UJVv7OqPcg852WEMSHQPoRA+FVSw==\n  dependencies:\n    hast-util-is-element \"^1.1.0\"\n\nhast-util-from-parse5@^6.0.0:\n  version \"6.0.1\"\n  resolved \"https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz#554e34abdeea25ac76f5bd950a1f0180e0b3bc2a\"\n  integrity sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==\n  dependencies:\n    \"@types/parse5\" \"^5.0.0\"\n    hastscript \"^6.0.0\"\n    property-information \"^5.0.0\"\n    vfile \"^4.0.0\"\n    vfile-location \"^3.2.0\"\n    web-namespaces \"^1.0.0\"\n\nhast-util-has-property@^1.0.0:\n  version \"1.0.4\"\n  resolved \"https://registry.yarnpkg.com/hast-util-has-property/-/hast-util-has-property-1.0.4.tgz#9f137565fad6082524b382c1e7d7d33ca5059f36\"\n  integrity sha512-ghHup2voGfgFoHMGnaLHOjbYFACKrRh9KFttdCzMCbFoBMJXiNi2+XTrPP8+q6cDJM/RSqlCfVWrjp1H201rZg==\n\nhast-util-is-body-ok-link@^1.0.0:\n  version \"1.0.4\"\n  resolved \"https://registry.yarnpkg.com/hast-util-is-body-ok-link/-/hast-util-is-body-ok-link-1.0.4.tgz#49ab2fad52ef04fe70adcbc95c9fc3a6358c32be\"\n  integrity sha512-mFblNpLvFbD8dG2Nw5dJBYZkxIHeph1JAh5yr4huI7T5m8cV0zaXNiqzKPX/JdjA+tIDF7c33u9cxK132KRjyQ==\n  dependencies:\n    hast-util-has-property \"^1.0.0\"\n    hast-util-is-element \"^1.0.0\"\n\nhast-util-is-element@^1.0.0, hast-util-is-element@^1.1.0:\n  version \"1.1.0\"\n  resolved \"https://registry.yarnpkg.com/hast-util-is-element/-/hast-util-is-element-1.1.0.tgz#3b3ed5159a2707c6137b48637fbfe068e175a425\"\n  integrity sha512-oUmNua0bFbdrD/ELDSSEadRVtWZOf3iF6Lbv81naqsIV99RnSCieTbWuWCY8BAeEfKJTKl0gRdokv+dELutHGQ==\n\nhast-util-parse-selector@^2.0.0:\n  version \"2.2.5\"\n  resolved \"https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz#d57c23f4da16ae3c63b3b6ca4616683313499c3a\"\n  integrity sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==\n\nhast-util-phrasing@^1.0.0:\n  version \"1.0.5\"\n  resolved \"https://registry.yarnpkg.com/hast-util-phrasing/-/hast-util-phrasing-1.0.5.tgz#45fb7d3efc70128b61491f9e3f080a554f138b1d\"\n  integrity sha512-P3uxm+8bnwcfAS/XpGie9wMmQXAQqsYhgQQKRwmWH/V6chiq0lmTy8KjQRJmYjusdMtNKGCUksdILSZy1suSpQ==\n  dependencies:\n    hast-util-embedded \"^1.0.0\"\n    hast-util-has-property \"^1.0.0\"\n    hast-util-is-body-ok-link \"^1.0.0\"\n    hast-util-is-element \"^1.0.0\"\n\nhast-util-raw@6.0.1:\n  version \"6.0.1\"\n  resolved \"https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-6.0.1.tgz#973b15930b7529a7b66984c98148b46526885977\"\n  integrity sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig==\n  dependencies:\n    \"@types/hast\" \"^2.0.0\"\n    hast-util-from-parse5 \"^6.0.0\"\n    hast-util-to-parse5 \"^6.0.0\"\n    html-void-elements \"^1.0.0\"\n    parse5 \"^6.0.0\"\n    unist-util-position \"^3.0.0\"\n    vfile \"^4.0.0\"\n    web-namespaces \"^1.0.0\"\n    xtend \"^4.0.0\"\n    zwitch \"^1.0.0\"\n\nhast-util-raw@^6.1.0:\n  version \"6.1.0\"\n  resolved \"https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-6.1.0.tgz#e16a3c2642f65cc7c480c165400a40d604ab75d0\"\n  integrity sha512-5FoZLDHBpka20OlZZ4I/+RBw5piVQ8iI1doEvffQhx5CbCyTtP8UCq8Tw6NmTAMtXgsQxmhW7Ly8OdFre5/YMQ==\n  dependencies:\n    \"@types/hast\" \"^2.0.0\"\n    hast-util-from-parse5 \"^6.0.0\"\n    hast-util-to-parse5 \"^6.0.0\"\n    html-void-elements \"^1.0.0\"\n    parse5 \"^6.0.0\"\n    unist-util-position \"^3.0.0\"\n    unist-util-visit \"^2.0.0\"\n    vfile \"^4.0.0\"\n    web-namespaces \"^1.0.0\"\n    xtend \"^4.0.0\"\n    zwitch \"^1.0.0\"\n\nhast-util-sanitize@^3.0.0, hast-util-sanitize@^3.0.2:\n  version \"3.0.2\"\n  resolved \"https://registry.yarnpkg.com/hast-util-sanitize/-/hast-util-sanitize-3.0.2.tgz#b0b783220af528ba8fe6999f092d138908678520\"\n  integrity sha512-+2I0x2ZCAyiZOO/sb4yNLFmdwPBnyJ4PBkVTUMKMqBwYNA+lXSgOmoRXlJFazoyid9QPogRRKgKhVEodv181sA==\n  dependencies:\n    xtend \"^4.0.0\"\n\nhast-util-to-html@^7.0.0:\n  version \"7.1.3\"\n  resolved \"https://registry.yarnpkg.com/hast-util-to-html/-/hast-util-to-html-7.1.3.tgz#9f339ca9bea71246e565fc79ff7dbfe98bb50f5e\"\n  integrity sha512-yk2+1p3EJTEE9ZEUkgHsUSVhIpCsL/bvT8E5GzmWc+N1Po5gBw+0F8bo7dpxXR0nu0bQVxVZGX2lBGF21CmeDw==\n  dependencies:\n    ccount \"^1.0.0\"\n    comma-separated-tokens \"^1.0.0\"\n    hast-util-is-element \"^1.0.0\"\n    hast-util-whitespace \"^1.0.0\"\n    html-void-elements \"^1.0.0\"\n    property-information \"^5.0.0\"\n    space-separated-tokens \"^1.0.0\"\n    stringify-entities \"^3.0.1\"\n    unist-util-is \"^4.0.0\"\n    xtend \"^4.0.0\"\n\nhast-util-to-parse5@^6.0.0:\n  version \"6.0.0\"\n  resolved \"https://registry.yarnpkg.com/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz#1ec44650b631d72952066cea9b1445df699f8479\"\n  integrity sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==\n  dependencies:\n    hast-to-hyperscript \"^9.0.0\"\n    property-information \"^5.0.0\"\n    web-namespaces \"^1.0.0\"\n    xtend \"^4.0.0\"\n    zwitch \"^1.0.0\"\n\nhast-util-to-string@^1.0.4:\n  version \"1.0.4\"\n  resolved \"https://registry.yarnpkg.com/hast-util-to-string/-/hast-util-to-string-1.0.4.tgz#9b24c114866bdb9478927d7e9c36a485ac728378\"\n  integrity sha512-eK0MxRX47AV2eZ+Lyr18DCpQgodvaS3fAQO2+b9Two9F5HEoRPhiUMNzoXArMJfZi2yieFzUBMRl3HNJ3Jus3w==\n\nhast-util-whitespace@^1.0.0, hast-util-whitespace@^1.0.4:\n  version \"1.0.4\"\n  resolved \"https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-1.0.4.tgz#e4fe77c4a9ae1cb2e6c25e02df0043d0164f6e41\"\n  integrity sha512-I5GTdSfhYfAPNztx2xJRQpG8cuDSNt599/7YUn7Gx/WxNMsG+a835k97TDkFgk123cwjfwINaZknkKkphx/f2A==\n\nhastscript@^6.0.0:\n  version \"6.0.0\"\n  resolved \"https://registry.yarnpkg.com/hastscript/-/hastscript-6.0.0.tgz#e8768d7eac56c3fdeac8a92830d58e811e5bf640\"\n  integrity sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==\n  dependencies:\n    \"@types/hast\" \"^2.0.0\"\n    comma-separated-tokens \"^1.0.0\"\n    hast-util-parse-selector \"^2.0.0\"\n    property-information \"^5.0.0\"\n    space-separated-tokens \"^1.0.0\"\n\nhey-listen@^1.0.5, hey-listen@^1.0.8:\n  version \"1.0.8\"\n  resolved \"https://registry.yarnpkg.com/hey-listen/-/hey-listen-1.0.8.tgz#8e59561ff724908de1aa924ed6ecc84a56a9aa68\"\n  integrity sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==\n\nhogan.js@^3.0.2:\n  version \"3.0.2\"\n  resolved \"https://registry.yarnpkg.com/hogan.js/-/hogan.js-3.0.2.tgz#4cd9e1abd4294146e7679e41d7898732b02c7bfd\"\n  integrity sha512-RqGs4wavGYJWE07t35JQccByczmNUXQT0E12ZYV1VKYu5UiAU9lsos/yBAcf840+zrUQQxgVduCR5/B8nNtibg==\n  dependencies:\n    mkdirp \"0.3.0\"\n    nopt \"1.0.10\"\n\nhoist-non-react-statics@^3.3.0:\n  version \"3.3.1\"\n  resolved \"https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#101685d3aff3b23ea213163f6e8e12f4f111e19f\"\n  integrity sha512-wbg3bpgA/ZqWrZuMOeJi8+SKMhr7X9TesL/rXMjTzh0p0JUBo3II8DHboYbuIXWRlttrUFxwcu/5kygrCw8fJw==\n  dependencies:\n    react-is \"^16.7.0\"\n\nhosted-git-info@^2.1.4:\n  version \"2.8.8\"\n  resolved \"https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488\"\n  integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==\n\nhtml-encoding-sniffer@^1.0.2:\n  version \"1.0.2\"\n  resolved \"https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8\"\n  integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==\n  dependencies:\n    whatwg-encoding \"^1.0.1\"\n\nhtml-escaper@^2.0.0:\n  version \"2.0.2\"\n  resolved \"https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453\"\n  integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==\n\nhtml-void-elements@^1.0.0:\n  version \"1.0.5\"\n  resolved \"https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-1.0.5.tgz#ce9159494e86d95e45795b166c2021c2cfca4483\"\n  integrity sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==\n\nhtml-whitespace-sensitive-tag-names@^1.0.0:\n  version \"1.0.3\"\n  resolved \"https://registry.yarnpkg.com/html-whitespace-sensitive-tag-names/-/html-whitespace-sensitive-tag-names-1.0.3.tgz#60325c5bd331048d14ced6bac419c89d76cc9dd8\"\n  integrity sha512-GX1UguduCBEAEo1hjFxc2Bz04/sDq0ACNyT7LsuoDcPfXYI3nS0NRPp3dyazLJyVUMp3GPBB56i/0Zr6CqD2PQ==\n\nhttp-errors@2.0.0:\n  version \"2.0.0\"\n  resolved \"https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3\"\n  integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==\n  dependencies:\n    depd \"2.0.0\"\n    inherits \"2.0.4\"\n    setprototypeof \"1.2.0\"\n    statuses \"2.0.1\"\n    toidentifier \"1.0.1\"\n\nhttp-errors@~1.7.2:\n  version \"1.7.3\"\n  resolved \"https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06\"\n  integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==\n  dependencies:\n    depd \"~1.1.2\"\n    inherits \"2.0.4\"\n    setprototypeof \"1.1.1\"\n    statuses \">= 1.5.0 < 2\"\n    toidentifier \"1.0.0\"\n\nhttp-signature@~1.2.0:\n  version \"1.2.0\"\n  resolved \"https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1\"\n  integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=\n  dependencies:\n    assert-plus \"^1.0.0\"\n    jsprim \"^1.2.2\"\n    sshpk \"^1.7.0\"\n\nhuman-id@^4.1.1:\n  version \"4.1.2\"\n  resolved \"https://registry.yarnpkg.com/human-id/-/human-id-4.1.2.tgz#868b48630135bc0b5944353fc73951497a4b4412\"\n  integrity sha512-v/J+4Z/1eIJovEBdlV5TYj1IR+ZiohcYGRY+qN/oC9dAfKzVT023N/Bgw37hrKCoVRBvk3bqyzpr2PP5YeTMSg==\n\nhuman-signals@^1.1.1:\n  version \"1.1.1\"\n  resolved \"https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3\"\n  integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==\n\nhuman-signals@^2.1.0:\n  version \"2.1.0\"\n  resolved \"https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0\"\n  integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==\n\nhuman-signals@^4.3.0:\n  version \"4.3.1\"\n  resolved \"https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2\"\n  integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==\n\nhumanize-duration@^3.15.3:\n  version \"3.21.0\"\n  resolved \"https://registry.yarnpkg.com/humanize-duration/-/humanize-duration-3.21.0.tgz#ae5dc7e67640770cbf6a8d03a5d1138d47c7ce38\"\n  integrity sha512-7BLsrQZ2nMGeakmGDUl1pDne6/7iAdvwf1RtDLCOPHNFIHjkOVW7lcu7xHkIM9HhZAlSSO5crhC1dHvtl4dIQw==\n\nhumanize-ms@^1.2.1:\n  version \"1.2.1\"\n  resolved \"https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed\"\n  integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==\n  dependencies:\n    ms \"^2.0.0\"\n\nhusky@^4.3.0:\n  version \"4.3.0\"\n  resolved \"https://registry.yarnpkg.com/husky/-/husky-4.3.0.tgz#0b2ec1d66424e9219d359e26a51c58ec5278f0de\"\n  integrity sha512-tTMeLCLqSBqnflBZnlVDhpaIMucSGaYyX6855jM4AguGeWCeSzNdb1mfyWduTZ3pe3SJVvVWGL0jO1iKZVPfTA==\n  dependencies:\n    chalk \"^4.0.0\"\n    ci-info \"^2.0.0\"\n    compare-versions \"^3.6.0\"\n    cosmiconfig \"^7.0.0\"\n    find-versions \"^3.2.0\"\n    opencollective-postinstall \"^2.0.2\"\n    pkg-dir \"^4.2.0\"\n    please-upgrade-node \"^3.2.0\"\n    slash \"^3.0.0\"\n    which-pm-runs \"^1.0.0\"\n\niconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.24:\n  version \"0.4.24\"\n  resolved \"https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b\"\n  integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==\n  dependencies:\n    safer-buffer \">= 2.1.2 < 3\"\n\niconv-lite@^0.6.2:\n  version \"0.6.2\"\n  resolved \"https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.2.tgz#ce13d1875b0c3a674bd6a04b7f76b01b1b6ded01\"\n  integrity sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==\n  dependencies:\n    safer-buffer \">= 2.1.2 < 3.0.0\"\n\niconv-lite@^0.7.0:\n  version \"0.7.0\"\n  resolved \"https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.7.0.tgz#c50cd80e6746ca8115eb98743afa81aa0e147a3e\"\n  integrity sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==\n  dependencies:\n    safer-buffer \">= 2.1.2 < 3.0.0\"\n\nignore@^4.0.6:\n  version \"4.0.6\"\n  resolved \"https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc\"\n  integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==\n\nignore@^5.0.5, ignore@^5.1.4:\n  version \"5.1.8\"\n  resolved \"https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57\"\n  integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==\n\nignore@^5.2.0:\n  version \"5.2.4\"\n  resolved \"https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324\"\n  integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==\n\nimage-size@^0.6.0:\n  version \"0.6.3\"\n  resolved \"https://registry.yarnpkg.com/image-size/-/image-size-0.6.3.tgz#e7e5c65bb534bd7cdcedd6cb5166272a85f75fb2\"\n  integrity sha512-47xSUiQioGaB96nqtp5/q55m0aBQSQdyIloMOc/x+QVTDZLNmXE892IIDrJ0hM1A5vcNUDD5tDffkSP5lCaIIA==\n\nimage-size@^0.9.7:\n  version \"0.9.7\"\n  resolved \"https://registry.yarnpkg.com/image-size/-/image-size-0.9.7.tgz#43b4ead4b1310d5ae310a559d52935a347e47c09\"\n  integrity sha512-KRVgLNZkr00YGN0qn9MlIrmlxbRhsCcEb1Byq3WKGnIV4M48iD185cprRtaoK4t5iC+ym2Q5qlArxZ/V1yzDgA==\n  dependencies:\n    queue \"6.0.2\"\n\nimmediate@^3.2.3:\n  version \"3.3.0\"\n  resolved \"https://registry.yarnpkg.com/immediate/-/immediate-3.3.0.tgz#1aef225517836bcdf7f2a2de2600c79ff0269266\"\n  integrity sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==\n\nimport-fresh@^2.0.0:\n  version \"2.0.0\"\n  resolved \"https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546\"\n  integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY=\n  dependencies:\n    caller-path \"^2.0.0\"\n    resolve-from \"^3.0.0\"\n\nimport-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1:\n  version \"3.2.1\"\n  resolved \"https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66\"\n  integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==\n  dependencies:\n    parent-module \"^1.0.0\"\n    resolve-from \"^4.0.0\"\n\nimport-local@^3.0.2:\n  version \"3.0.2\"\n  resolved \"https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6\"\n  integrity sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==\n  dependencies:\n    pkg-dir \"^4.2.0\"\n    resolve-cwd \"^3.0.0\"\n\nimurmurhash@^0.1.4:\n  version \"0.1.4\"\n  resolved \"https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea\"\n  integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=\n\nindent-string@^4.0.0:\n  version \"4.0.0\"\n  resolved \"https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251\"\n  integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==\n\ninflight@^1.0.4:\n  version \"1.0.6\"\n  resolved \"https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9\"\n  integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=\n  dependencies:\n    once \"^1.3.0\"\n    wrappy \"1\"\n\ninherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3:\n  version \"2.0.4\"\n  resolved \"https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c\"\n  integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==\n\ninline-style-parser@0.1.1:\n  version \"0.1.1\"\n  resolved \"https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1\"\n  integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==\n\ninquirer@^3.0.6:\n  version \"3.3.0\"\n  resolved \"https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9\"\n  integrity sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==\n  dependencies:\n    ansi-escapes \"^3.0.0\"\n    chalk \"^2.0.0\"\n    cli-cursor \"^2.1.0\"\n    cli-width \"^2.0.0\"\n    external-editor \"^2.0.4\"\n    figures \"^2.0.0\"\n    lodash \"^4.3.0\"\n    mute-stream \"0.0.7\"\n    run-async \"^2.2.0\"\n    rx-lite \"^4.0.8\"\n    rx-lite-aggregates \"^4.0.8\"\n    string-width \"^2.1.0\"\n    strip-ansi \"^4.0.0\"\n    through \"^2.3.6\"\n\ninquirer@^7.0.0:\n  version \"7.0.0\"\n  resolved \"https://registry.yarnpkg.com/inquirer/-/inquirer-7.0.0.tgz#9e2b032dde77da1db5db804758b8fea3a970519a\"\n  integrity sha512-rSdC7zelHdRQFkWnhsMu2+2SO41mpv2oF2zy4tMhmiLWkcKbOAs87fWAJhVXttKVwhdZvymvnuM95EyEXg2/tQ==\n  dependencies:\n    ansi-escapes \"^4.2.1\"\n    chalk \"^2.4.2\"\n    cli-cursor \"^3.1.0\"\n    cli-width \"^2.0.0\"\n    external-editor \"^3.0.3\"\n    figures \"^3.0.0\"\n    lodash \"^4.17.15\"\n    mute-stream \"0.0.8\"\n    run-async \"^2.2.0\"\n    rxjs \"^6.4.0\"\n    string-width \"^4.1.0\"\n    strip-ansi \"^5.1.0\"\n    through \"^2.3.6\"\n\ninternal-slot@^1.0.3, internal-slot@^1.0.4, internal-slot@^1.0.5:\n  version \"1.0.5\"\n  resolved \"https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986\"\n  integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==\n  dependencies:\n    get-intrinsic \"^1.2.0\"\n    has \"^1.0.3\"\n    side-channel \"^1.0.4\"\n\ninterpret@^1.0.0:\n  version \"1.2.0\"\n  resolved \"https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296\"\n  integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==\n\nintersection-observer@^0.10.0:\n  version \"0.10.0\"\n  resolved \"https://registry.yarnpkg.com/intersection-observer/-/intersection-observer-0.10.0.tgz#4d11d63c1ff67e21e62987be24d55218da1a1a69\"\n  integrity sha512-fn4bQ0Xq8FTej09YC/jqKZwtijpvARlRp6wxL5WTA6yPe2YWSJ5RJh7Nm79rK2qB0wr6iDQzH60XGq5V/7u8YQ==\n\nintl-messageformat@^10.1.0:\n  version \"10.3.5\"\n  resolved \"https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-10.3.5.tgz#f55684fc663e62616ad59d3a504ea0cac3f267b7\"\n  integrity sha512-6kPkftF8Jg3XJCkGKa5OD+nYQ+qcSxF4ZkuDdXZ6KGG0VXn+iblJqRFyDdm9VvKcMyC0Km2+JlVQffFM52D0YA==\n  dependencies:\n    \"@formatjs/ecma402-abstract\" \"1.15.0\"\n    \"@formatjs/fast-memoize\" \"2.0.1\"\n    \"@formatjs/icu-messageformat-parser\" \"2.4.0\"\n    tslib \"^2.4.0\"\n\ninvariant@^2.2.2, invariant@^2.2.4:\n  version \"2.2.4\"\n  resolved \"https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6\"\n  integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==\n  dependencies:\n    loose-envify \"^1.0.0\"\n\ninvert-kv@^1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6\"\n  integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY=\n\nip-regex@^2.1.0:\n  version \"2.1.0\"\n  resolved \"https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9\"\n  integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=\n\nipaddr.js@1.9.1:\n  version \"1.9.1\"\n  resolved \"https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3\"\n  integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==\n\nis-accessor-descriptor@^0.1.6:\n  version \"0.1.6\"\n  resolved \"https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6\"\n  integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=\n  dependencies:\n    kind-of \"^3.0.2\"\n\nis-accessor-descriptor@^1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656\"\n  integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==\n  dependencies:\n    kind-of \"^6.0.0\"\n\nis-alphabetical@1.0.4, is-alphabetical@^1.0.0:\n  version \"1.0.4\"\n  resolved \"https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d\"\n  integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==\n\nis-alphanumeric@^1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz#4a9cef71daf4c001c1d81d63d140cf53fd6889f4\"\n  integrity sha512-ZmRL7++ZkcMOfDuWZuMJyIVLr2keE1o/DeNWh1EmgqGhUcV+9BIVsx0BcSBOHTZqzjs4+dISzr2KAeBEWGgXeA==\n\nis-alphanumerical@^1.0.0:\n  version \"1.0.4\"\n  resolved \"https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf\"\n  integrity sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==\n  dependencies:\n    is-alphabetical \"^1.0.0\"\n    is-decimal \"^1.0.0\"\n\nis-arguments@^1.1.1:\n  version \"1.1.1\"\n  resolved \"https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b\"\n  integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==\n  dependencies:\n    call-bind \"^1.0.2\"\n    has-tostringtag \"^1.0.0\"\n\nis-array-buffer@^3.0.1, is-array-buffer@^3.0.2:\n  version \"3.0.2\"\n  resolved \"https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe\"\n  integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==\n  dependencies:\n    call-bind \"^1.0.2\"\n    get-intrinsic \"^1.2.0\"\n    is-typed-array \"^1.1.10\"\n\nis-arrayish@^0.2.1:\n  version \"0.2.1\"\n  resolved \"https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d\"\n  integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=\n\nis-bigint@^1.0.1:\n  version \"1.0.4\"\n  resolved \"https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3\"\n  integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==\n  dependencies:\n    has-bigints \"^1.0.1\"\n\nis-binary-path@~2.1.0:\n  version \"2.1.0\"\n  resolved \"https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09\"\n  integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==\n  dependencies:\n    binary-extensions \"^2.0.0\"\n\nis-boolean-object@^1.1.0:\n  version \"1.1.2\"\n  resolved \"https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719\"\n  integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==\n  dependencies:\n    call-bind \"^1.0.2\"\n    has-tostringtag \"^1.0.0\"\n\nis-buffer@^1.1.5, is-buffer@~1.1.6:\n  version \"1.1.6\"\n  resolved \"https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be\"\n  integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==\n\nis-buffer@^2.0.0:\n  version \"2.0.5\"\n  resolved \"https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191\"\n  integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==\n\nis-callable@^1.1.3, is-callable@^1.2.7:\n  version \"1.2.7\"\n  resolved \"https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055\"\n  integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==\n\nis-callable@^1.1.4:\n  version \"1.1.4\"\n  resolved \"https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75\"\n  integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==\n\nis-callable@^1.2.0:\n  version \"1.2.2\"\n  resolved \"https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.2.tgz#c7c6715cd22d4ddb48d3e19970223aceabb080d9\"\n  integrity sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==\n\nis-ci@^2.0.0:\n  version \"2.0.0\"\n  resolved \"https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c\"\n  integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==\n  dependencies:\n    ci-info \"^2.0.0\"\n\nis-core-module@^2.0.0:\n  version \"2.0.0\"\n  resolved \"https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.0.0.tgz#58531b70aed1db7c0e8d4eb1a0a2d1ddd64bd12d\"\n  integrity sha512-jq1AH6C8MuteOoBPwkxHafmByhL9j5q4OaPGdbuD+ZtQJVzH+i6E3BJDQcBA09k57i2Hh2yQbEG8yObZ0jdlWw==\n  dependencies:\n    has \"^1.0.3\"\n\nis-core-module@^2.11.0, is-core-module@^2.9.0:\n  version \"2.12.1\"\n  resolved \"https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd\"\n  integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==\n  dependencies:\n    has \"^1.0.3\"\n\nis-data-descriptor@^0.1.4:\n  version \"0.1.4\"\n  resolved \"https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56\"\n  integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=\n  dependencies:\n    kind-of \"^3.0.2\"\n\nis-data-descriptor@^1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7\"\n  integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==\n  dependencies:\n    kind-of \"^6.0.0\"\n\nis-date-object@^1.0.1:\n  version \"1.0.1\"\n  resolved \"https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16\"\n  integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=\n\nis-date-object@^1.0.5:\n  version \"1.0.5\"\n  resolved \"https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f\"\n  integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==\n  dependencies:\n    has-tostringtag \"^1.0.0\"\n\nis-decimal@^1.0.0:\n  version \"1.0.4\"\n  resolved \"https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5\"\n  integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==\n\nis-descriptor@^0.1.0:\n  version \"0.1.6\"\n  resolved \"https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca\"\n  integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==\n  dependencies:\n    is-accessor-descriptor \"^0.1.6\"\n    is-data-descriptor \"^0.1.4\"\n    kind-of \"^5.0.0\"\n\nis-descriptor@^1.0.0, is-descriptor@^1.0.2:\n  version \"1.0.2\"\n  resolved \"https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec\"\n  integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==\n  dependencies:\n    is-accessor-descriptor \"^1.0.0\"\n    is-data-descriptor \"^1.0.0\"\n    kind-of \"^6.0.2\"\n\nis-directory@^0.3.1:\n  version \"0.3.1\"\n  resolved \"https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1\"\n  integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=\n\nis-docker@^2.0.0:\n  version \"2.1.1\"\n  resolved \"https://registry.yarnpkg.com/is-docker/-/is-docker-2.1.1.tgz#4125a88e44e450d384e09047ede71adc2d144156\"\n  integrity sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==\n\nis-docker@^3.0.0:\n  version \"3.0.0\"\n  resolved \"https://registry.yarnpkg.com/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200\"\n  integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==\n\nis-dotfile@^1.0.0:\n  version \"1.0.3\"\n  resolved \"https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1\"\n  integrity sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=\n\nis-equal-shallow@^0.1.3:\n  version \"0.1.3\"\n  resolved \"https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534\"\n  integrity sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=\n  dependencies:\n    is-primitive \"^2.0.0\"\n\nis-extendable@^0.1.0, is-extendable@^0.1.1:\n  version \"0.1.1\"\n  resolved \"https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89\"\n  integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=\n\nis-extendable@^1.0.1:\n  version \"1.0.1\"\n  resolved \"https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4\"\n  integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==\n  dependencies:\n    is-plain-object \"^2.0.4\"\n\nis-extglob@^1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0\"\n  integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=\n\nis-extglob@^2.1.1:\n  version \"2.1.1\"\n  resolved \"https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2\"\n  integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=\n\nis-fullwidth-code-point@^1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb\"\n  integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs=\n  dependencies:\n    number-is-nan \"^1.0.0\"\n\nis-fullwidth-code-point@^2.0.0:\n  version \"2.0.0\"\n  resolved \"https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f\"\n  integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=\n\nis-fullwidth-code-point@^3.0.0:\n  version \"3.0.0\"\n  resolved \"https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d\"\n  integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==\n\nis-generator-fn@^2.0.0:\n  version \"2.1.0\"\n  resolved \"https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118\"\n  integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==\n\nis-glob@^2.0.0, is-glob@^2.0.1:\n  version \"2.0.1\"\n  resolved \"https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863\"\n  integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=\n  dependencies:\n    is-extglob \"^1.0.0\"\n\nis-glob@^4.0.0, is-glob@^4.0.1:\n  version \"4.0.1\"\n  resolved \"https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc\"\n  integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==\n  dependencies:\n    is-extglob \"^2.1.1\"\n\nis-glob@^4.0.3, is-glob@~4.0.1:\n  version \"4.0.3\"\n  resolved \"https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084\"\n  integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==\n  dependencies:\n    is-extglob \"^2.1.1\"\n\nis-hexadecimal@^1.0.0:\n  version \"1.0.4\"\n  resolved \"https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7\"\n  integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==\n\nis-inside-container@^1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4\"\n  integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==\n  dependencies:\n    is-docker \"^3.0.0\"\n\nis-interactive@^1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e\"\n  integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==\n\nis-map@^2.0.1, is-map@^2.0.2:\n  version \"2.0.2\"\n  resolved \"https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127\"\n  integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==\n\nis-module@^1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591\"\n  integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=\n\nis-negative-zero@^2.0.2:\n  version \"2.0.2\"\n  resolved \"https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150\"\n  integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==\n\nis-number-object@^1.0.4:\n  version \"1.0.7\"\n  resolved \"https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc\"\n  integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==\n  dependencies:\n    has-tostringtag \"^1.0.0\"\n\nis-number@^2.1.0:\n  version \"2.1.0\"\n  resolved \"https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f\"\n  integrity sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=\n  dependencies:\n    kind-of \"^3.0.2\"\n\nis-number@^3.0.0:\n  version \"3.0.0\"\n  resolved \"https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195\"\n  integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=\n  dependencies:\n    kind-of \"^3.0.2\"\n\nis-number@^4.0.0:\n  version \"4.0.0\"\n  resolved \"https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff\"\n  integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==\n\nis-number@^7.0.0:\n  version \"7.0.0\"\n  resolved \"https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b\"\n  integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==\n\nis-obj@^1.0.1:\n  version \"1.0.1\"\n  resolved \"https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f\"\n  integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8=\n\nis-plain-obj@^2.0.0:\n  version \"2.1.0\"\n  resolved \"https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287\"\n  integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==\n\nis-plain-object@^2.0.3, is-plain-object@^2.0.4:\n  version \"2.0.4\"\n  resolved \"https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677\"\n  integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==\n  dependencies:\n    isobject \"^3.0.1\"\n\nis-posix-bracket@^0.1.0:\n  version \"0.1.1\"\n  resolved \"https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4\"\n  integrity sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=\n\nis-primitive@^2.0.0:\n  version \"2.0.0\"\n  resolved \"https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575\"\n  integrity sha1-IHurkWOEmcB7Kt8kCkGochADRXU=\n\nis-reference@^1.1.2:\n  version \"1.1.4\"\n  resolved \"https://registry.yarnpkg.com/is-reference/-/is-reference-1.1.4.tgz#3f95849886ddb70256a3e6d062b1a68c13c51427\"\n  integrity sha512-uJA/CDPO3Tao3GTrxYn6AwkM4nUPJiGGYu5+cB8qbC7WGFlrKZbiRo7SFKxUAEpFUfiHofWCXBUNhvYJMh+6zw==\n  dependencies:\n    \"@types/estree\" \"0.0.39\"\n\nis-regex@^1.0.4:\n  version \"1.0.4\"\n  resolved \"https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491\"\n  integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=\n  dependencies:\n    has \"^1.0.1\"\n\nis-regex@^1.1.0:\n  version \"1.1.1\"\n  resolved \"https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9\"\n  integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==\n  dependencies:\n    has-symbols \"^1.0.1\"\n\nis-regex@^1.1.4:\n  version \"1.1.4\"\n  resolved \"https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958\"\n  integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==\n  dependencies:\n    call-bind \"^1.0.2\"\n    has-tostringtag \"^1.0.0\"\n\nis-regexp@^1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069\"\n  integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk=\n\nis-set@^2.0.1, is-set@^2.0.2:\n  version \"2.0.2\"\n  resolved \"https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec\"\n  integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==\n\nis-shared-array-buffer@^1.0.2:\n  version \"1.0.2\"\n  resolved \"https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79\"\n  integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==\n  dependencies:\n    call-bind \"^1.0.2\"\n\nis-stream@^1.0.1, is-stream@^1.1.0:\n  version \"1.1.0\"\n  resolved \"https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44\"\n  integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=\n\nis-stream@^2.0.0:\n  version \"2.0.0\"\n  resolved \"https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3\"\n  integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==\n\nis-stream@^3.0.0:\n  version \"3.0.0\"\n  resolved \"https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac\"\n  integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==\n\nis-string@^1.0.5:\n  version \"1.0.5\"\n  resolved \"https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6\"\n  integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==\n\nis-string@^1.0.7:\n  version \"1.0.7\"\n  resolved \"https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd\"\n  integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==\n  dependencies:\n    has-tostringtag \"^1.0.0\"\n\nis-subdir@^1.1.1:\n  version \"1.1.1\"\n  resolved \"https://registry.yarnpkg.com/is-subdir/-/is-subdir-1.1.1.tgz#423e66902f9c5f159b9cc4826c820df083059538\"\n  integrity sha512-VYpq0S7gPBVkkmfwkvGnx1EL9UVIo87NQyNcgMiNUdQCws3CJm5wj2nB+XPL7zigvjxhuZgp3bl2yBcKkSIj1w==\n  dependencies:\n    better-path-resolve \"1.0.0\"\n\nis-symbol@^1.0.2:\n  version \"1.0.3\"\n  resolved \"https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937\"\n  integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==\n  dependencies:\n    has-symbols \"^1.0.1\"\n\nis-symbol@^1.0.3:\n  version \"1.0.4\"\n  resolved \"https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c\"\n  integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==\n  dependencies:\n    has-symbols \"^1.0.2\"\n\nis-typed-array@^1.1.10, is-typed-array@^1.1.9:\n  version \"1.1.10\"\n  resolved \"https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f\"\n  integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==\n  dependencies:\n    available-typed-arrays \"^1.0.5\"\n    call-bind \"^1.0.2\"\n    for-each \"^0.3.3\"\n    gopd \"^1.0.1\"\n    has-tostringtag \"^1.0.0\"\n\nis-typedarray@^1.0.0, is-typedarray@~1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a\"\n  integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=\n\nis-url@^1.2.2:\n  version \"1.2.4\"\n  resolved \"https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52\"\n  integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==\n\nis-weakmap@^2.0.1:\n  version \"2.0.1\"\n  resolved \"https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2\"\n  integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==\n\nis-weakref@^1.0.2:\n  version \"1.0.2\"\n  resolved \"https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2\"\n  integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==\n  dependencies:\n    call-bind \"^1.0.2\"\n\nis-weakset@^2.0.1:\n  version \"2.0.2\"\n  resolved \"https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.2.tgz#4569d67a747a1ce5a994dfd4ef6dcea76e7c0a1d\"\n  integrity sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==\n  dependencies:\n    call-bind \"^1.0.2\"\n    get-intrinsic \"^1.1.1\"\n\nis-whitespace-character@^1.0.0:\n  version \"1.0.4\"\n  resolved \"https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz#0858edd94a95594c7c9dd0b5c174ec6e45ee4aa7\"\n  integrity sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==\n\nis-windows@^1.0.0, is-windows@^1.0.2:\n  version \"1.0.2\"\n  resolved \"https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d\"\n  integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==\n\nis-word-character@^1.0.0:\n  version \"1.0.4\"\n  resolved \"https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.4.tgz#ce0e73216f98599060592f62ff31354ddbeb0230\"\n  integrity sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==\n\nis-wsl@^1.1.0:\n  version \"1.1.0\"\n  resolved \"https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d\"\n  integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=\n\nis-wsl@^2.1.1, is-wsl@^2.2.0:\n  version \"2.2.0\"\n  resolved \"https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271\"\n  integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==\n  dependencies:\n    is-docker \"^2.0.0\"\n\nisarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11\"\n  integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=\n\nisarray@^2.0.1, isarray@^2.0.5:\n  version \"2.0.5\"\n  resolved \"https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723\"\n  integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==\n\nisexe@^2.0.0:\n  version \"2.0.0\"\n  resolved \"https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10\"\n  integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=\n\nisobject@^2.0.0:\n  version \"2.1.0\"\n  resolved \"https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89\"\n  integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=\n  dependencies:\n    isarray \"1.0.0\"\n\nisobject@^3.0.0, isobject@^3.0.1:\n  version \"3.0.1\"\n  resolved \"https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df\"\n  integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=\n\nisomorphic-fetch@^2.1.1:\n  version \"2.2.1\"\n  resolved \"https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9\"\n  integrity sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=\n  dependencies:\n    node-fetch \"^1.0.1\"\n    whatwg-fetch \">=0.10.0\"\n\nisomorphic-unfetch@^3.0.0:\n  version \"3.1.0\"\n  resolved \"https://registry.yarnpkg.com/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz#87341d5f4f7b63843d468438128cb087b7c3e98f\"\n  integrity sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==\n  dependencies:\n    node-fetch \"^2.6.1\"\n    unfetch \"^4.2.0\"\n\nisstream@~0.1.2:\n  version \"0.1.2\"\n  resolved \"https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a\"\n  integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=\n\nistanbul-lib-coverage@^3.0.0:\n  version \"3.0.0\"\n  resolved \"https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec\"\n  integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==\n\nistanbul-lib-instrument@^4.0.0:\n  version \"4.0.3\"\n  resolved \"https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d\"\n  integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==\n  dependencies:\n    \"@babel/core\" \"^7.7.5\"\n    \"@istanbuljs/schema\" \"^0.1.2\"\n    istanbul-lib-coverage \"^3.0.0\"\n    semver \"^6.3.0\"\n\nistanbul-lib-report@^3.0.0:\n  version \"3.0.0\"\n  resolved \"https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6\"\n  integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==\n  dependencies:\n    istanbul-lib-coverage \"^3.0.0\"\n    make-dir \"^3.0.0\"\n    supports-color \"^7.1.0\"\n\nistanbul-lib-source-maps@^4.0.0:\n  version \"4.0.0\"\n  resolved \"https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz#75743ce6d96bb86dc7ee4352cf6366a23f0b1ad9\"\n  integrity sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==\n  dependencies:\n    debug \"^4.1.1\"\n    istanbul-lib-coverage \"^3.0.0\"\n    source-map \"^0.6.1\"\n\nistanbul-reports@^3.0.2:\n  version \"3.0.2\"\n  resolved \"https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.2.tgz#d593210e5000683750cb09fc0644e4b6e27fd53b\"\n  integrity sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==\n  dependencies:\n    html-escaper \"^2.0.0\"\n    istanbul-lib-report \"^3.0.0\"\n\njest-changed-files@^25.5.0:\n  version \"25.5.0\"\n  resolved \"https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-25.5.0.tgz#141cc23567ceb3f534526f8614ba39421383634c\"\n  integrity sha512-EOw9QEqapsDT7mKF162m8HFzRPbmP8qJQny6ldVOdOVBz3ACgPm/1nAn5fPQ/NDaYhX/AHkrGwwkCncpAVSXcw==\n  dependencies:\n    \"@jest/types\" \"^25.5.0\"\n    execa \"^3.2.0\"\n    throat \"^5.0.0\"\n\njest-cli@^25.5.4:\n  version \"25.5.4\"\n  resolved \"https://registry.yarnpkg.com/jest-cli/-/jest-cli-25.5.4.tgz#b9f1a84d1301a92c5c217684cb79840831db9f0d\"\n  integrity sha512-rG8uJkIiOUpnREh1768/N3n27Cm+xPFkSNFO91tgg+8o2rXeVLStz+vkXkGr4UtzH6t1SNbjwoiswd7p4AhHTw==\n  dependencies:\n    \"@jest/core\" \"^25.5.4\"\n    \"@jest/test-result\" \"^25.5.0\"\n    \"@jest/types\" \"^25.5.0\"\n    chalk \"^3.0.0\"\n    exit \"^0.1.2\"\n    graceful-fs \"^4.2.4\"\n    import-local \"^3.0.2\"\n    is-ci \"^2.0.0\"\n    jest-config \"^25.5.4\"\n    jest-util \"^25.5.0\"\n    jest-validate \"^25.5.0\"\n    prompts \"^2.0.1\"\n    realpath-native \"^2.0.0\"\n    yargs \"^15.3.1\"\n\njest-config@^25.5.4:\n  version \"25.5.4\"\n  resolved \"https://registry.yarnpkg.com/jest-config/-/jest-config-25.5.4.tgz#38e2057b3f976ef7309b2b2c8dcd2a708a67f02c\"\n  integrity sha512-SZwR91SwcdK6bz7Gco8qL7YY2sx8tFJYzvg216DLihTWf+LKY/DoJXpM9nTzYakSyfblbqeU48p/p7Jzy05Atg==\n  dependencies:\n    \"@babel/core\" \"^7.1.0\"\n    \"@jest/test-sequencer\" \"^25.5.4\"\n    \"@jest/types\" \"^25.5.0\"\n    babel-jest \"^25.5.1\"\n    chalk \"^3.0.0\"\n    deepmerge \"^4.2.2\"\n    glob \"^7.1.1\"\n    graceful-fs \"^4.2.4\"\n    jest-environment-jsdom \"^25.5.0\"\n    jest-environment-node \"^25.5.0\"\n    jest-get-type \"^25.2.6\"\n    jest-jasmine2 \"^25.5.4\"\n    jest-regex-util \"^25.2.6\"\n    jest-resolve \"^25.5.1\"\n    jest-util \"^25.5.0\"\n    jest-validate \"^25.5.0\"\n    micromatch \"^4.0.2\"\n    pretty-format \"^25.5.0\"\n    realpath-native \"^2.0.0\"\n\njest-diff@^25.2.1, jest-diff@^25.5.0:\n  version \"25.5.0\"\n  resolved \"https://registry.yarnpkg.com/jest-diff/-/jest-diff-25.5.0.tgz#1dd26ed64f96667c068cef026b677dfa01afcfa9\"\n  integrity sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A==\n  dependencies:\n    chalk \"^3.0.0\"\n    diff-sequences \"^25.2.6\"\n    jest-get-type \"^25.2.6\"\n    pretty-format \"^25.5.0\"\n\njest-docblock@^21.0.0:\n  version \"21.2.0\"\n  resolved \"https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-21.2.0.tgz#51529c3b30d5fd159da60c27ceedc195faf8d414\"\n  integrity sha512-5IZ7sY9dBAYSV+YjQ0Ovb540Ku7AO9Z5o2Cg789xj167iQuZ2cG+z0f3Uct6WeYLbU6aQiM2pCs7sZ+4dotydw==\n\njest-docblock@^25.3.0:\n  version \"25.3.0\"\n  resolved \"https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-25.3.0.tgz#8b777a27e3477cd77a168c05290c471a575623ef\"\n  integrity sha512-aktF0kCar8+zxRHxQZwxMy70stc9R1mOmrLsT5VO3pIT0uzGRSDAXxSlz4NqQWpuLjPpuMhPRl7H+5FRsvIQAg==\n  dependencies:\n    detect-newline \"^3.0.0\"\n\njest-each@^25.5.0:\n  version \"25.5.0\"\n  resolved \"https://registry.yarnpkg.com/jest-each/-/jest-each-25.5.0.tgz#0c3c2797e8225cb7bec7e4d249dcd96b934be516\"\n  integrity sha512-QBogUxna3D8vtiItvn54xXde7+vuzqRrEeaw8r1s+1TG9eZLVJE5ZkKoSUlqFwRjnlaA4hyKGiu9OlkFIuKnjA==\n  dependencies:\n    \"@jest/types\" \"^25.5.0\"\n    chalk \"^3.0.0\"\n    jest-get-type \"^25.2.6\"\n    jest-util \"^25.5.0\"\n    pretty-format \"^25.5.0\"\n\njest-environment-jsdom@^25.5.0:\n  version \"25.5.0\"\n  resolved \"https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-25.5.0.tgz#dcbe4da2ea997707997040ecf6e2560aec4e9834\"\n  integrity sha512-7Jr02ydaq4jaWMZLY+Skn8wL5nVIYpWvmeatOHL3tOcV3Zw8sjnPpx+ZdeBfc457p8jCR9J6YCc+Lga0oIy62A==\n  dependencies:\n    \"@jest/environment\" \"^25.5.0\"\n    \"@jest/fake-timers\" \"^25.5.0\"\n    \"@jest/types\" \"^25.5.0\"\n    jest-mock \"^25.5.0\"\n    jest-util \"^25.5.0\"\n    jsdom \"^15.2.1\"\n\njest-environment-node@^25.5.0:\n  version \"25.5.0\"\n  resolved \"https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-25.5.0.tgz#0f55270d94804902988e64adca37c6ce0f7d07a1\"\n  integrity sha512-iuxK6rQR2En9EID+2k+IBs5fCFd919gVVK5BeND82fYeLWPqvRcFNPKu9+gxTwfB5XwBGBvZ0HFQa+cHtIoslA==\n  dependencies:\n    \"@jest/environment\" \"^25.5.0\"\n    \"@jest/fake-timers\" \"^25.5.0\"\n    \"@jest/types\" \"^25.5.0\"\n    jest-mock \"^25.5.0\"\n    jest-util \"^25.5.0\"\n    semver \"^6.3.0\"\n\njest-get-type@^25.2.6:\n  version \"25.2.6\"\n  resolved \"https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-25.2.6.tgz#0b0a32fab8908b44d508be81681487dbabb8d877\"\n  integrity sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig==\n\njest-haste-map@24.0.0-alpha.6:\n  version \"24.0.0-alpha.6\"\n  resolved \"https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.0.0-alpha.6.tgz#fb2c785080f391b923db51846b86840d0d773076\"\n  integrity sha512-+NO2HMbjvrG8BC39ieLukdpFrcPhhjCJGhpbHodHNZygH1Tt06WrlNYGpZtWKx/zpf533tCtMQXO/q59JenjNw==\n  dependencies:\n    fb-watchman \"^2.0.0\"\n    graceful-fs \"^4.1.11\"\n    invariant \"^2.2.4\"\n    jest-serializer \"^24.0.0-alpha.6\"\n    jest-worker \"^24.0.0-alpha.6\"\n    micromatch \"^2.3.11\"\n    sane \"^3.0.0\"\n\njest-haste-map@^25.5.1:\n  version \"25.5.1\"\n  resolved \"https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-25.5.1.tgz#1df10f716c1d94e60a1ebf7798c9fb3da2620943\"\n  integrity sha512-dddgh9UZjV7SCDQUrQ+5t9yy8iEgKc1AKqZR9YDww8xsVOtzPQSMVLDChc21+g29oTRexb9/B0bIlZL+sWmvAQ==\n  dependencies:\n    \"@jest/types\" \"^25.5.0\"\n    \"@types/graceful-fs\" \"^4.1.2\"\n    anymatch \"^3.0.3\"\n    fb-watchman \"^2.0.0\"\n    graceful-fs \"^4.2.4\"\n    jest-serializer \"^25.5.0\"\n    jest-util \"^25.5.0\"\n    jest-worker \"^25.5.0\"\n    micromatch \"^4.0.2\"\n    sane \"^4.0.3\"\n    walker \"^1.0.7\"\n    which \"^2.0.2\"\n  optionalDependencies:\n    fsevents \"^2.1.2\"\n\njest-jasmine2@^25.5.4:\n  version \"25.5.4\"\n  resolved \"https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-25.5.4.tgz#66ca8b328fb1a3c5364816f8958f6970a8526968\"\n  integrity sha512-9acbWEfbmS8UpdcfqnDO+uBUgKa/9hcRh983IHdM+pKmJPL77G0sWAAK0V0kr5LK3a8cSBfkFSoncXwQlRZfkQ==\n  dependencies:\n    \"@babel/traverse\" \"^7.1.0\"\n    \"@jest/environment\" \"^25.5.0\"\n    \"@jest/source-map\" \"^25.5.0\"\n    \"@jest/test-result\" \"^25.5.0\"\n    \"@jest/types\" \"^25.5.0\"\n    chalk \"^3.0.0\"\n    co \"^4.6.0\"\n    expect \"^25.5.0\"\n    is-generator-fn \"^2.0.0\"\n    jest-each \"^25.5.0\"\n    jest-matcher-utils \"^25.5.0\"\n    jest-message-util \"^25.5.0\"\n    jest-runtime \"^25.5.4\"\n    jest-snapshot \"^25.5.1\"\n    jest-util \"^25.5.0\"\n    pretty-format \"^25.5.0\"\n    throat \"^5.0.0\"\n\njest-leak-detector@^25.5.0:\n  version \"25.5.0\"\n  resolved \"https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-25.5.0.tgz#2291c6294b0ce404241bb56fe60e2d0c3e34f0bb\"\n  integrity sha512-rV7JdLsanS8OkdDpZtgBf61L5xZ4NnYLBq72r6ldxahJWWczZjXawRsoHyXzibM5ed7C2QRjpp6ypgwGdKyoVA==\n  dependencies:\n    jest-get-type \"^25.2.6\"\n    pretty-format \"^25.5.0\"\n\njest-matcher-utils@^25.5.0:\n  version \"25.5.0\"\n  resolved \"https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-25.5.0.tgz#fbc98a12d730e5d2453d7f1ed4a4d948e34b7867\"\n  integrity sha512-VWI269+9JS5cpndnpCwm7dy7JtGQT30UHfrnM3mXl22gHGt/b7NkjBqXfbhZ8V4B7ANUsjK18PlSBmG0YH7gjw==\n  dependencies:\n    chalk \"^3.0.0\"\n    jest-diff \"^25.5.0\"\n    jest-get-type \"^25.2.6\"\n    pretty-format \"^25.5.0\"\n\njest-message-util@^25.5.0:\n  version \"25.5.0\"\n  resolved \"https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-25.5.0.tgz#ea11d93204cc7ae97456e1d8716251185b8880ea\"\n  integrity sha512-ezddz3YCT/LT0SKAmylVyWWIGYoKHOFOFXx3/nA4m794lfVUskMcwhip6vTgdVrOtYdjeQeis2ypzes9mZb4EA==\n  dependencies:\n    \"@babel/code-frame\" \"^7.0.0\"\n    \"@jest/types\" \"^25.5.0\"\n    \"@types/stack-utils\" \"^1.0.1\"\n    chalk \"^3.0.0\"\n    graceful-fs \"^4.2.4\"\n    micromatch \"^4.0.2\"\n    slash \"^3.0.0\"\n    stack-utils \"^1.0.1\"\n\njest-mock@^25.5.0:\n  version \"25.5.0\"\n  resolved \"https://registry.yarnpkg.com/jest-mock/-/jest-mock-25.5.0.tgz#a91a54dabd14e37ecd61665d6b6e06360a55387a\"\n  integrity sha512-eXWuTV8mKzp/ovHc5+3USJMYsTBhyQ+5A1Mak35dey/RG8GlM4YWVylZuGgVXinaW6tpvk/RSecmF37FKUlpXA==\n  dependencies:\n    \"@jest/types\" \"^25.5.0\"\n\njest-pnp-resolver@^1.2.1:\n  version \"1.2.1\"\n  resolved \"https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz#ecdae604c077a7fbc70defb6d517c3c1c898923a\"\n  integrity sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ==\n\njest-regex-util@^25.2.1, jest-regex-util@^25.2.6:\n  version \"25.2.6\"\n  resolved \"https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-25.2.6.tgz#d847d38ba15d2118d3b06390056028d0f2fd3964\"\n  integrity sha512-KQqf7a0NrtCkYmZZzodPftn7fL1cq3GQAFVMn5Hg8uKx/fIenLEobNanUxb7abQ1sjADHBseG/2FGpsv/wr+Qw==\n\njest-resolve-dependencies@^25.5.4:\n  version \"25.5.4\"\n  resolved \"https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-25.5.4.tgz#85501f53957c8e3be446e863a74777b5a17397a7\"\n  integrity sha512-yFmbPd+DAQjJQg88HveObcGBA32nqNZ02fjYmtL16t1xw9bAttSn5UGRRhzMHIQbsep7znWvAvnD4kDqOFM0Uw==\n  dependencies:\n    \"@jest/types\" \"^25.5.0\"\n    jest-regex-util \"^25.2.6\"\n    jest-snapshot \"^25.5.1\"\n\njest-resolve@^25.5.1:\n  version \"25.5.1\"\n  resolved \"https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-25.5.1.tgz#0e6fbcfa7c26d2a5fe8f456088dc332a79266829\"\n  integrity sha512-Hc09hYch5aWdtejsUZhA+vSzcotf7fajSlPA6EZPE1RmPBAD39XtJhvHWFStid58iit4IPDLI/Da4cwdDmAHiQ==\n  dependencies:\n    \"@jest/types\" \"^25.5.0\"\n    browser-resolve \"^1.11.3\"\n    chalk \"^3.0.0\"\n    graceful-fs \"^4.2.4\"\n    jest-pnp-resolver \"^1.2.1\"\n    read-pkg-up \"^7.0.1\"\n    realpath-native \"^2.0.0\"\n    resolve \"^1.17.0\"\n    slash \"^3.0.0\"\n\njest-runner@^25.5.4:\n  version \"25.5.4\"\n  resolved \"https://registry.yarnpkg.com/jest-runner/-/jest-runner-25.5.4.tgz#ffec5df3875da5f5c878ae6d0a17b8e4ecd7c71d\"\n  integrity sha512-V/2R7fKZo6blP8E9BL9vJ8aTU4TH2beuqGNxHbxi6t14XzTb+x90B3FRgdvuHm41GY8ch4xxvf0ATH4hdpjTqg==\n  dependencies:\n    \"@jest/console\" \"^25.5.0\"\n    \"@jest/environment\" \"^25.5.0\"\n    \"@jest/test-result\" \"^25.5.0\"\n    \"@jest/types\" \"^25.5.0\"\n    chalk \"^3.0.0\"\n    exit \"^0.1.2\"\n    graceful-fs \"^4.2.4\"\n    jest-config \"^25.5.4\"\n    jest-docblock \"^25.3.0\"\n    jest-haste-map \"^25.5.1\"\n    jest-jasmine2 \"^25.5.4\"\n    jest-leak-detector \"^25.5.0\"\n    jest-message-util \"^25.5.0\"\n    jest-resolve \"^25.5.1\"\n    jest-runtime \"^25.5.4\"\n    jest-util \"^25.5.0\"\n    jest-worker \"^25.5.0\"\n    source-map-support \"^0.5.6\"\n    throat \"^5.0.0\"\n\njest-runtime@^25.5.4:\n  version \"25.5.4\"\n  resolved \"https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-25.5.4.tgz#dc981fe2cb2137abcd319e74ccae7f7eeffbfaab\"\n  integrity sha512-RWTt8LeWh3GvjYtASH2eezkc8AehVoWKK20udV6n3/gC87wlTbE1kIA+opCvNWyyPeBs6ptYsc6nyHUb1GlUVQ==\n  dependencies:\n    \"@jest/console\" \"^25.5.0\"\n    \"@jest/environment\" \"^25.5.0\"\n    \"@jest/globals\" \"^25.5.2\"\n    \"@jest/source-map\" \"^25.5.0\"\n    \"@jest/test-result\" \"^25.5.0\"\n    \"@jest/transform\" \"^25.5.1\"\n    \"@jest/types\" \"^25.5.0\"\n    \"@types/yargs\" \"^15.0.0\"\n    chalk \"^3.0.0\"\n    collect-v8-coverage \"^1.0.0\"\n    exit \"^0.1.2\"\n    glob \"^7.1.3\"\n    graceful-fs \"^4.2.4\"\n    jest-config \"^25.5.4\"\n    jest-haste-map \"^25.5.1\"\n    jest-message-util \"^25.5.0\"\n    jest-mock \"^25.5.0\"\n    jest-regex-util \"^25.2.6\"\n    jest-resolve \"^25.5.1\"\n    jest-snapshot \"^25.5.1\"\n    jest-util \"^25.5.0\"\n    jest-validate \"^25.5.0\"\n    realpath-native \"^2.0.0\"\n    slash \"^3.0.0\"\n    strip-bom \"^4.0.0\"\n    yargs \"^15.3.1\"\n\njest-serializer@24.0.0-alpha.6:\n  version \"24.0.0-alpha.6\"\n  resolved \"https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.0.0-alpha.6.tgz#27d2fee4b1a85698717a30c3ec2ab80767312597\"\n  integrity sha512-IPA5T6/GhlE6dedSk7Cd7YfuORnYjN0VD5iJVFn1Q81RJjpj++Hen5kJbKcg547vXsQ1TddV15qOA/zeIfOCLw==\n\njest-serializer@^24.0.0-alpha.6:\n  version \"24.9.0\"\n  resolved \"https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.9.0.tgz#e6d7d7ef96d31e8b9079a714754c5d5c58288e73\"\n  integrity sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==\n\njest-serializer@^25.5.0:\n  version \"25.5.0\"\n  resolved \"https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-25.5.0.tgz#a993f484e769b4ed54e70e0efdb74007f503072b\"\n  integrity sha512-LxD8fY1lByomEPflwur9o4e2a5twSQ7TaVNLlFUuToIdoJuBt8tzHfCsZ42Ok6LkKXWzFWf3AGmheuLAA7LcCA==\n  dependencies:\n    graceful-fs \"^4.2.4\"\n\njest-snapshot@^25.5.1:\n  version \"25.5.1\"\n  resolved \"https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-25.5.1.tgz#1a2a576491f9961eb8d00c2e5fd479bc28e5ff7f\"\n  integrity sha512-C02JE1TUe64p2v1auUJ2ze5vcuv32tkv9PyhEb318e8XOKF7MOyXdJ7kdjbvrp3ChPLU2usI7Rjxs97Dj5P0uQ==\n  dependencies:\n    \"@babel/types\" \"^7.0.0\"\n    \"@jest/types\" \"^25.5.0\"\n    \"@types/prettier\" \"^1.19.0\"\n    chalk \"^3.0.0\"\n    expect \"^25.5.0\"\n    graceful-fs \"^4.2.4\"\n    jest-diff \"^25.5.0\"\n    jest-get-type \"^25.2.6\"\n    jest-matcher-utils \"^25.5.0\"\n    jest-message-util \"^25.5.0\"\n    jest-resolve \"^25.5.1\"\n    make-dir \"^3.0.0\"\n    natural-compare \"^1.4.0\"\n    pretty-format \"^25.5.0\"\n    semver \"^6.3.0\"\n\njest-util@^25.5.0:\n  version \"25.5.0\"\n  resolved \"https://registry.yarnpkg.com/jest-util/-/jest-util-25.5.0.tgz#31c63b5d6e901274d264a4fec849230aa3fa35b0\"\n  integrity sha512-KVlX+WWg1zUTB9ktvhsg2PXZVdkI1NBevOJSkTKYAyXyH4QSvh+Lay/e/v+bmaFfrkfx43xD8QTfgobzlEXdIA==\n  dependencies:\n    \"@jest/types\" \"^25.5.0\"\n    chalk \"^3.0.0\"\n    graceful-fs \"^4.2.4\"\n    is-ci \"^2.0.0\"\n    make-dir \"^3.0.0\"\n\njest-validate@^25.5.0:\n  version \"25.5.0\"\n  resolved \"https://registry.yarnpkg.com/jest-validate/-/jest-validate-25.5.0.tgz#fb4c93f332c2e4cf70151a628e58a35e459a413a\"\n  integrity sha512-okUFKqhZIpo3jDdtUXUZ2LxGUZJIlfdYBvZb1aczzxrlyMlqdnnws9MOxezoLGhSaFc2XYaHNReNQfj5zPIWyQ==\n  dependencies:\n    \"@jest/types\" \"^25.5.0\"\n    camelcase \"^5.3.1\"\n    chalk \"^3.0.0\"\n    jest-get-type \"^25.2.6\"\n    leven \"^3.1.0\"\n    pretty-format \"^25.5.0\"\n\njest-watch-typeahead@^0.5.0:\n  version \"0.5.0\"\n  resolved \"https://registry.yarnpkg.com/jest-watch-typeahead/-/jest-watch-typeahead-0.5.0.tgz#903dba6112f22daae7e90b0a271853f7ff182008\"\n  integrity sha512-4r36w9vU8+rdg48hj0Z7TvcSqVP6Ao8dk04grlHQNgduyCB0SqrI0xWIl85ZhXrzYvxQ0N5H+rRLAejkQzEHeQ==\n  dependencies:\n    ansi-escapes \"^4.2.1\"\n    chalk \"^3.0.0\"\n    jest-regex-util \"^25.2.1\"\n    jest-watcher \"^25.2.4\"\n    slash \"^3.0.0\"\n    string-length \"^3.1.0\"\n    strip-ansi \"^6.0.0\"\n\njest-watcher@^25.2.4, jest-watcher@^25.5.0:\n  version \"25.5.0\"\n  resolved \"https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-25.5.0.tgz#d6110d101df98badebe435003956fd4a465e8456\"\n  integrity sha512-XrSfJnVASEl+5+bb51V0Q7WQx65dTSk7NL4yDdVjPnRNpM0hG+ncFmDYJo9O8jaSRcAitVbuVawyXCRoxGrT5Q==\n  dependencies:\n    \"@jest/test-result\" \"^25.5.0\"\n    \"@jest/types\" \"^25.5.0\"\n    ansi-escapes \"^4.2.1\"\n    chalk \"^3.0.0\"\n    jest-util \"^25.5.0\"\n    string-length \"^3.1.0\"\n\njest-worker@24.0.0-alpha.6:\n  version \"24.0.0-alpha.6\"\n  resolved \"https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.0.0-alpha.6.tgz#463681b92c117c57107135c14b9b9d6cd51d80ce\"\n  integrity sha512-iXtH7MR9bjWlNnlnRBcrBRrb4cSVxML96La5vsnmBvDI+mJnkP5uEt6Fgpo5Y8f3z9y2Rd7wuPnKRxqQsiU/dA==\n  dependencies:\n    merge-stream \"^1.0.1\"\n\njest-worker@^24.0.0-alpha.6, jest-worker@^24.6.0:\n  version \"24.9.0\"\n  resolved \"https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5\"\n  integrity sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==\n  dependencies:\n    merge-stream \"^2.0.0\"\n    supports-color \"^6.1.0\"\n\njest-worker@^25.5.0:\n  version \"25.5.0\"\n  resolved \"https://registry.yarnpkg.com/jest-worker/-/jest-worker-25.5.0.tgz#2611d071b79cea0f43ee57a3d118593ac1547db1\"\n  integrity sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw==\n  dependencies:\n    merge-stream \"^2.0.0\"\n    supports-color \"^7.0.0\"\n\njest@^25.3.0:\n  version \"25.5.4\"\n  resolved \"https://registry.yarnpkg.com/jest/-/jest-25.5.4.tgz#f21107b6489cfe32b076ce2adcadee3587acb9db\"\n  integrity sha512-hHFJROBTqZahnO+X+PMtT6G2/ztqAZJveGqz//FnWWHurizkD05PQGzRZOhF3XP6z7SJmL+5tCfW8qV06JypwQ==\n  dependencies:\n    \"@jest/core\" \"^25.5.4\"\n    import-local \"^3.0.2\"\n    jest-cli \"^25.5.4\"\n\njiti@^1.18.2:\n  version \"1.18.2\"\n  resolved \"https://registry.yarnpkg.com/jiti/-/jiti-1.18.2.tgz#80c3ef3d486ebf2450d9335122b32d121f2a83cd\"\n  integrity sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==\n\njpjs@^1.2.1:\n  version \"1.2.1\"\n  resolved \"https://registry.yarnpkg.com/jpjs/-/jpjs-1.2.1.tgz#f343833de8838a5beba1f42d5a219be0114c44b7\"\n  integrity sha512-GxJWybWU4NV0RNKi6EIqk6IRPOTqd/h+U7sbtyuD7yUISUzV78LdHnq2xkevJsTlz/EImux4sWj+wfMiwKLkiw==\n\n\"js-tokens@^3.0.0 || ^4.0.0\", js-tokens@^4.0.0:\n  version \"4.0.0\"\n  resolved \"https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499\"\n  integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==\n\njs-yaml@^3.13.1, js-yaml@^3.6.1:\n  version \"3.14.0\"\n  resolved \"https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482\"\n  integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==\n  dependencies:\n    argparse \"^1.0.7\"\n    esprima \"^4.0.0\"\n\njsbn@~0.1.0:\n  version \"0.1.1\"\n  resolved \"https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513\"\n  integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM=\n\njsdom@^15.2.1:\n  version \"15.2.1\"\n  resolved \"https://registry.yarnpkg.com/jsdom/-/jsdom-15.2.1.tgz#d2feb1aef7183f86be521b8c6833ff5296d07ec5\"\n  integrity sha512-fAl1W0/7T2G5vURSyxBzrJ1LSdQn6Tr5UX/xD4PXDx/PDgwygedfW6El/KIj3xJ7FU61TTYnc/l/B7P49Eqt6g==\n  dependencies:\n    abab \"^2.0.0\"\n    acorn \"^7.1.0\"\n    acorn-globals \"^4.3.2\"\n    array-equal \"^1.0.0\"\n    cssom \"^0.4.1\"\n    cssstyle \"^2.0.0\"\n    data-urls \"^1.1.0\"\n    domexception \"^1.0.1\"\n    escodegen \"^1.11.1\"\n    html-encoding-sniffer \"^1.0.2\"\n    nwsapi \"^2.2.0\"\n    parse5 \"5.1.0\"\n    pn \"^1.1.0\"\n    request \"^2.88.0\"\n    request-promise-native \"^1.0.7\"\n    saxes \"^3.1.9\"\n    symbol-tree \"^3.2.2\"\n    tough-cookie \"^3.0.1\"\n    w3c-hr-time \"^1.0.1\"\n    w3c-xmlserializer \"^1.1.2\"\n    webidl-conversions \"^4.0.2\"\n    whatwg-encoding \"^1.0.5\"\n    whatwg-mimetype \"^2.3.0\"\n    whatwg-url \"^7.0.0\"\n    ws \"^7.0.0\"\n    xml-name-validator \"^3.0.0\"\n\njsesc@^2.5.1:\n  version \"2.5.2\"\n  resolved \"https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4\"\n  integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==\n\njsesc@~0.5.0:\n  version \"0.5.0\"\n  resolved \"https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d\"\n  integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=\n\njson-parse-better-errors@^1.0.1:\n  version \"1.0.2\"\n  resolved \"https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9\"\n  integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==\n\njson-schema-traverse@^0.4.1:\n  version \"0.4.1\"\n  resolved \"https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660\"\n  integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==\n\njson-schema-traverse@^1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2\"\n  integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==\n\njson-schema@0.2.3:\n  version \"0.2.3\"\n  resolved \"https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13\"\n  integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=\n\njson-stable-stringify-without-jsonify@^1.0.1:\n  version \"1.0.1\"\n  resolved \"https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651\"\n  integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=\n\njson-stable-stringify@^1.0.1:\n  version \"1.0.1\"\n  resolved \"https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af\"\n  integrity sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=\n  dependencies:\n    jsonify \"~0.0.0\"\n\njson-stringify-safe@~5.0.1:\n  version \"5.0.1\"\n  resolved \"https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb\"\n  integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=\n\njson5@2.x, json5@^2.1.0:\n  version \"2.1.1\"\n  resolved \"https://registry.yarnpkg.com/json5/-/json5-2.1.1.tgz#81b6cb04e9ba496f1c7005d07b4368a2638f90b6\"\n  integrity sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==\n  dependencies:\n    minimist \"^1.2.0\"\n\njson5@^1.0.2:\n  version \"1.0.2\"\n  resolved \"https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593\"\n  integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==\n  dependencies:\n    minimist \"^1.2.0\"\n\njson5@^2.1.2:\n  version \"2.1.3\"\n  resolved \"https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43\"\n  integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==\n  dependencies:\n    minimist \"^1.2.5\"\n\njsonfile@^2.1.0:\n  version \"2.4.0\"\n  resolved \"https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8\"\n  integrity sha1-NzaitCi4e72gzIO1P6PWM6NcKug=\n  optionalDependencies:\n    graceful-fs \"^4.1.6\"\n\njsonfile@^4.0.0:\n  version \"4.0.0\"\n  resolved \"https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb\"\n  integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=\n  optionalDependencies:\n    graceful-fs \"^4.1.6\"\n\njsonfile@^6.0.1:\n  version \"6.0.1\"\n  resolved \"https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179\"\n  integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==\n  dependencies:\n    universalify \"^1.0.0\"\n  optionalDependencies:\n    graceful-fs \"^4.1.6\"\n\njsonify@~0.0.0:\n  version \"0.0.0\"\n  resolved \"https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73\"\n  integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=\n\njsprim@^1.2.2:\n  version \"1.4.1\"\n  resolved \"https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2\"\n  integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=\n  dependencies:\n    assert-plus \"1.0.0\"\n    extsprintf \"1.3.0\"\n    json-schema \"0.2.3\"\n    verror \"1.10.0\"\n\njsx-ast-utils@^2.0.1:\n  version \"2.4.1\"\n  resolved \"https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.4.1.tgz#1114a4c1209481db06c690c2b4f488cc665f657e\"\n  integrity sha512-z1xSldJ6imESSzOjd3NNkieVJKRlKYSOtMG8SFyCj2FIrvSaSuli/WjpBkEzCBoR9bYYYFgqJw61Xhu7Lcgk+w==\n  dependencies:\n    array-includes \"^3.1.1\"\n    object.assign \"^4.1.0\"\n\njsx-ast-utils@^2.2.1, jsx-ast-utils@^2.2.3:\n  version \"2.2.3\"\n  resolved \"https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.2.3.tgz#8a9364e402448a3ce7f14d357738310d9248054f\"\n  integrity sha512-EdIHFMm+1BPynpKOpdPqiOsvnIrInRGJD7bzPZdPkjitQEqpdpUuFpq4T0npZFKTiB3RhWFdGN+oqOJIdhDhQA==\n  dependencies:\n    array-includes \"^3.0.3\"\n    object.assign \"^4.1.0\"\n\n\"jsx-ast-utils@^2.4.1 || ^3.0.0\", jsx-ast-utils@^3.3.3:\n  version \"3.3.3\"\n  resolved \"https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz#76b3e6e6cece5c69d49a5792c3d01bd1a0cdc7ea\"\n  integrity sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==\n  dependencies:\n    array-includes \"^3.1.5\"\n    object.assign \"^4.1.3\"\n\njust-debounce-it@^1.1.0:\n  version \"1.1.0\"\n  resolved \"https://registry.yarnpkg.com/just-debounce-it/-/just-debounce-it-1.1.0.tgz#8e92578effc155358a44f458c52ffbee66983bef\"\n  integrity sha512-87Nnc0qZKgBZuhFZjYVjSraic0x7zwjhaTMrCKlj0QYKH6lh0KbFzVnfu6LHan03NO7J8ygjeBeD0epejn5Zcg==\n\nkind-of@^1.1.0:\n  version \"1.1.0\"\n  resolved \"https://registry.yarnpkg.com/kind-of/-/kind-of-1.1.0.tgz#140a3d2d41a36d2efcfa9377b62c24f8495a5c44\"\n  integrity sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=\n\nkind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:\n  version \"3.2.2\"\n  resolved \"https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64\"\n  integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=\n  dependencies:\n    is-buffer \"^1.1.5\"\n\nkind-of@^4.0.0:\n  version \"4.0.0\"\n  resolved \"https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57\"\n  integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc=\n  dependencies:\n    is-buffer \"^1.1.5\"\n\nkind-of@^5.0.0:\n  version \"5.1.0\"\n  resolved \"https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d\"\n  integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==\n\nkind-of@^6.0.0, kind-of@^6.0.2:\n  version \"6.0.3\"\n  resolved \"https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd\"\n  integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==\n\nklaw@^1.0.0:\n  version \"1.3.1\"\n  resolved \"https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439\"\n  integrity sha1-QIhDO0azsbolnXh4XY6W9zugJDk=\n  optionalDependencies:\n    graceful-fs \"^4.1.9\"\n\nkleur@^3.0.3:\n  version \"3.0.3\"\n  resolved \"https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e\"\n  integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==\n\nlanguage-subtag-registry@~0.3.2:\n  version \"0.3.22\"\n  resolved \"https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d\"\n  integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==\n\nlanguage-tags@=1.0.5:\n  version \"1.0.5\"\n  resolved \"https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a\"\n  integrity sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==\n  dependencies:\n    language-subtag-registry \"~0.3.2\"\n\nlcid@^1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835\"\n  integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=\n  dependencies:\n    invert-kv \"^1.0.0\"\n\nleven@^3.1.0:\n  version \"3.1.0\"\n  resolved \"https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2\"\n  integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==\n\nlevenary@^1.1.1:\n  version \"1.1.1\"\n  resolved \"https://registry.yarnpkg.com/levenary/-/levenary-1.1.1.tgz#842a9ee98d2075aa7faeedbe32679e9205f46f77\"\n  integrity sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==\n  dependencies:\n    leven \"^3.1.0\"\n\nlevn@^0.3.0, levn@~0.3.0:\n  version \"0.3.0\"\n  resolved \"https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee\"\n  integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=\n  dependencies:\n    prelude-ls \"~1.1.2\"\n    type-check \"~0.3.2\"\n\nlevn@^0.4.1:\n  version \"0.4.1\"\n  resolved \"https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade\"\n  integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==\n  dependencies:\n    prelude-ls \"^1.2.1\"\n    type-check \"~0.4.0\"\n\nlilconfig@^2.0.5, lilconfig@^2.1.0:\n  version \"2.1.0\"\n  resolved \"https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52\"\n  integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==\n\nlines-and-columns@^1.1.6:\n  version \"1.1.6\"\n  resolved \"https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00\"\n  integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=\n\nlint-staged@^10.4.0:\n  version \"10.4.0\"\n  resolved \"https://registry.yarnpkg.com/lint-staged/-/lint-staged-10.4.0.tgz#d18628f737328e0bbbf87d183f4020930e9a984e\"\n  integrity sha512-uaiX4U5yERUSiIEQc329vhCTDDwUcSvKdRLsNomkYLRzijk3v8V9GWm2Nz0RMVB87VcuzLvtgy6OsjoH++QHIg==\n  dependencies:\n    chalk \"^4.1.0\"\n    cli-truncate \"^2.1.0\"\n    commander \"^6.0.0\"\n    cosmiconfig \"^7.0.0\"\n    debug \"^4.1.1\"\n    dedent \"^0.7.0\"\n    enquirer \"^2.3.6\"\n    execa \"^4.0.3\"\n    listr2 \"^2.6.0\"\n    log-symbols \"^4.0.0\"\n    micromatch \"^4.0.2\"\n    normalize-path \"^3.0.0\"\n    please-upgrade-node \"^3.2.0\"\n    string-argv \"0.3.1\"\n    stringify-object \"^3.3.0\"\n\nlistr2@^2.6.0:\n  version \"2.6.2\"\n  resolved \"https://registry.yarnpkg.com/listr2/-/listr2-2.6.2.tgz#4912eb01e1e2dd72ec37f3895a56bf2622d6f36a\"\n  integrity sha512-6x6pKEMs8DSIpA/tixiYY2m/GcbgMplMVmhQAaLFxEtNSKLeWTGjtmU57xvv6QCm2XcqzyNXL/cTSVf4IChCRA==\n  dependencies:\n    chalk \"^4.1.0\"\n    cli-truncate \"^2.1.0\"\n    figures \"^3.2.0\"\n    indent-string \"^4.0.0\"\n    log-update \"^4.0.0\"\n    p-map \"^4.0.0\"\n    rxjs \"^6.6.2\"\n    through \"^2.3.8\"\n\nload-json-file@^2.0.0:\n  version \"2.0.0\"\n  resolved \"https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8\"\n  integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=\n  dependencies:\n    graceful-fs \"^4.1.2\"\n    parse-json \"^2.2.0\"\n    pify \"^2.0.0\"\n    strip-bom \"^3.0.0\"\n\nload-script@^1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/load-script/-/load-script-1.0.0.tgz#0491939e0bee5643ee494a7e3da3d2bac70c6ca4\"\n  integrity sha512-kPEjMFtZvwL9TaZo0uZ2ml+Ye9HUMmPwbYRJ324qF9tqMejwykJ5ggTyvzmrbBeapCAbk98BSbTeovHEEP1uCA==\n\nloader-utils@2.0.0:\n  version \"2.0.0\"\n  resolved \"https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0\"\n  integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==\n  dependencies:\n    big.js \"^5.2.2\"\n    emojis-list \"^3.0.0\"\n    json5 \"^2.1.2\"\n\nlocate-path@^2.0.0:\n  version \"2.0.0\"\n  resolved \"https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e\"\n  integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=\n  dependencies:\n    p-locate \"^2.0.0\"\n    path-exists \"^3.0.0\"\n\nlocate-path@^3.0.0:\n  version \"3.0.0\"\n  resolved \"https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e\"\n  integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==\n  dependencies:\n    p-locate \"^3.0.0\"\n    path-exists \"^3.0.0\"\n\nlocate-path@^5.0.0:\n  version \"5.0.0\"\n  resolved \"https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0\"\n  integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==\n  dependencies:\n    p-locate \"^4.1.0\"\n\nlocate-path@^6.0.0:\n  version \"6.0.0\"\n  resolved \"https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286\"\n  integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==\n  dependencies:\n    p-locate \"^5.0.0\"\n\nlodash-es@^4.17.21:\n  version \"4.17.21\"\n  resolved \"https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee\"\n  integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==\n\nlodash.debounce@^4.0.8:\n  version \"4.0.8\"\n  resolved \"https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af\"\n  integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168=\n\nlodash.memoize@4.x:\n  version \"4.1.2\"\n  resolved \"https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe\"\n  integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=\n\nlodash.merge@^4.6.2:\n  version \"4.6.2\"\n  resolved \"https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a\"\n  integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==\n\nlodash.pad@^4.1.0:\n  version \"4.5.1\"\n  resolved \"https://registry.yarnpkg.com/lodash.pad/-/lodash.pad-4.5.1.tgz#4330949a833a7c8da22cc20f6a26c4d59debba70\"\n  integrity sha1-QzCUmoM6fI2iLMIPaibE1Z3runA=\n\nlodash.padend@^4.1.0:\n  version \"4.6.1\"\n  resolved \"https://registry.yarnpkg.com/lodash.padend/-/lodash.padend-4.6.1.tgz#53ccba047d06e158d311f45da625f4e49e6f166e\"\n  integrity sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=\n\nlodash.padstart@^4.1.0:\n  version \"4.6.1\"\n  resolved \"https://registry.yarnpkg.com/lodash.padstart/-/lodash.padstart-4.6.1.tgz#d2e3eebff0d9d39ad50f5cbd1b52a7bce6bb611b\"\n  integrity sha1-0uPuv/DZ05rVD1y9G1KnvOa7YRs=\n\nlodash.sortby@^4.7.0:\n  version \"4.7.0\"\n  resolved \"https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438\"\n  integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=\n\nlodash.startcase@^4.4.0:\n  version \"4.4.0\"\n  resolved \"https://registry.yarnpkg.com/lodash.startcase/-/lodash.startcase-4.4.0.tgz#9436e34ed26093ed7ffae1936144350915d9add8\"\n  integrity sha1-lDbjTtJgk+1/+uGTYUQ1CRXZrdg=\n\nlodash.throttle@^4.1.1:\n  version \"4.1.1\"\n  resolved \"https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4\"\n  integrity sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=\n\nlodash.truncate@^4.4.2:\n  version \"4.4.2\"\n  resolved \"https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193\"\n  integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==\n\nlodash.unescape@4.0.1:\n  version \"4.0.1\"\n  resolved \"https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c\"\n  integrity sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=\n\nlodash.uniq@4.5.0:\n  version \"4.5.0\"\n  resolved \"https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773\"\n  integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==\n\nlodash@^4.17.10, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.19, lodash@^4.17.5, lodash@^4.3.0, lodash@^4.6.1:\n  version \"4.17.20\"\n  resolved \"https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52\"\n  integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==\n\nlodash@^4.17.15:\n  version \"4.17.15\"\n  resolved \"https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548\"\n  integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==\n\nlodash@^4.17.21, lodash@^4.17.4:\n  version \"4.17.21\"\n  resolved \"https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c\"\n  integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==\n\nlog-symbols@^3.0.0:\n  version \"3.0.0\"\n  resolved \"https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4\"\n  integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==\n  dependencies:\n    chalk \"^2.4.2\"\n\nlog-symbols@^4.0.0:\n  version \"4.0.0\"\n  resolved \"https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.0.0.tgz#69b3cc46d20f448eccdb75ea1fa733d9e821c920\"\n  integrity sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==\n  dependencies:\n    chalk \"^4.0.0\"\n\nlog-update@^2.3.0:\n  version \"2.3.0\"\n  resolved \"https://registry.yarnpkg.com/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708\"\n  integrity sha1-iDKP19HOeTiykoN0bwsbwSayRwg=\n  dependencies:\n    ansi-escapes \"^3.0.0\"\n    cli-cursor \"^2.0.0\"\n    wrap-ansi \"^3.0.1\"\n\nlog-update@^4.0.0:\n  version \"4.0.0\"\n  resolved \"https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1\"\n  integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==\n  dependencies:\n    ansi-escapes \"^4.3.0\"\n    cli-cursor \"^3.1.0\"\n    slice-ansi \"^4.0.0\"\n    wrap-ansi \"^6.2.0\"\n\nlolex@^5.0.0:\n  version \"5.1.2\"\n  resolved \"https://registry.yarnpkg.com/lolex/-/lolex-5.1.2.tgz#953694d098ce7c07bc5ed6d0e42bc6c0c6d5a367\"\n  integrity sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A==\n  dependencies:\n    \"@sinonjs/commons\" \"^1.7.0\"\n\nlongest-streak@^2.0.1:\n  version \"2.0.4\"\n  resolved \"https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.4.tgz#b8599957da5b5dab64dee3fe316fa774597d90e4\"\n  integrity sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==\n\nloose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1, loose-envify@^1.4.0:\n  version \"1.4.0\"\n  resolved \"https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf\"\n  integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==\n  dependencies:\n    js-tokens \"^3.0.0 || ^4.0.0\"\n\nlower-case@^2.0.1:\n  version \"2.0.1\"\n  resolved \"https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.1.tgz#39eeb36e396115cc05e29422eaea9e692c9408c7\"\n  integrity sha512-LiWgfDLLb1dwbFQZsSglpRj+1ctGnayXz3Uv0/WO8n558JycT5fg6zkNcnW0G68Nn0aEldTFeEfmjCfmqry/rQ==\n  dependencies:\n    tslib \"^1.10.0\"\n\nlru-cache@5.1.1, lru-cache@^5.1.1:\n  version \"5.1.1\"\n  resolved \"https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920\"\n  integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==\n  dependencies:\n    yallist \"^3.0.2\"\n\nlru-cache@^4.0.1:\n  version \"4.1.5\"\n  resolved \"https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd\"\n  integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==\n  dependencies:\n    pseudomap \"^1.0.2\"\n    yallist \"^2.1.2\"\n\nlru-cache@^6.0.0:\n  version \"6.0.0\"\n  resolved \"https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94\"\n  integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==\n  dependencies:\n    yallist \"^4.0.0\"\n\nlz-string@^1.5.0:\n  version \"1.5.0\"\n  resolved \"https://registry.yarnpkg.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941\"\n  integrity sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==\n\nmagic-string@^0.25.0, magic-string@^0.25.1:\n  version \"0.25.9\"\n  resolved \"https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c\"\n  integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==\n  dependencies:\n    sourcemap-codec \"^1.4.8\"\n\nmagic-string@^0.25.2:\n  version \"0.25.4\"\n  resolved \"https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.4.tgz#325b8a0a79fc423db109b77fd5a19183b7ba5143\"\n  integrity sha512-oycWO9nEVAP2RVPbIoDoA4Y7LFIJ3xRYov93gAyJhZkET1tNuB0u7uWkZS2LpBWTJUWnmau/To8ECWRC+jKNfw==\n  dependencies:\n    sourcemap-codec \"^1.4.4\"\n\nmagic-string@^0.25.5:\n  version \"0.25.6\"\n  resolved \"https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.6.tgz#5586387d1242f919c6d223579cc938bf1420795e\"\n  integrity sha512-3a5LOMSGoCTH5rbqobC2HuDNRtE2glHZ8J7pK+QZYppyWA36yuNpsX994rIY2nCuyP7CZYy7lQq/X2jygiZ89g==\n  dependencies:\n    sourcemap-codec \"^1.4.4\"\n\nmake-dir@^2.0.0, make-dir@^2.1.0:\n  version \"2.1.0\"\n  resolved \"https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5\"\n  integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==\n  dependencies:\n    pify \"^4.0.1\"\n    semver \"^5.6.0\"\n\nmake-dir@^3.0.0:\n  version \"3.0.0\"\n  resolved \"https://registry.yarnpkg.com/make-dir/-/make-dir-3.0.0.tgz#1b5f39f6b9270ed33f9f054c5c0f84304989f801\"\n  integrity sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw==\n  dependencies:\n    semver \"^6.0.0\"\n\nmake-dir@^3.0.2:\n  version \"3.1.0\"\n  resolved \"https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f\"\n  integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==\n  dependencies:\n    semver \"^6.0.0\"\n\nmake-error@1.x:\n  version \"1.3.5\"\n  resolved \"https://registry.yarnpkg.com/make-error/-/make-error-1.3.5.tgz#efe4e81f6db28cadd605c70f29c831b58ef776c8\"\n  integrity sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==\n\nmakeerror@1.0.x:\n  version \"1.0.11\"\n  resolved \"https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c\"\n  integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=\n  dependencies:\n    tmpl \"1.0.x\"\n\nmap-cache@^0.2.2:\n  version \"0.2.2\"\n  resolved \"https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf\"\n  integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=\n\nmap-visit@^1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f\"\n  integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=\n  dependencies:\n    object-visit \"^1.0.0\"\n\nmarkdown-escapes@^1.0.0:\n  version \"1.0.4\"\n  resolved \"https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.4.tgz#c95415ef451499d7602b91095f3c8e8975f78535\"\n  integrity sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==\n\nmarkdown-table@^2.0.0:\n  version \"2.0.0\"\n  resolved \"https://registry.yarnpkg.com/markdown-table/-/markdown-table-2.0.0.tgz#194a90ced26d31fe753d8b9434430214c011865b\"\n  integrity sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==\n  dependencies:\n    repeat-string \"^1.0.0\"\n\nmath-random@^1.0.1:\n  version \"1.0.4\"\n  resolved \"https://registry.yarnpkg.com/math-random/-/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c\"\n  integrity sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==\n\nmd5@^2.2.1:\n  version \"2.3.0\"\n  resolved \"https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f\"\n  integrity sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==\n  dependencies:\n    charenc \"0.0.2\"\n    crypt \"0.0.2\"\n    is-buffer \"~1.1.6\"\n\nmdast-squeeze-paragraphs@^4.0.0:\n  version \"4.0.0\"\n  resolved \"https://registry.yarnpkg.com/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz#7c4c114679c3bee27ef10b58e2e015be79f1ef97\"\n  integrity sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==\n  dependencies:\n    unist-util-remove \"^2.0.0\"\n\nmdast-util-compact@^2.0.0:\n  version \"2.0.1\"\n  resolved \"https://registry.yarnpkg.com/mdast-util-compact/-/mdast-util-compact-2.0.1.tgz#cabc69a2f43103628326f35b1acf735d55c99490\"\n  integrity sha512-7GlnT24gEwDrdAwEHrU4Vv5lLWrEer4KOkAiKT9nYstsTad7Oc1TwqT2zIMKRdZF7cTuaf+GA1E4Kv7jJh8mPA==\n  dependencies:\n    unist-util-visit \"^2.0.0\"\n\nmdast-util-definitions@^2.0.0:\n  version \"2.0.1\"\n  resolved \"https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-2.0.1.tgz#2c931d8665a96670639f17f98e32c3afcfee25f3\"\n  integrity sha512-Co+DQ6oZlUzvUR7JCpP249PcexxygiaKk9axJh+eRzHDZJk2julbIdKB4PXHVxdBuLzvJ1Izb+YDpj2deGMOuA==\n  dependencies:\n    unist-util-visit \"^2.0.0\"\n\nmdast-util-definitions@^4.0.0:\n  version \"4.0.0\"\n  resolved \"https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz#c5c1a84db799173b4dcf7643cda999e440c24db2\"\n  integrity sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==\n  dependencies:\n    unist-util-visit \"^2.0.0\"\n\nmdast-util-to-hast@10.0.1:\n  version \"10.0.1\"\n  resolved \"https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz#0cfc82089494c52d46eb0e3edb7a4eb2aea021eb\"\n  integrity sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==\n  dependencies:\n    \"@types/mdast\" \"^3.0.0\"\n    \"@types/unist\" \"^2.0.0\"\n    mdast-util-definitions \"^4.0.0\"\n    mdurl \"^1.0.0\"\n    unist-builder \"^2.0.0\"\n    unist-util-generated \"^1.0.0\"\n    unist-util-position \"^3.0.0\"\n    unist-util-visit \"^2.0.0\"\n\nmdast-util-to-hast@^10.0.0:\n  version \"10.2.0\"\n  resolved \"https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-10.2.0.tgz#61875526a017d8857b71abc9333942700b2d3604\"\n  integrity sha512-JoPBfJ3gBnHZ18icCwHR50orC9kNH81tiR1gs01D8Q5YpV6adHNO9nKNuFBCJQ941/32PT1a63UF/DitmS3amQ==\n  dependencies:\n    \"@types/mdast\" \"^3.0.0\"\n    \"@types/unist\" \"^2.0.0\"\n    mdast-util-definitions \"^4.0.0\"\n    mdurl \"^1.0.0\"\n    unist-builder \"^2.0.0\"\n    unist-util-generated \"^1.0.0\"\n    unist-util-position \"^3.0.0\"\n    unist-util-visit \"^2.0.0\"\n\nmdast-util-to-hast@^8.0.0:\n  version \"8.2.0\"\n  resolved \"https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-8.2.0.tgz#adf9f824defcd382e53dd7bace4282a45602ac67\"\n  integrity sha512-WjH/KXtqU66XyTJQ7tg7sjvTw1OQcVV0hKdFh3BgHPwZ96fSBCQ/NitEHsN70Mmnggt+5eUUC7pCnK+2qGQnCA==\n  dependencies:\n    collapse-white-space \"^1.0.0\"\n    detab \"^2.0.0\"\n    mdast-util-definitions \"^2.0.0\"\n    mdurl \"^1.0.0\"\n    trim-lines \"^1.0.0\"\n    unist-builder \"^2.0.0\"\n    unist-util-generated \"^1.0.0\"\n    unist-util-position \"^3.0.0\"\n    unist-util-visit \"^2.0.0\"\n\nmdast-util-to-string@^1.0.0, mdast-util-to-string@^1.1.0:\n  version \"1.1.0\"\n  resolved \"https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz#27055500103f51637bd07d01da01eb1967a43527\"\n  integrity sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==\n\nmdast-util-to-string@^2.0.0:\n  version \"2.0.0\"\n  resolved \"https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz#b8cfe6a713e1091cb5b728fc48885a4767f8b97b\"\n  integrity sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==\n\nmdast-util-toc@^5.0.0:\n  version \"5.1.0\"\n  resolved \"https://registry.yarnpkg.com/mdast-util-toc/-/mdast-util-toc-5.1.0.tgz#3af0f9c9a764b993538af03f1f79f4e3cec22736\"\n  integrity sha512-csimbRIVkiqc+PpFeKDGQ/Ck2N4f9FYH3zzBMMJzcxoKL8m+cM0n94xXm0I9eaxHnKdY9n145SGTdyJC7i273g==\n  dependencies:\n    \"@types/mdast\" \"^3.0.3\"\n    \"@types/unist\" \"^2.0.3\"\n    extend \"^3.0.2\"\n    github-slugger \"^1.2.1\"\n    mdast-util-to-string \"^2.0.0\"\n    unist-util-is \"^4.0.0\"\n    unist-util-visit \"^2.0.0\"\n\nmdurl@^1.0.0:\n  version \"1.0.1\"\n  resolved \"https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e\"\n  integrity sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==\n\nmedia-typer@0.3.0:\n  version \"0.3.0\"\n  resolved \"https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748\"\n  integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==\n\nmem@^1.1.0:\n  version \"1.1.0\"\n  resolved \"https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76\"\n  integrity sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=\n  dependencies:\n    mimic-fn \"^1.0.0\"\n\nmerge-descriptors@1.0.1:\n  version \"1.0.1\"\n  resolved \"https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61\"\n  integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==\n\nmerge-stream@^1.0.1:\n  version \"1.0.1\"\n  resolved \"https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1\"\n  integrity sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=\n  dependencies:\n    readable-stream \"^2.0.1\"\n\nmerge-stream@^2.0.0:\n  version \"2.0.0\"\n  resolved \"https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60\"\n  integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==\n\nmerge2@^1.3.0, merge2@^1.4.1:\n  version \"1.4.1\"\n  resolved \"https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae\"\n  integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==\n\nmerge@^1.2.0:\n  version \"1.2.1\"\n  resolved \"https://registry.yarnpkg.com/merge/-/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145\"\n  integrity sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==\n\nmethods@~1.1.2:\n  version \"1.1.2\"\n  resolved \"https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee\"\n  integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==\n\nmetro-babel-register@0.51.0:\n  version \"0.51.0\"\n  resolved \"https://registry.yarnpkg.com/metro-babel-register/-/metro-babel-register-0.51.0.tgz#d86d3f2d90b45c7a3c6ae67a53bd1e50bad7a24d\"\n  integrity sha512-rhdvHFOZ7/ub019A3+aYs8YeLydb02/FAMsKr2Nz2Jlf6VUxWrMnrcT0NYX16F9TGdi2ulRlJ9dwvUmdhkk+Bw==\n  dependencies:\n    \"@babel/core\" \"^7.0.0\"\n    \"@babel/plugin-proposal-class-properties\" \"^7.0.0\"\n    \"@babel/plugin-proposal-nullish-coalescing-operator\" \"^7.0.0\"\n    \"@babel/plugin-proposal-object-rest-spread\" \"^7.0.0\"\n    \"@babel/plugin-proposal-optional-catch-binding\" \"^7.0.0\"\n    \"@babel/plugin-proposal-optional-chaining\" \"^7.0.0\"\n    \"@babel/plugin-transform-async-to-generator\" \"^7.0.0\"\n    \"@babel/plugin-transform-flow-strip-types\" \"^7.0.0\"\n    \"@babel/plugin-transform-modules-commonjs\" \"^7.0.0\"\n    \"@babel/register\" \"^7.0.0\"\n    core-js \"^2.2.2\"\n    escape-string-regexp \"^1.0.5\"\n\nmetro-babel-transformer@0.51.0:\n  version \"0.51.0\"\n  resolved \"https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.51.0.tgz#9ee5199163ac46b2057527b3f8cbd8b089ffc03e\"\n  integrity sha512-M7KEY/hjD3E8tJEliWgI0VOSaJtqaznC0ItM6FiMrhoGDqqa1BvGofl+EPcKqjBSOV1UgExua/T1VOIWbjwQsw==\n  dependencies:\n    \"@babel/core\" \"^7.0.0\"\n\nmetro-babel-transformer@0.51.1:\n  version \"0.51.1\"\n  resolved \"https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.51.1.tgz#97be9e2b96c78aa202b52ae05fb86f71327aef72\"\n  integrity sha512-+tOnZZzOzufB86ASdfimUEGB1jBKsdsVpPdjNJZkueTFyvYlGqWDQKHM1w9bwKMeM/czPQ48Y6m8Bou6le0X4w==\n  dependencies:\n    \"@babel/core\" \"^7.0.0\"\n\nmetro-babel7-plugin-react-transform@0.51.0:\n  version \"0.51.0\"\n  resolved \"https://registry.yarnpkg.com/metro-babel7-plugin-react-transform/-/metro-babel7-plugin-react-transform-0.51.0.tgz#af27dd81666b91f05d2b371b0d6d283c585e38b6\"\n  integrity sha512-dZ95kXcE2FJMoRsYhxr7YLCbOlHWKwe0bOpihRhfImDTgFfuKIzU4ROQwMUbE0NCbzB+ATFsa2FZ3pHDJ5GI0w==\n  dependencies:\n    \"@babel/helper-module-imports\" \"^7.0.0\"\n\nmetro-babel7-plugin-react-transform@0.51.1:\n  version \"0.51.1\"\n  resolved \"https://registry.yarnpkg.com/metro-babel7-plugin-react-transform/-/metro-babel7-plugin-react-transform-0.51.1.tgz#9cce2c340cc4006fc82aa6dfab27af22d592607e\"\n  integrity sha512-wzn4X9KgmAMZ7Bi6v9KxA7dw+AHGL0RODPxU5NDJ3A6d0yERvzfZ3qkzWhz8jbFkVBK12cu5DTho3HBazKQDOw==\n  dependencies:\n    \"@babel/helper-module-imports\" \"^7.0.0\"\n\nmetro-cache@0.51.1:\n  version \"0.51.1\"\n  resolved \"https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.51.1.tgz#d0b296eab8e009214413bba87e4eac3d9b44cd04\"\n  integrity sha512-0m1+aicsw77LVAehNuTxDpE1c/7Xv/ajRD+UL/lFCWUxnrjSbxVtIKr8l5DxEY11082c1axVRuaV9e436W+eXg==\n  dependencies:\n    jest-serializer \"24.0.0-alpha.6\"\n    metro-core \"0.51.1\"\n    mkdirp \"^0.5.1\"\n    rimraf \"^2.5.4\"\n\nmetro-config@0.51.1, metro-config@^0.51.0:\n  version \"0.51.1\"\n  resolved \"https://registry.yarnpkg.com/metro-config/-/metro-config-0.51.1.tgz#8f1a241ce2c0b521cd492c39bc5c6c69e3397b82\"\n  integrity sha512-WCNd0tTI9gb/ubgTqK1+ljZL4b3hsXVinsOAtep4nHiVb6DSDdbO2yXDD2rpYx3NE6hDRMFS9HHg6G0139pAqQ==\n  dependencies:\n    cosmiconfig \"^5.0.5\"\n    metro \"0.51.1\"\n    metro-cache \"0.51.1\"\n    metro-core \"0.51.1\"\n    pretty-format \"24.0.0-alpha.6\"\n\nmetro-core@0.51.1, metro-core@^0.51.0:\n  version \"0.51.1\"\n  resolved \"https://registry.yarnpkg.com/metro-core/-/metro-core-0.51.1.tgz#e7227fb1dd1bb3f953272fad9876e6201140b038\"\n  integrity sha512-sG1yACjdFqmIzZN50HqLTKUMp1oy0AehHhmIuYeIllo1DjX6Y2o3UAT3rGP8U+SAqJGXf/OWzl6VNyRPGDENfA==\n  dependencies:\n    jest-haste-map \"24.0.0-alpha.6\"\n    lodash.throttle \"^4.1.1\"\n    metro-resolver \"0.51.1\"\n    wordwrap \"^1.0.0\"\n\nmetro-memory-fs@^0.51.0:\n  version \"0.51.1\"\n  resolved \"https://registry.yarnpkg.com/metro-memory-fs/-/metro-memory-fs-0.51.1.tgz#624291f5956b0fd11532d80b1b85d550926f96c9\"\n  integrity sha512-dXVUpLPLwfQcYHd1HlqHGVzBsiwvUdT92TDSbdc10152TP+iynHBqLDWbxt0MAtd6c/QXwOuGZZ1IcX3+lv5iw==\n\nmetro-minify-uglify@0.51.1:\n  version \"0.51.1\"\n  resolved \"https://registry.yarnpkg.com/metro-minify-uglify/-/metro-minify-uglify-0.51.1.tgz#60cd8fe4d3e82d6670c717b8ddb52ae63199c0e4\"\n  integrity sha512-HAqd/rFrQ6mnbqVAszDXIKTg2rqHlY9Fm8DReakgbkAeyMbF2mH3kEgtesPmTrhajdFk81UZcNSm6wxj1JMgVg==\n  dependencies:\n    uglify-es \"^3.1.9\"\n\nmetro-react-native-babel-preset@0.51.0:\n  version \"0.51.0\"\n  resolved \"https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.51.0.tgz#978d960acf2d214bbbe43e59145878d663bd07de\"\n  integrity sha512-Y/aPeLl4RzY8IEAneOyDcpdjto/8yjIuX9eUWRngjSqdHYhGQtqiSBpfTpo0BvXpwNRLwCLHyXo58gNpckTJFw==\n  dependencies:\n    \"@babel/plugin-proposal-class-properties\" \"^7.0.0\"\n    \"@babel/plugin-proposal-export-default-from\" \"^7.0.0\"\n    \"@babel/plugin-proposal-nullish-coalescing-operator\" \"^7.0.0\"\n    \"@babel/plugin-proposal-object-rest-spread\" \"^7.0.0\"\n    \"@babel/plugin-proposal-optional-catch-binding\" \"^7.0.0\"\n    \"@babel/plugin-proposal-optional-chaining\" \"^7.0.0\"\n    \"@babel/plugin-syntax-dynamic-import\" \"^7.0.0\"\n    \"@babel/plugin-syntax-export-default-from\" \"^7.0.0\"\n    \"@babel/plugin-transform-arrow-functions\" \"^7.0.0\"\n    \"@babel/plugin-transform-block-scoping\" \"^7.0.0\"\n    \"@babel/plugin-transform-classes\" \"^7.0.0\"\n    \"@babel/plugin-transform-computed-properties\" \"^7.0.0\"\n    \"@babel/plugin-transform-destructuring\" \"^7.0.0\"\n    \"@babel/plugin-transform-exponentiation-operator\" \"^7.0.0\"\n    \"@babel/plugin-transform-flow-strip-types\" \"^7.0.0\"\n    \"@babel/plugin-transform-for-of\" \"^7.0.0\"\n    \"@babel/plugin-transform-function-name\" \"^7.0.0\"\n    \"@babel/plugin-transform-literals\" \"^7.0.0\"\n    \"@babel/plugin-transform-modules-commonjs\" \"^7.0.0\"\n    \"@babel/plugin-transform-object-assign\" \"^7.0.0\"\n    \"@babel/plugin-transform-parameters\" \"^7.0.0\"\n    \"@babel/plugin-transform-react-display-name\" \"^7.0.0\"\n    \"@babel/plugin-transform-react-jsx\" \"^7.0.0\"\n    \"@babel/plugin-transform-react-jsx-source\" \"^7.0.0\"\n    \"@babel/plugin-transform-regenerator\" \"^7.0.0\"\n    \"@babel/plugin-transform-runtime\" \"^7.0.0\"\n    \"@babel/plugin-transform-shorthand-properties\" \"^7.0.0\"\n    \"@babel/plugin-transform-spread\" \"^7.0.0\"\n    \"@babel/plugin-transform-sticky-regex\" \"^7.0.0\"\n    \"@babel/plugin-transform-template-literals\" \"^7.0.0\"\n    \"@babel/plugin-transform-typescript\" \"^7.0.0\"\n    \"@babel/plugin-transform-unicode-regex\" \"^7.0.0\"\n    \"@babel/template\" \"^7.0.0\"\n    metro-babel7-plugin-react-transform \"0.51.0\"\n    react-transform-hmr \"^1.0.4\"\n\nmetro-react-native-babel-preset@0.51.1:\n  version \"0.51.1\"\n  resolved \"https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.51.1.tgz#44aeeedfea37f7c2ab8f6f273fa71b90fe65f089\"\n  integrity sha512-e9tsYDFhU70gar0jQWcZXRPJVCv4k7tEs6Pm74wXO2OO/T1MEumbvniDIGwGG8bG8RUnYdHhjcaiub2Vc5BRWw==\n  dependencies:\n    \"@babel/plugin-proposal-class-properties\" \"^7.0.0\"\n    \"@babel/plugin-proposal-export-default-from\" \"^7.0.0\"\n    \"@babel/plugin-proposal-nullish-coalescing-operator\" \"^7.0.0\"\n    \"@babel/plugin-proposal-object-rest-spread\" \"^7.0.0\"\n    \"@babel/plugin-proposal-optional-catch-binding\" \"^7.0.0\"\n    \"@babel/plugin-proposal-optional-chaining\" \"^7.0.0\"\n    \"@babel/plugin-syntax-dynamic-import\" \"^7.0.0\"\n    \"@babel/plugin-syntax-export-default-from\" \"^7.0.0\"\n    \"@babel/plugin-transform-arrow-functions\" \"^7.0.0\"\n    \"@babel/plugin-transform-block-scoping\" \"^7.0.0\"\n    \"@babel/plugin-transform-classes\" \"^7.0.0\"\n    \"@babel/plugin-transform-computed-properties\" \"^7.0.0\"\n    \"@babel/plugin-transform-destructuring\" \"^7.0.0\"\n    \"@babel/plugin-transform-exponentiation-operator\" \"^7.0.0\"\n    \"@babel/plugin-transform-flow-strip-types\" \"^7.0.0\"\n    \"@babel/plugin-transform-for-of\" \"^7.0.0\"\n    \"@babel/plugin-transform-function-name\" \"^7.0.0\"\n    \"@babel/plugin-transform-literals\" \"^7.0.0\"\n    \"@babel/plugin-transform-modules-commonjs\" \"^7.0.0\"\n    \"@babel/plugin-transform-object-assign\" \"^7.0.0\"\n    \"@babel/plugin-transform-parameters\" \"^7.0.0\"\n    \"@babel/plugin-transform-react-display-name\" \"^7.0.0\"\n    \"@babel/plugin-transform-react-jsx\" \"^7.0.0\"\n    \"@babel/plugin-transform-react-jsx-source\" \"^7.0.0\"\n    \"@babel/plugin-transform-regenerator\" \"^7.0.0\"\n    \"@babel/plugin-transform-runtime\" \"^7.0.0\"\n    \"@babel/plugin-transform-shorthand-properties\" \"^7.0.0\"\n    \"@babel/plugin-transform-spread\" \"^7.0.0\"\n    \"@babel/plugin-transform-sticky-regex\" \"^7.0.0\"\n    \"@babel/plugin-transform-template-literals\" \"^7.0.0\"\n    \"@babel/plugin-transform-typescript\" \"^7.0.0\"\n    \"@babel/plugin-transform-unicode-regex\" \"^7.0.0\"\n    \"@babel/template\" \"^7.0.0\"\n    metro-babel7-plugin-react-transform \"0.51.1\"\n    react-transform-hmr \"^1.0.4\"\n\nmetro-react-native-babel-transformer@0.51.0:\n  version \"0.51.0\"\n  resolved \"https://registry.yarnpkg.com/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.51.0.tgz#57a695e97a19d95de63c9633f9d0dc024ee8e99a\"\n  integrity sha512-VFnqtE0qrVmU1HV9B04o53+NZHvDwR+CWCoEx4+7vCqJ9Tvas741biqCjah9xtifoKdElQELk6x0soOAWCDFJA==\n  dependencies:\n    \"@babel/core\" \"^7.0.0\"\n    babel-preset-fbjs \"^3.0.1\"\n    metro-babel-transformer \"0.51.0\"\n    metro-react-native-babel-preset \"0.51.0\"\n\nmetro-react-native-babel-transformer@^0.51.0:\n  version \"0.51.1\"\n  resolved \"https://registry.yarnpkg.com/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.51.1.tgz#bac34f988c150c725cd1875c13701cc2032615f9\"\n  integrity sha512-D0KU+JPb/Z76nUWt3+bkjKggOlGvqAVI2BpIH2JFKprpUyBjWaCRqHnkBfZGixYwUfmu93MIlKJWr6iKzzFrlg==\n  dependencies:\n    \"@babel/core\" \"^7.0.0\"\n    babel-preset-fbjs \"^3.0.1\"\n    metro-babel-transformer \"0.51.1\"\n    metro-react-native-babel-preset \"0.51.1\"\n\nmetro-resolver@0.51.1:\n  version \"0.51.1\"\n  resolved \"https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.51.1.tgz#4c26f0baee47d30250187adca3d34c902e627611\"\n  integrity sha512-zmWbD/287NDA/jLPuPV0hne/YMMSG0dljzu21TYMg2lXRLur/zROJHHhyepZvuBHgInXBi4Vhr2wvuSnY39SuA==\n  dependencies:\n    absolute-path \"^0.0.0\"\n\nmetro-source-map@0.51.1:\n  version \"0.51.1\"\n  resolved \"https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.51.1.tgz#1a8da138e98e184304d5558b4f92a5c2141822d0\"\n  integrity sha512-JyrE+RV4YumrboHPHTGsUUGERjQ681ImRLrSYDGcmNv4tfpk9nvAK26UAas4IvBYFCC9oW90m0udt3kaQGv59Q==\n  dependencies:\n    source-map \"^0.5.6\"\n\nmetro@0.51.1, metro@^0.51.0:\n  version \"0.51.1\"\n  resolved \"https://registry.yarnpkg.com/metro/-/metro-0.51.1.tgz#b0aad4731593b9f244261bad1abb2a006d1c8969\"\n  integrity sha512-nM0dqn8LQlMjhChl2fzTUq2EWiUebZM7nkesD9vQe47W10bj/tbRLPiIIAxht6SRDbPd/hRA+t39PxLhPSKEKg==\n  dependencies:\n    \"@babel/core\" \"^7.0.0\"\n    \"@babel/generator\" \"^7.0.0\"\n    \"@babel/parser\" \"^7.0.0\"\n    \"@babel/plugin-external-helpers\" \"^7.0.0\"\n    \"@babel/template\" \"^7.0.0\"\n    \"@babel/traverse\" \"^7.0.0\"\n    \"@babel/types\" \"^7.0.0\"\n    absolute-path \"^0.0.0\"\n    async \"^2.4.0\"\n    babel-preset-fbjs \"^3.0.1\"\n    buffer-crc32 \"^0.2.13\"\n    chalk \"^2.4.1\"\n    concat-stream \"^1.6.0\"\n    connect \"^3.6.5\"\n    debug \"^2.2.0\"\n    denodeify \"^1.2.1\"\n    eventemitter3 \"^3.0.0\"\n    fbjs \"^1.0.0\"\n    fs-extra \"^1.0.0\"\n    graceful-fs \"^4.1.3\"\n    image-size \"^0.6.0\"\n    invariant \"^2.2.4\"\n    jest-haste-map \"24.0.0-alpha.6\"\n    jest-worker \"24.0.0-alpha.6\"\n    json-stable-stringify \"^1.0.1\"\n    lodash.throttle \"^4.1.1\"\n    merge-stream \"^1.0.1\"\n    metro-babel-transformer \"0.51.1\"\n    metro-cache \"0.51.1\"\n    metro-config \"0.51.1\"\n    metro-core \"0.51.1\"\n    metro-minify-uglify \"0.51.1\"\n    metro-react-native-babel-preset \"0.51.1\"\n    metro-resolver \"0.51.1\"\n    metro-source-map \"0.51.1\"\n    mime-types \"2.1.11\"\n    mkdirp \"^0.5.1\"\n    node-fetch \"^2.2.0\"\n    nullthrows \"^1.1.0\"\n    react-transform-hmr \"^1.0.4\"\n    resolve \"^1.5.0\"\n    rimraf \"^2.5.4\"\n    serialize-error \"^2.1.0\"\n    source-map \"^0.5.6\"\n    temp \"0.8.3\"\n    throat \"^4.1.0\"\n    wordwrap \"^1.0.0\"\n    write-file-atomic \"^1.2.0\"\n    ws \"^1.1.5\"\n    xpipe \"^1.0.5\"\n    yargs \"^9.0.0\"\n\nmicromatch@4.x, micromatch@^4.0.2:\n  version \"4.0.2\"\n  resolved \"https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259\"\n  integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==\n  dependencies:\n    braces \"^3.0.1\"\n    picomatch \"^2.0.5\"\n\nmicromatch@^2.3.11:\n  version \"2.3.11\"\n  resolved \"https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565\"\n  integrity sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=\n  dependencies:\n    arr-diff \"^2.0.0\"\n    array-unique \"^0.2.1\"\n    braces \"^1.8.2\"\n    expand-brackets \"^0.1.4\"\n    extglob \"^0.3.1\"\n    filename-regex \"^2.0.0\"\n    is-extglob \"^1.0.0\"\n    is-glob \"^2.0.1\"\n    kind-of \"^3.0.2\"\n    normalize-path \"^2.0.1\"\n    object.omit \"^2.0.0\"\n    parse-glob \"^3.0.4\"\n    regex-cache \"^0.4.2\"\n\nmicromatch@^3.1.4:\n  version \"3.1.10\"\n  resolved \"https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23\"\n  integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==\n  dependencies:\n    arr-diff \"^4.0.0\"\n    array-unique \"^0.3.2\"\n    braces \"^2.3.1\"\n    define-property \"^2.0.2\"\n    extend-shallow \"^3.0.2\"\n    extglob \"^2.0.4\"\n    fragment-cache \"^0.2.1\"\n    kind-of \"^6.0.2\"\n    nanomatch \"^1.2.9\"\n    object.pick \"^1.3.0\"\n    regex-not \"^1.0.0\"\n    snapdragon \"^0.8.1\"\n    to-regex \"^3.0.2\"\n\nmicromatch@^4.0.4, micromatch@^4.0.5:\n  version \"4.0.5\"\n  resolved \"https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6\"\n  integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==\n  dependencies:\n    braces \"^3.0.2\"\n    picomatch \"^2.3.1\"\n\nmicromatch@^4.0.8:\n  version \"4.0.8\"\n  resolved \"https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202\"\n  integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==\n  dependencies:\n    braces \"^3.0.3\"\n    picomatch \"^2.3.1\"\n\nmime-db@1.42.0:\n  version \"1.42.0\"\n  resolved \"https://registry.yarnpkg.com/mime-db/-/mime-db-1.42.0.tgz#3e252907b4c7adb906597b4b65636272cf9e7bac\"\n  integrity sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ==\n\nmime-db@1.44.0:\n  version \"1.44.0\"\n  resolved \"https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92\"\n  integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==\n\nmime-db@1.52.0:\n  version \"1.52.0\"\n  resolved \"https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70\"\n  integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==\n\n\"mime-db@>= 1.43.0 < 2\":\n  version \"1.45.0\"\n  resolved \"https://registry.yarnpkg.com/mime-db/-/mime-db-1.45.0.tgz#cceeda21ccd7c3a745eba2decd55d4b73e7879ea\"\n  integrity sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==\n\nmime-db@~1.23.0:\n  version \"1.23.0\"\n  resolved \"https://registry.yarnpkg.com/mime-db/-/mime-db-1.23.0.tgz#a31b4070adaea27d732ea333740a64d0ec9a6659\"\n  integrity sha1-oxtAcK2uon1zLqMzdApk0OyaZlk=\n\nmime-types@2.1.11:\n  version \"2.1.11\"\n  resolved \"https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.11.tgz#c259c471bda808a85d6cd193b430a5fae4473b3c\"\n  integrity sha1-wlnEcb2oCKhdbNGTtDCl+uRHOzw=\n  dependencies:\n    mime-db \"~1.23.0\"\n\nmime-types@^2.1.12, mime-types@~2.1.19:\n  version \"2.1.25\"\n  resolved \"https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.25.tgz#39772d46621f93e2a80a856c53b86a62156a6437\"\n  integrity sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg==\n  dependencies:\n    mime-db \"1.42.0\"\n\nmime-types@~2.1.24:\n  version \"2.1.27\"\n  resolved \"https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f\"\n  integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==\n  dependencies:\n    mime-db \"1.44.0\"\n\nmime-types@~2.1.34:\n  version \"2.1.35\"\n  resolved \"https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a\"\n  integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==\n  dependencies:\n    mime-db \"1.52.0\"\n\nmime@1.6.0, mime@^1.3.4:\n  version \"1.6.0\"\n  resolved \"https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1\"\n  integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==\n\nmimic-fn@^1.0.0:\n  version \"1.2.0\"\n  resolved \"https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022\"\n  integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==\n\nmimic-fn@^2.1.0:\n  version \"2.1.0\"\n  resolved \"https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b\"\n  integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==\n\nmimic-fn@^4.0.0:\n  version \"4.0.0\"\n  resolved \"https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc\"\n  integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==\n\nmin-document@^2.19.0:\n  version \"2.19.0\"\n  resolved \"https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685\"\n  integrity sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=\n  dependencies:\n    dom-walk \"^0.1.0\"\n\nmini-svg-data-uri@^1.2.3:\n  version \"1.4.4\"\n  resolved \"https://registry.yarnpkg.com/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz#8ab0aabcdf8c29ad5693ca595af19dd2ead09939\"\n  integrity sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==\n\nminimatch@^3.0.4:\n  version \"3.0.4\"\n  resolved \"https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083\"\n  integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==\n  dependencies:\n    brace-expansion \"^1.1.7\"\n\nminimatch@^3.1.2:\n  version \"3.1.2\"\n  resolved \"https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b\"\n  integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==\n  dependencies:\n    brace-expansion \"^1.1.7\"\n\nminimist@0.0.8:\n  version \"0.0.8\"\n  resolved \"https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d\"\n  integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=\n\nminimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5:\n  version \"1.2.5\"\n  resolved \"https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602\"\n  integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==\n\nminimist@^1.2.6:\n  version \"1.2.8\"\n  resolved \"https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c\"\n  integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==\n\nminimist@~0.0.1:\n  version \"0.0.10\"\n  resolved \"https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf\"\n  integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=\n\nmixin-deep@^1.2.0:\n  version \"1.3.2\"\n  resolved \"https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566\"\n  integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==\n  dependencies:\n    for-in \"^1.0.2\"\n    is-extendable \"^1.0.1\"\n\nmkdirp@0.3.0:\n  version \"0.3.0\"\n  resolved \"https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.0.tgz#1bbf5ab1ba827af23575143490426455f481fe1e\"\n  integrity sha512-OHsdUcVAQ6pOtg5JYWpCBo9W/GySVuwvP9hueRMW7UqshC0tbfzLv8wjySTPm3tfUZ/21CE9E1pJagOA91Pxew==\n\nmkdirp@0.x:\n  version \"0.5.1\"\n  resolved \"https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903\"\n  integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=\n  dependencies:\n    minimist \"0.0.8\"\n\nmkdirp@^0.5.1:\n  version \"0.5.5\"\n  resolved \"https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def\"\n  integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==\n  dependencies:\n    minimist \"^1.2.5\"\n\nmorgan@^1.9.0:\n  version \"1.10.0\"\n  resolved \"https://registry.yarnpkg.com/morgan/-/morgan-1.10.0.tgz#091778abc1fc47cd3509824653dae1faab6b17d7\"\n  integrity sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==\n  dependencies:\n    basic-auth \"~2.0.1\"\n    debug \"2.6.9\"\n    depd \"~2.0.0\"\n    on-finished \"~2.3.0\"\n    on-headers \"~1.0.2\"\n\nmri@^1.1.0:\n  version \"1.1.4\"\n  resolved \"https://registry.yarnpkg.com/mri/-/mri-1.1.4.tgz#7cb1dd1b9b40905f1fac053abe25b6720f44744a\"\n  integrity sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w==\n\nmri@^1.2.0:\n  version \"1.2.0\"\n  resolved \"https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b\"\n  integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==\n\nms@2.0.0:\n  version \"2.0.0\"\n  resolved \"https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8\"\n  integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=\n\nms@2.1.1:\n  version \"2.1.1\"\n  resolved \"https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a\"\n  integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==\n\nms@2.1.2, ms@^2.1.1:\n  version \"2.1.2\"\n  resolved \"https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009\"\n  integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==\n\nms@2.1.3, ms@^2.0.0:\n  version \"2.1.3\"\n  resolved \"https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2\"\n  integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==\n\nmute-stream@0.0.7:\n  version \"0.0.7\"\n  resolved \"https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab\"\n  integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=\n\nmute-stream@0.0.8:\n  version \"0.0.8\"\n  resolved \"https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d\"\n  integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==\n\nmz@^2.7.0:\n  version \"2.7.0\"\n  resolved \"https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32\"\n  integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==\n  dependencies:\n    any-promise \"^1.0.0\"\n    object-assign \"^4.0.1\"\n    thenify-all \"^1.0.0\"\n\nnan@^2.12.1:\n  version \"2.14.2\"\n  resolved \"https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19\"\n  integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==\n\nnanoclone@^0.2.1:\n  version \"0.2.1\"\n  resolved \"https://registry.yarnpkg.com/nanoclone/-/nanoclone-0.2.1.tgz#dd4090f8f1a110d26bb32c49ed2f5b9235209ed4\"\n  integrity sha512-wynEP02LmIbLpcYw8uBKpcfF6dmg2vcpKqxeH5UcoKEYdExslsdUA4ugFauuaeYdTB76ez6gJW8XAZ6CgkXYxA==\n\nnanoid@^3.3.4, nanoid@^3.3.6:\n  version \"3.3.6\"\n  resolved \"https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c\"\n  integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==\n\nnanomatch@^1.2.9:\n  version \"1.2.13\"\n  resolved \"https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119\"\n  integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==\n  dependencies:\n    arr-diff \"^4.0.0\"\n    array-unique \"^0.3.2\"\n    define-property \"^2.0.2\"\n    extend-shallow \"^3.0.2\"\n    fragment-cache \"^0.2.1\"\n    is-windows \"^1.0.2\"\n    kind-of \"^6.0.2\"\n    object.pick \"^1.3.0\"\n    regex-not \"^1.0.0\"\n    snapdragon \"^0.8.1\"\n    to-regex \"^3.0.1\"\n\nnatural-compare@^1.4.0:\n  version \"1.4.0\"\n  resolved \"https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7\"\n  integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=\n\nnegotiator@0.6.2:\n  version \"0.6.2\"\n  resolved \"https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb\"\n  integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==\n\nnegotiator@0.6.3:\n  version \"0.6.3\"\n  resolved \"https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd\"\n  integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==\n\nnext-mdx-remote@^3.0.4:\n  version \"3.0.8\"\n  resolved \"https://registry.yarnpkg.com/next-mdx-remote/-/next-mdx-remote-3.0.8.tgz#ea2e7f9f3c99a0ce8167976c547e621d5930e1e0\"\n  integrity sha512-WFSxt0crxG5PN/0WvaunzxzqV3wh3dPBZyhkclxwyQfLSRKzsNSArzot/4gYTOOZ/GtyRfNjbI/HtDsW2S4fqQ==\n  dependencies:\n    \"@mdx-js/mdx\" \"^1.6.22\"\n    \"@mdx-js/react\" \"^1.6.22\"\n    esbuild \"^0.12.9\"\n    pkg-dir \"^5.0.0\"\n\nnext-remote-watch@^1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/next-remote-watch/-/next-remote-watch-1.0.0.tgz#34c5a015b1bd191f906479c00baabd1a33cf04f5\"\n  integrity sha512-kV+pglCwcnKyqJIXPHUUrnZr9d3rCqCIEQWBkFYC02GDXHyKVmcFytoY6q0+wMIQqh/izIAQL1x6OKXZhksjLA==\n  dependencies:\n    body-parser \"^1.19.0\"\n    chalk \"^4.0.0\"\n    chokidar \"^3.4.0\"\n    commander \"^5.0.0\"\n    express \"^4.17.1\"\n\nnext@^13.4.4:\n  version \"13.4.4\"\n  resolved \"https://registry.yarnpkg.com/next/-/next-13.4.4.tgz#d1027c8d77f4c51be0b39f671b4820db03c93e60\"\n  integrity sha512-C5S0ysM0Ily9McL4Jb48nOQHT1BukOWI59uC3X/xCMlYIh9rJZCv7nzG92J6e1cOBqQbKovlpgvHWFmz4eKKEA==\n  dependencies:\n    \"@next/env\" \"13.4.4\"\n    \"@swc/helpers\" \"0.5.1\"\n    busboy \"1.6.0\"\n    caniuse-lite \"^1.0.30001406\"\n    postcss \"8.4.14\"\n    styled-jsx \"5.1.1\"\n    zod \"3.21.4\"\n  optionalDependencies:\n    \"@next/swc-darwin-arm64\" \"13.4.4\"\n    \"@next/swc-darwin-x64\" \"13.4.4\"\n    \"@next/swc-linux-arm64-gnu\" \"13.4.4\"\n    \"@next/swc-linux-arm64-musl\" \"13.4.4\"\n    \"@next/swc-linux-x64-gnu\" \"13.4.4\"\n    \"@next/swc-linux-x64-musl\" \"13.4.4\"\n    \"@next/swc-win32-arm64-msvc\" \"13.4.4\"\n    \"@next/swc-win32-ia32-msvc\" \"13.4.4\"\n    \"@next/swc-win32-x64-msvc\" \"13.4.4\"\n\nnextjs-sitemap-generator@^1.1.0:\n  version \"1.3.1\"\n  resolved \"https://registry.yarnpkg.com/nextjs-sitemap-generator/-/nextjs-sitemap-generator-1.3.1.tgz#a5da5b23a581d69c2df14bb7fa10224520f4514f\"\n  integrity sha512-QH4EDS17L8h7IHD3D7tW7+eDX9qLJloDaBPOM+t3R1nsM7xofI4EXwXgboB9EbEp0be5YYU3MHKxg/9guiEcKw==\n  dependencies:\n    date-fns \"^2.9.0\"\n\nnice-try@^1.0.4:\n  version \"1.0.5\"\n  resolved \"https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366\"\n  integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==\n\nno-case@^3.0.3:\n  version \"3.0.3\"\n  resolved \"https://registry.yarnpkg.com/no-case/-/no-case-3.0.3.tgz#c21b434c1ffe48b39087e86cfb4d2582e9df18f8\"\n  integrity sha512-ehY/mVQCf9BL0gKfsJBvFJen+1V//U+0HQMPrWct40ixE4jnv0bfvxDbWtAHL9EcaPEOJHVVYKoQn1TlZUB8Tw==\n  dependencies:\n    lower-case \"^2.0.1\"\n    tslib \"^1.10.0\"\n\nnode-emoji@^1.10.0:\n  version \"1.11.0\"\n  resolved \"https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.11.0.tgz#69a0150e6946e2f115e9d7ea4df7971e2628301c\"\n  integrity sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==\n  dependencies:\n    lodash \"^4.17.21\"\n\nnode-fetch@^1.0.1:\n  version \"1.7.3\"\n  resolved \"https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef\"\n  integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==\n  dependencies:\n    encoding \"^0.1.11\"\n    is-stream \"^1.0.1\"\n\nnode-fetch@^2.2.0:\n  version \"2.6.1\"\n  resolved \"https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052\"\n  integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==\n\nnode-fetch@^2.5.0:\n  version \"2.6.0\"\n  resolved \"https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd\"\n  integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==\n\nnode-fetch@^2.6.1:\n  version \"2.6.11\"\n  resolved \"https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.11.tgz#cde7fc71deef3131ef80a738919f999e6edfff25\"\n  integrity sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==\n  dependencies:\n    whatwg-url \"^5.0.0\"\n\nnode-int64@^0.4.0:\n  version \"0.4.0\"\n  resolved \"https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b\"\n  integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=\n\nnode-modules-regexp@^1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40\"\n  integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=\n\nnode-notifier@^5.2.1:\n  version \"5.4.3\"\n  resolved \"https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.4.3.tgz#cb72daf94c93904098e28b9c590fd866e464bd50\"\n  integrity sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q==\n  dependencies:\n    growly \"^1.3.0\"\n    is-wsl \"^1.1.0\"\n    semver \"^5.5.0\"\n    shellwords \"^0.1.1\"\n    which \"^1.3.0\"\n\nnode-notifier@^6.0.0:\n  version \"6.0.0\"\n  resolved \"https://registry.yarnpkg.com/node-notifier/-/node-notifier-6.0.0.tgz#cea319e06baa16deec8ce5cd7f133c4a46b68e12\"\n  integrity sha512-SVfQ/wMw+DesunOm5cKqr6yDcvUTDl/yc97ybGHMrteNEY6oekXpNpS3lZwgLlwz0FLgHoiW28ZpmBHUDg37cw==\n  dependencies:\n    growly \"^1.3.0\"\n    is-wsl \"^2.1.1\"\n    semver \"^6.3.0\"\n    shellwords \"^0.1.1\"\n    which \"^1.3.1\"\n\nnode-releases@^1.1.61:\n  version \"1.1.61\"\n  resolved \"https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.61.tgz#707b0fca9ce4e11783612ba4a2fcba09047af16e\"\n  integrity sha512-DD5vebQLg8jLCOzwupn954fbIiZht05DAZs0k2u8NStSe6h9XdsuIQL8hSRKYiU8WUQRznmSDrKGbv3ObOmC7g==\n\nnode-releases@^2.0.12:\n  version \"2.0.12\"\n  resolved \"https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.12.tgz#35627cc224a23bfb06fb3380f2b3afaaa7eb1039\"\n  integrity sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==\n\nnopt@1.0.10:\n  version \"1.0.10\"\n  resolved \"https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee\"\n  integrity sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==\n  dependencies:\n    abbrev \"1\"\n\nnormalize-package-data@^2.3.2, normalize-package-data@^2.5.0:\n  version \"2.5.0\"\n  resolved \"https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8\"\n  integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==\n  dependencies:\n    hosted-git-info \"^2.1.4\"\n    resolve \"^1.10.0\"\n    semver \"2 || 3 || 4 || 5\"\n    validate-npm-package-license \"^3.0.1\"\n\nnormalize-path@^2.0.1, normalize-path@^2.1.1:\n  version \"2.1.1\"\n  resolved \"https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9\"\n  integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=\n  dependencies:\n    remove-trailing-separator \"^1.0.1\"\n\nnormalize-path@^3.0.0, normalize-path@~3.0.0:\n  version \"3.0.0\"\n  resolved \"https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65\"\n  integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==\n\nnormalize-range@^0.1.2:\n  version \"0.1.2\"\n  resolved \"https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942\"\n  integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==\n\nnpm-run-path@^2.0.0:\n  version \"2.0.2\"\n  resolved \"https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f\"\n  integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=\n  dependencies:\n    path-key \"^2.0.0\"\n\nnpm-run-path@^4.0.0:\n  version \"4.0.0\"\n  resolved \"https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.0.tgz#d644ec1bd0569187d2a52909971023a0a58e8438\"\n  integrity sha512-8eyAOAH+bYXFPSnNnKr3J+yoybe8O87Is5rtAQ8qRczJz1ajcsjg8l2oZqP+Ppx15Ii3S1vUTjQN2h4YO2tWWQ==\n  dependencies:\n    path-key \"^3.0.0\"\n\nnpm-run-path@^4.0.1:\n  version \"4.0.1\"\n  resolved \"https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea\"\n  integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==\n  dependencies:\n    path-key \"^3.0.0\"\n\nnpm-run-path@^5.1.0:\n  version \"5.1.0\"\n  resolved \"https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.1.0.tgz#bc62f7f3f6952d9894bd08944ba011a6ee7b7e00\"\n  integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==\n  dependencies:\n    path-key \"^4.0.0\"\n\nnpmlog@^2.0.4:\n  version \"2.0.4\"\n  resolved \"https://registry.yarnpkg.com/npmlog/-/npmlog-2.0.4.tgz#98b52530f2514ca90d09ec5b22c8846722375692\"\n  integrity sha1-mLUlMPJRTKkNCexbIsiEZyI3VpI=\n  dependencies:\n    ansi \"~0.3.1\"\n    are-we-there-yet \"~1.1.2\"\n    gauge \"~1.2.5\"\n\nnullthrows@^1.1.0:\n  version \"1.1.1\"\n  resolved \"https://registry.yarnpkg.com/nullthrows/-/nullthrows-1.1.1.tgz#7818258843856ae971eae4208ad7d7eb19a431b1\"\n  integrity sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==\n\nnumber-is-nan@^1.0.0:\n  version \"1.0.1\"\n  resolved \"https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d\"\n  integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=\n\nnwsapi@^2.2.0:\n  version \"2.2.0\"\n  resolved \"https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7\"\n  integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==\n\noauth-sign@~0.9.0:\n  version \"0.9.0\"\n  resolved \"https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455\"\n  integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==\n\nobject-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:\n  version \"4.1.1\"\n  resolved \"https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863\"\n  integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=\n\nobject-copy@^0.1.0:\n  version \"0.1.0\"\n  resolved \"https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c\"\n  integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw=\n  dependencies:\n    copy-descriptor \"^0.1.0\"\n    define-property \"^0.2.5\"\n    kind-of \"^3.0.3\"\n\nobject-hash@^3.0.0:\n  version \"3.0.0\"\n  resolved \"https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9\"\n  integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==\n\nobject-inspect@^1.12.3, object-inspect@^1.9.0:\n  version \"1.12.3\"\n  resolved \"https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9\"\n  integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==\n\nobject-inspect@^1.7.0:\n  version \"1.7.0\"\n  resolved \"https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67\"\n  integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==\n\nobject-is@^1.1.5:\n  version \"1.1.5\"\n  resolved \"https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac\"\n  integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==\n  dependencies:\n    call-bind \"^1.0.2\"\n    define-properties \"^1.1.3\"\n\nobject-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.0, object-keys@^1.1.1:\n  version \"1.1.1\"\n  resolved \"https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e\"\n  integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==\n\nobject-visit@^1.0.0:\n  version \"1.0.1\"\n  resolved \"https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb\"\n  integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=\n  dependencies:\n    isobject \"^3.0.0\"\n\nobject.assign@^4.1.0:\n  version \"4.1.2\"\n  resolved \"https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940\"\n  integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==\n  dependencies:\n    call-bind \"^1.0.0\"\n    define-properties \"^1.1.3\"\n    has-symbols \"^1.0.1\"\n    object-keys \"^1.1.1\"\n\nobject.assign@^4.1.3, object.assign@^4.1.4:\n  version \"4.1.4\"\n  resolved \"https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f\"\n  integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==\n  dependencies:\n    call-bind \"^1.0.2\"\n    define-properties \"^1.1.4\"\n    has-symbols \"^1.0.3\"\n    object-keys \"^1.1.1\"\n\nobject.entries@^1.1.0:\n  version \"1.1.0\"\n  resolved \"https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.0.tgz#2024fc6d6ba246aee38bdb0ffd5cfbcf371b7519\"\n  integrity sha512-l+H6EQ8qzGRxbkHOd5I/aHRhHDKoQXQ8g0BYt4uSweQU1/J6dZUOyWh9a2Vky35YCKjzmgxOzta2hH6kf9HuXA==\n  dependencies:\n    define-properties \"^1.1.3\"\n    es-abstract \"^1.12.0\"\n    function-bind \"^1.1.1\"\n    has \"^1.0.3\"\n\nobject.entries@^1.1.6:\n  version \"1.1.6\"\n  resolved \"https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.6.tgz#9737d0e5b8291edd340a3e3264bb8a3b00d5fa23\"\n  integrity sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==\n  dependencies:\n    call-bind \"^1.0.2\"\n    define-properties \"^1.1.4\"\n    es-abstract \"^1.20.4\"\n\nobject.fromentries@^2.0.0:\n  version \"2.0.2\"\n  resolved \"https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.2.tgz#4a09c9b9bb3843dd0f89acdb517a794d4f355ac9\"\n  integrity sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ==\n  dependencies:\n    define-properties \"^1.1.3\"\n    es-abstract \"^1.17.0-next.1\"\n    function-bind \"^1.1.1\"\n    has \"^1.0.3\"\n\nobject.fromentries@^2.0.1:\n  version \"2.0.1\"\n  resolved \"https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.1.tgz#050f077855c7af8ae6649f45c80b16ee2d31e704\"\n  integrity sha512-PUQv8Hbg3j2QX0IQYv3iAGCbGcu4yY4KQ92/dhA4sFSixBmSmp13UpDLs6jGK8rBtbmhNNIK99LD2k293jpiGA==\n  dependencies:\n    define-properties \"^1.1.3\"\n    es-abstract \"^1.15.0\"\n    function-bind \"^1.1.1\"\n    has \"^1.0.3\"\n\nobject.fromentries@^2.0.6:\n  version \"2.0.6\"\n  resolved \"https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.6.tgz#cdb04da08c539cffa912dcd368b886e0904bfa73\"\n  integrity sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==\n  dependencies:\n    call-bind \"^1.0.2\"\n    define-properties \"^1.1.4\"\n    es-abstract \"^1.20.4\"\n\nobject.hasown@^1.1.2:\n  version \"1.1.2\"\n  resolved \"https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.2.tgz#f919e21fad4eb38a57bc6345b3afd496515c3f92\"\n  integrity sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==\n  dependencies:\n    define-properties \"^1.1.4\"\n    es-abstract \"^1.20.4\"\n\nobject.omit@^2.0.0:\n  version \"2.0.1\"\n  resolved \"https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa\"\n  integrity sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=\n  dependencies:\n    for-own \"^0.1.4\"\n    is-extendable \"^0.1.1\"\n\nobject.pick@^1.3.0:\n  version \"1.3.0\"\n  resolved \"https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747\"\n  integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=\n  dependencies:\n    isobject \"^3.0.1\"\n\nobject.values@^1.1.0:\n  version \"1.1.0\"\n  resolved \"https://registry.yarnpkg.com/object.values/-/object.values-1.1.0.tgz#bf6810ef5da3e5325790eaaa2be213ea84624da9\"\n  integrity sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==\n  dependencies:\n    define-properties \"^1.1.3\"\n    es-abstract \"^1.12.0\"\n    function-bind \"^1.1.1\"\n    has \"^1.0.3\"\n\nobject.values@^1.1.6:\n  version \"1.1.6\"\n  resolved \"https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d\"\n  integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==\n  dependencies:\n    call-bind \"^1.0.2\"\n    define-properties \"^1.1.4\"\n    es-abstract \"^1.20.4\"\n\non-finished@2.4.1:\n  version \"2.4.1\"\n  resolved \"https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f\"\n  integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==\n  dependencies:\n    ee-first \"1.1.1\"\n\non-finished@~2.3.0:\n  version \"2.3.0\"\n  resolved \"https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947\"\n  integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=\n  dependencies:\n    ee-first \"1.1.1\"\n\non-headers@~1.0.2:\n  version \"1.0.2\"\n  resolved \"https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f\"\n  integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==\n\nonce@^1.3.0, once@^1.3.1, once@^1.4.0:\n  version \"1.4.0\"\n  resolved \"https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1\"\n  integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=\n  dependencies:\n    wrappy \"1\"\n\nonetime@^2.0.0:\n  version \"2.0.1\"\n  resolved \"https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4\"\n  integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=\n  dependencies:\n    mimic-fn \"^1.0.0\"\n\nonetime@^5.1.0:\n  version \"5.1.0\"\n  resolved \"https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5\"\n  integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==\n  dependencies:\n    mimic-fn \"^2.1.0\"\n\nonetime@^5.1.2:\n  version \"5.1.2\"\n  resolved \"https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e\"\n  integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==\n  dependencies:\n    mimic-fn \"^2.1.0\"\n\nonetime@^6.0.0:\n  version \"6.0.0\"\n  resolved \"https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4\"\n  integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==\n  dependencies:\n    mimic-fn \"^4.0.0\"\n\nonigasm@^2.2.1:\n  version \"2.2.5\"\n  resolved \"https://registry.yarnpkg.com/onigasm/-/onigasm-2.2.5.tgz#cc4d2a79a0fa0b64caec1f4c7ea367585a676892\"\n  integrity sha512-F+th54mPc0l1lp1ZcFMyL/jTs2Tlq4SqIHKIXGZOR/VkHkF9A7Fr5rRr5+ZG/lWeRsyrClLYRq7s/yFQ/XhWCA==\n  dependencies:\n    lru-cache \"^5.1.1\"\n\nopen@^9.1.0:\n  version \"9.1.0\"\n  resolved \"https://registry.yarnpkg.com/open/-/open-9.1.0.tgz#684934359c90ad25742f5a26151970ff8c6c80b6\"\n  integrity sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==\n  dependencies:\n    default-browser \"^4.0.0\"\n    define-lazy-prop \"^3.0.0\"\n    is-inside-container \"^1.0.0\"\n    is-wsl \"^2.2.0\"\n\nopencollective-postinstall@^2.0.2:\n  version \"2.0.2\"\n  resolved \"https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz#5657f1bede69b6e33a45939b061eb53d3c6c3a89\"\n  integrity sha512-pVOEP16TrAO2/fjej1IdOyupJY8KDUM1CvsaScRbw6oddvpQoOfGk4ywha0HKKVAD6RkW4x6Q+tNBwhf3Bgpuw==\n\nopn@^3.0.2:\n  version \"3.0.3\"\n  resolved \"https://registry.yarnpkg.com/opn/-/opn-3.0.3.tgz#b6d99e7399f78d65c3baaffef1fb288e9b85243a\"\n  integrity sha1-ttmec5n3jWXDuq/+8fsojpuFJDo=\n  dependencies:\n    object-assign \"^4.0.1\"\n\noptimist@^0.6.1:\n  version \"0.6.1\"\n  resolved \"https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686\"\n  integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY=\n  dependencies:\n    minimist \"~0.0.1\"\n    wordwrap \"~0.0.2\"\n\noptionator@^0.8.1, optionator@^0.8.3:\n  version \"0.8.3\"\n  resolved \"https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495\"\n  integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==\n  dependencies:\n    deep-is \"~0.1.3\"\n    fast-levenshtein \"~2.0.6\"\n    levn \"~0.3.0\"\n    prelude-ls \"~1.1.2\"\n    type-check \"~0.3.2\"\n    word-wrap \"~1.2.3\"\n\noptionator@^0.9.1:\n  version \"0.9.1\"\n  resolved \"https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499\"\n  integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==\n  dependencies:\n    deep-is \"^0.1.3\"\n    fast-levenshtein \"^2.0.6\"\n    levn \"^0.4.1\"\n    prelude-ls \"^1.2.1\"\n    type-check \"^0.4.0\"\n    word-wrap \"^1.2.3\"\n\noptions@>=0.0.5:\n  version \"0.0.6\"\n  resolved \"https://registry.yarnpkg.com/options/-/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f\"\n  integrity sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=\n\nora@^4.0.3:\n  version \"4.1.1\"\n  resolved \"https://registry.yarnpkg.com/ora/-/ora-4.1.1.tgz#566cc0348a15c36f5f0e979612842e02ba9dddbc\"\n  integrity sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A==\n  dependencies:\n    chalk \"^3.0.0\"\n    cli-cursor \"^3.1.0\"\n    cli-spinners \"^2.2.0\"\n    is-interactive \"^1.0.0\"\n    log-symbols \"^3.0.0\"\n    mute-stream \"0.0.8\"\n    strip-ansi \"^6.0.0\"\n    wcwidth \"^1.0.1\"\n\nos-homedir@^1.0.1:\n  version \"1.0.2\"\n  resolved \"https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3\"\n  integrity sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==\n\nos-locale@^2.0.0:\n  version \"2.1.0\"\n  resolved \"https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2\"\n  integrity sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==\n  dependencies:\n    execa \"^0.7.0\"\n    lcid \"^1.0.0\"\n    mem \"^1.1.0\"\n\nos-tmpdir@^1.0.0, os-tmpdir@~1.0.2:\n  version \"1.0.2\"\n  resolved \"https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274\"\n  integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=\n\noutdent@^0.5.0:\n  version \"0.5.0\"\n  resolved \"https://registry.yarnpkg.com/outdent/-/outdent-0.5.0.tgz#9e10982fdc41492bb473ad13840d22f9655be2ff\"\n  integrity sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==\n\np-each-series@^2.1.0:\n  version \"2.1.0\"\n  resolved \"https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.1.0.tgz#961c8dd3f195ea96c747e636b262b800a6b1af48\"\n  integrity sha512-ZuRs1miPT4HrjFa+9fRfOFXxGJfORgelKV9f9nNOWw2gl6gVsRaVDOQP0+MI0G0wGKns1Yacsu0GjOFbTK0JFQ==\n\np-filter@^2.1.0:\n  version \"2.1.0\"\n  resolved \"https://registry.yarnpkg.com/p-filter/-/p-filter-2.1.0.tgz#1b1472562ae7a0f742f0f3d3d3718ea66ff9c09c\"\n  integrity sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==\n  dependencies:\n    p-map \"^2.0.0\"\n\np-finally@^1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae\"\n  integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=\n\np-finally@^2.0.0:\n  version \"2.0.1\"\n  resolved \"https://registry.yarnpkg.com/p-finally/-/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561\"\n  integrity sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==\n\np-limit@^1.1.0:\n  version \"1.3.0\"\n  resolved \"https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8\"\n  integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==\n  dependencies:\n    p-try \"^1.0.0\"\n\np-limit@^2.0.0:\n  version \"2.3.0\"\n  resolved \"https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1\"\n  integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==\n  dependencies:\n    p-try \"^2.0.0\"\n\np-limit@^2.2.0:\n  version \"2.2.1\"\n  resolved \"https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.1.tgz#aa07a788cc3151c939b5131f63570f0dd2009537\"\n  integrity sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==\n  dependencies:\n    p-try \"^2.0.0\"\n\np-limit@^3.0.2:\n  version \"3.0.2\"\n  resolved \"https://registry.yarnpkg.com/p-limit/-/p-limit-3.0.2.tgz#1664e010af3cadc681baafd3e2a437be7b0fb5fe\"\n  integrity sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg==\n  dependencies:\n    p-try \"^2.0.0\"\n\np-locate@^2.0.0:\n  version \"2.0.0\"\n  resolved \"https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43\"\n  integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=\n  dependencies:\n    p-limit \"^1.1.0\"\n\np-locate@^3.0.0:\n  version \"3.0.0\"\n  resolved \"https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4\"\n  integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==\n  dependencies:\n    p-limit \"^2.0.0\"\n\np-locate@^4.1.0:\n  version \"4.1.0\"\n  resolved \"https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07\"\n  integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==\n  dependencies:\n    p-limit \"^2.2.0\"\n\np-locate@^5.0.0:\n  version \"5.0.0\"\n  resolved \"https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834\"\n  integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==\n  dependencies:\n    p-limit \"^3.0.2\"\n\np-map@^2.0.0:\n  version \"2.1.0\"\n  resolved \"https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175\"\n  integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==\n\np-map@^4.0.0:\n  version \"4.0.0\"\n  resolved \"https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b\"\n  integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==\n  dependencies:\n    aggregate-error \"^3.0.0\"\n\np-try@^1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3\"\n  integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=\n\np-try@^2.0.0:\n  version \"2.2.0\"\n  resolved \"https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6\"\n  integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==\n\npackage-manager-detector@^0.2.0:\n  version \"0.2.11\"\n  resolved \"https://registry.yarnpkg.com/package-manager-detector/-/package-manager-detector-0.2.11.tgz#3af0b34f99d86d24af0a0620603d2e1180d05c9c\"\n  integrity sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==\n  dependencies:\n    quansync \"^0.2.7\"\n\nparent-module@^1.0.0:\n  version \"1.0.1\"\n  resolved \"https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2\"\n  integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==\n  dependencies:\n    callsites \"^3.0.0\"\n\nparse-entities@^2.0.0:\n  version \"2.0.0\"\n  resolved \"https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8\"\n  integrity sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==\n  dependencies:\n    character-entities \"^1.0.0\"\n    character-entities-legacy \"^1.0.0\"\n    character-reference-invalid \"^1.0.0\"\n    is-alphanumerical \"^1.0.0\"\n    is-decimal \"^1.0.0\"\n    is-hexadecimal \"^1.0.0\"\n\nparse-glob@^3.0.4:\n  version \"3.0.4\"\n  resolved \"https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c\"\n  integrity sha1-ssN2z7EfNVE7rdFz7wu246OIORw=\n  dependencies:\n    glob-base \"^0.3.0\"\n    is-dotfile \"^1.0.0\"\n    is-extglob \"^1.0.0\"\n    is-glob \"^2.0.0\"\n\nparse-json@^2.2.0:\n  version \"2.2.0\"\n  resolved \"https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9\"\n  integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=\n  dependencies:\n    error-ex \"^1.2.0\"\n\nparse-json@^4.0.0:\n  version \"4.0.0\"\n  resolved \"https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0\"\n  integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=\n  dependencies:\n    error-ex \"^1.3.1\"\n    json-parse-better-errors \"^1.0.1\"\n\nparse-json@^5.0.0:\n  version \"5.0.0\"\n  resolved \"https://registry.yarnpkg.com/parse-json/-/parse-json-5.0.0.tgz#73e5114c986d143efa3712d4ea24db9a4266f60f\"\n  integrity sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==\n  dependencies:\n    \"@babel/code-frame\" \"^7.0.0\"\n    error-ex \"^1.3.1\"\n    json-parse-better-errors \"^1.0.1\"\n    lines-and-columns \"^1.1.6\"\n\nparse-node-version@^1.0.0:\n  version \"1.0.1\"\n  resolved \"https://registry.yarnpkg.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b\"\n  integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==\n\nparse5@5.1.0:\n  version \"5.1.0\"\n  resolved \"https://registry.yarnpkg.com/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2\"\n  integrity sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==\n\nparse5@^6.0.0:\n  version \"6.0.1\"\n  resolved \"https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b\"\n  integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==\n\nparseurl@~1.3.3:\n  version \"1.3.3\"\n  resolved \"https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4\"\n  integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==\n\npascal-case@^3.1.1:\n  version \"3.1.1\"\n  resolved \"https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.1.tgz#5ac1975133ed619281e88920973d2cd1f279de5f\"\n  integrity sha512-XIeHKqIrsquVTQL2crjq3NfJUxmdLasn3TYOU0VBM+UX2a6ztAWBlJQBePLGY7VHW8+2dRadeIPK5+KImwTxQA==\n  dependencies:\n    no-case \"^3.0.3\"\n    tslib \"^1.10.0\"\n\npascalcase@^0.1.1:\n  version \"0.1.1\"\n  resolved \"https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14\"\n  integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=\n\npath-exists@^3.0.0:\n  version \"3.0.0\"\n  resolved \"https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515\"\n  integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=\n\npath-exists@^4.0.0:\n  version \"4.0.0\"\n  resolved \"https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3\"\n  integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==\n\npath-is-absolute@^1.0.0:\n  version \"1.0.1\"\n  resolved \"https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f\"\n  integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=\n\npath-key@^2.0.0, path-key@^2.0.1:\n  version \"2.0.1\"\n  resolved \"https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40\"\n  integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=\n\npath-key@^3.0.0, path-key@^3.1.0:\n  version \"3.1.1\"\n  resolved \"https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375\"\n  integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==\n\npath-key@^4.0.0:\n  version \"4.0.0\"\n  resolved \"https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18\"\n  integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==\n\npath-parse@^1.0.6:\n  version \"1.0.6\"\n  resolved \"https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c\"\n  integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==\n\npath-parse@^1.0.7:\n  version \"1.0.7\"\n  resolved \"https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735\"\n  integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==\n\npath-to-regexp@0.1.7:\n  version \"0.1.7\"\n  resolved \"https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c\"\n  integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==\n\npath-type@^2.0.0:\n  version \"2.0.0\"\n  resolved \"https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73\"\n  integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=\n  dependencies:\n    pify \"^2.0.0\"\n\npath-type@^4.0.0:\n  version \"4.0.0\"\n  resolved \"https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b\"\n  integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==\n\nperformance-now@^2.1.0:\n  version \"2.1.0\"\n  resolved \"https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b\"\n  integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=\n\npicocolors@^1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c\"\n  integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==\n\npicocolors@^1.1.0:\n  version \"1.1.1\"\n  resolved \"https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b\"\n  integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==\n\npicomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1, picomatch@^2.2.2:\n  version \"2.2.2\"\n  resolved \"https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad\"\n  integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==\n\npicomatch@^2.3.1:\n  version \"2.3.1\"\n  resolved \"https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42\"\n  integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==\n\npify@^2.0.0, pify@^2.3.0:\n  version \"2.3.0\"\n  resolved \"https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c\"\n  integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=\n\npify@^4.0.1:\n  version \"4.0.1\"\n  resolved \"https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231\"\n  integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==\n\npirates@^4.0.0, pirates@^4.0.1:\n  version \"4.0.1\"\n  resolved \"https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87\"\n  integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==\n  dependencies:\n    node-modules-regexp \"^1.0.0\"\n\npkg-dir@^2.0.0:\n  version \"2.0.0\"\n  resolved \"https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b\"\n  integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=\n  dependencies:\n    find-up \"^2.1.0\"\n\npkg-dir@^3.0.0:\n  version \"3.0.0\"\n  resolved \"https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3\"\n  integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==\n  dependencies:\n    find-up \"^3.0.0\"\n\npkg-dir@^4.1.0, pkg-dir@^4.2.0:\n  version \"4.2.0\"\n  resolved \"https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3\"\n  integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==\n  dependencies:\n    find-up \"^4.0.0\"\n\npkg-dir@^5.0.0:\n  version \"5.0.0\"\n  resolved \"https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-5.0.0.tgz#a02d6aebe6ba133a928f74aec20bafdfe6b8e760\"\n  integrity sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==\n  dependencies:\n    find-up \"^5.0.0\"\n\nplatform@^1.3.3:\n  version \"1.3.6\"\n  resolved \"https://registry.yarnpkg.com/platform/-/platform-1.3.6.tgz#48b4ce983164b209c2d45a107adb31f473a6e7a7\"\n  integrity sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==\n\nplaywright-core@1.34.3:\n  version \"1.34.3\"\n  resolved \"https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.34.3.tgz#bc906ea1b26bb66116ce329436ee59ba2e78fe9f\"\n  integrity sha512-2pWd6G7OHKemc5x1r1rp8aQcpvDh7goMBZlJv6Co5vCNLVcQJdhxRL09SGaY6HcyHH9aT4tiynZabMofVasBYw==\n\nplease-upgrade-node@^3.2.0:\n  version \"3.2.0\"\n  resolved \"https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942\"\n  integrity sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==\n  dependencies:\n    semver-compare \"^1.0.0\"\n\nplist@^3.0.0, plist@^3.0.1:\n  version \"3.0.1\"\n  resolved \"https://registry.yarnpkg.com/plist/-/plist-3.0.1.tgz#a9b931d17c304e8912ef0ba3bdd6182baf2e1f8c\"\n  integrity sha512-GpgvHHocGRyQm74b6FWEZZVRroHKE1I0/BTjAmySaohK+cUn+hZpbqXkc3KWgW3gQYkqcQej35FohcT0FRlkRQ==\n  dependencies:\n    base64-js \"^1.2.3\"\n    xmlbuilder \"^9.0.7\"\n    xmldom \"0.1.x\"\n\nplugin-error@^0.1.2:\n  version \"0.1.2\"\n  resolved \"https://registry.yarnpkg.com/plugin-error/-/plugin-error-0.1.2.tgz#3b9bb3335ccf00f425e07437e19276967da47ace\"\n  integrity sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=\n  dependencies:\n    ansi-cyan \"^0.1.1\"\n    ansi-red \"^0.1.1\"\n    arr-diff \"^1.0.1\"\n    arr-union \"^2.0.1\"\n    extend-shallow \"^1.1.2\"\n\npn@^1.1.0:\n  version \"1.1.0\"\n  resolved \"https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb\"\n  integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==\n\npopmotion@9.0.0-beta-8:\n  version \"9.0.0-beta-8\"\n  resolved \"https://registry.yarnpkg.com/popmotion/-/popmotion-9.0.0-beta-8.tgz#f5a709f11737734e84f2a6b73f9bcf25ee30c388\"\n  integrity sha512-6eQzqursPvnP7ePvdfPeY4wFHmS3OLzNP8rJRvmfFfEIfpFqrQgLsM50Gd9AOvGKJtYJOFknNG+dsnzCpgIdAA==\n  dependencies:\n    \"@popmotion/easing\" \"^1.0.1\"\n    \"@popmotion/popcorn\" \"^0.4.2\"\n    framesync \"^4.0.4\"\n    hey-listen \"^1.0.8\"\n    style-value-types \"^3.1.6\"\n    tslib \"^1.10.0\"\n\nposix-character-classes@^0.1.0:\n  version \"0.1.1\"\n  resolved \"https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab\"\n  integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=\n\npostcss-import@^15.1.0:\n  version \"15.1.0\"\n  resolved \"https://registry.yarnpkg.com/postcss-import/-/postcss-import-15.1.0.tgz#41c64ed8cc0e23735a9698b3249ffdbf704adc70\"\n  integrity sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==\n  dependencies:\n    postcss-value-parser \"^4.0.0\"\n    read-cache \"^1.0.0\"\n    resolve \"^1.1.7\"\n\npostcss-js@^4.0.1:\n  version \"4.0.1\"\n  resolved \"https://registry.yarnpkg.com/postcss-js/-/postcss-js-4.0.1.tgz#61598186f3703bab052f1c4f7d805f3991bee9d2\"\n  integrity sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==\n  dependencies:\n    camelcase-css \"^2.0.1\"\n\npostcss-load-config@^4.0.1:\n  version \"4.0.1\"\n  resolved \"https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-4.0.1.tgz#152383f481c2758274404e4962743191d73875bd\"\n  integrity sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==\n  dependencies:\n    lilconfig \"^2.0.5\"\n    yaml \"^2.1.1\"\n\npostcss-nested@^6.0.1:\n  version \"6.0.1\"\n  resolved \"https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-6.0.1.tgz#f83dc9846ca16d2f4fa864f16e9d9f7d0961662c\"\n  integrity sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==\n  dependencies:\n    postcss-selector-parser \"^6.0.11\"\n\npostcss-selector-parser@^6.0.11:\n  version \"6.0.13\"\n  resolved \"https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz#d05d8d76b1e8e173257ef9d60b706a8e5e99bf1b\"\n  integrity sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==\n  dependencies:\n    cssesc \"^3.0.0\"\n    util-deprecate \"^1.0.2\"\n\npostcss-value-parser@^4.0.0, postcss-value-parser@^4.2.0:\n  version \"4.2.0\"\n  resolved \"https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514\"\n  integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==\n\npostcss@8.4.14:\n  version \"8.4.14\"\n  resolved \"https://registry.yarnpkg.com/postcss/-/postcss-8.4.14.tgz#ee9274d5622b4858c1007a74d76e42e56fd21caf\"\n  integrity sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==\n  dependencies:\n    nanoid \"^3.3.4\"\n    picocolors \"^1.0.0\"\n    source-map-js \"^1.0.2\"\n\npostcss@^8.4.21, postcss@^8.4.23:\n  version \"8.4.24\"\n  resolved \"https://registry.yarnpkg.com/postcss/-/postcss-8.4.24.tgz#f714dba9b2284be3cc07dbd2fc57ee4dc972d2df\"\n  integrity sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==\n  dependencies:\n    nanoid \"^3.3.6\"\n    picocolors \"^1.0.0\"\n    source-map-js \"^1.0.2\"\n\nprelude-ls@^1.2.1:\n  version \"1.2.1\"\n  resolved \"https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396\"\n  integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==\n\nprelude-ls@~1.1.2:\n  version \"1.1.2\"\n  resolved \"https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54\"\n  integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=\n\npreserve@^0.2.0:\n  version \"0.2.0\"\n  resolved \"https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b\"\n  integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=\n\nprettier-linter-helpers@^1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b\"\n  integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==\n  dependencies:\n    fast-diff \"^1.1.2\"\n\nprettier@1.16.4:\n  version \"1.16.4\"\n  resolved \"https://registry.yarnpkg.com/prettier/-/prettier-1.16.4.tgz#73e37e73e018ad2db9c76742e2647e21790c9717\"\n  integrity sha512-ZzWuos7TI5CKUeQAtFd6Zhm2s6EpAD/ZLApIhsF9pRvRtM1RFo61dM/4MSRUA0SuLugA/zgrZD8m0BaY46Og7g==\n\nprettier@^1.19.1:\n  version \"1.19.1\"\n  resolved \"https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb\"\n  integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==\n\nprettier@^2.1.2:\n  version \"2.1.2\"\n  resolved \"https://registry.yarnpkg.com/prettier/-/prettier-2.1.2.tgz#3050700dae2e4c8b67c4c3f666cdb8af405e1ce5\"\n  integrity sha512-16c7K+x4qVlJg9rEbXl7HEGmQyZlG4R9AgP+oHKRMsMsuk8s+ATStlf1NpDqyBI1HpVyfjLOeMhH2LvuNvV5Vg==\n\nprettier@^2.7.1, prettier@^2.8.4:\n  version \"2.8.8\"\n  resolved \"https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da\"\n  integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==\n\npretty-format@24.0.0-alpha.6:\n  version \"24.0.0-alpha.6\"\n  resolved \"https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.0.0-alpha.6.tgz#25ad2fa46b342d6278bf241c5d2114d4376fbac1\"\n  integrity sha512-zG2m6YJeuzwBFqb5EIdmwYVf30sap+iMRuYNPytOccEXZMAJbPIFGKVJ/U0WjQegmnQbRo9CI7j6j3HtDaifiA==\n  dependencies:\n    ansi-regex \"^4.0.0\"\n    ansi-styles \"^3.2.0\"\n\npretty-format@^25.2.1, pretty-format@^25.5.0:\n  version \"25.5.0\"\n  resolved \"https://registry.yarnpkg.com/pretty-format/-/pretty-format-25.5.0.tgz#7873c1d774f682c34b8d48b6743a2bf2ac55791a\"\n  integrity sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==\n  dependencies:\n    \"@jest/types\" \"^25.5.0\"\n    ansi-regex \"^5.0.0\"\n    ansi-styles \"^4.0.0\"\n    react-is \"^16.12.0\"\n\npretty-format@^27.0.2:\n  version \"27.5.1\"\n  resolved \"https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e\"\n  integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==\n  dependencies:\n    ansi-regex \"^5.0.1\"\n    ansi-styles \"^5.0.0\"\n    react-is \"^17.0.1\"\n\nprism-react-renderer@^1.2.1:\n  version \"1.3.5\"\n  resolved \"https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-1.3.5.tgz#786bb69aa6f73c32ba1ee813fbe17a0115435085\"\n  integrity sha512-IJ+MSwBWKG+SM3b2SUfdrhC+gu01QkV2KmRQgREThBfSQRoufqRfxfHUxpG1WcaFjP+kojcFyO9Qqtpgt3qLCg==\n\nprismjs@^1.20.0:\n  version \"1.29.0\"\n  resolved \"https://registry.yarnpkg.com/prismjs/-/prismjs-1.29.0.tgz#f113555a8fa9b57c35e637bba27509dcf802dd12\"\n  integrity sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==\n\nprocess-nextick-args@~2.0.0:\n  version \"2.0.1\"\n  resolved \"https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2\"\n  integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==\n\nprocess@^0.11.10:\n  version \"0.11.10\"\n  resolved \"https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182\"\n  integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI=\n\nprogress-estimator@^0.2.2:\n  version \"0.2.2\"\n  resolved \"https://registry.yarnpkg.com/progress-estimator/-/progress-estimator-0.2.2.tgz#1c3947a5782ea56e40c8fccc290ac7ceeb1b91cb\"\n  integrity sha512-GF76Ac02MTJD6o2nMNtmtOFjwWCnHcvXyn5HOWPQnEMO8OTLw7LAvNmrwe8LmdsB+eZhwUu9fX/c9iQnBxWaFA==\n  dependencies:\n    chalk \"^2.4.1\"\n    cli-spinners \"^1.3.1\"\n    humanize-duration \"^3.15.3\"\n    log-update \"^2.3.0\"\n\nprogress@^2.0.0:\n  version \"2.0.3\"\n  resolved \"https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8\"\n  integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==\n\npromise@^7.1.1:\n  version \"7.3.1\"\n  resolved \"https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf\"\n  integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==\n  dependencies:\n    asap \"~2.0.3\"\n\nprompts@^2.0.1:\n  version \"2.3.0\"\n  resolved \"https://registry.yarnpkg.com/prompts/-/prompts-2.3.0.tgz#a444e968fa4cc7e86689a74050685ac8006c4cc4\"\n  integrity sha512-NfbbPPg/74fT7wk2XYQ7hAIp9zJyZp5Fu19iRbORqqy1BhtrkZ0fPafBU+7bmn8ie69DpT0R6QpJIN2oisYjJg==\n  dependencies:\n    kleur \"^3.0.3\"\n    sisteransi \"^1.0.3\"\n\nprop-types@^15.5.8, prop-types@^15.6.2, prop-types@^15.7.2:\n  version \"15.7.2\"\n  resolved \"https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5\"\n  integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==\n  dependencies:\n    loose-envify \"^1.4.0\"\n    object-assign \"^4.1.1\"\n    react-is \"^16.8.1\"\n\nprop-types@^15.8.1:\n  version \"15.8.1\"\n  resolved \"https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5\"\n  integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==\n  dependencies:\n    loose-envify \"^1.4.0\"\n    object-assign \"^4.1.1\"\n    react-is \"^16.13.1\"\n\nproperty-expr@^2.0.4:\n  version \"2.0.5\"\n  resolved \"https://registry.yarnpkg.com/property-expr/-/property-expr-2.0.5.tgz#278bdb15308ae16af3e3b9640024524f4dc02cb4\"\n  integrity sha512-IJUkICM5dP5znhCckHSv30Q4b5/JA5enCtkRHYaOVOAocnH/1BQEYTC5NMfT3AVl/iXKdr3aqQbQn9DxyWknwA==\n\nproperty-information@^5.0.0, property-information@^5.3.0:\n  version \"5.6.0\"\n  resolved \"https://registry.yarnpkg.com/property-information/-/property-information-5.6.0.tgz#61675545fb23002f245c6540ec46077d4da3ed69\"\n  integrity sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==\n  dependencies:\n    xtend \"^4.0.0\"\n\nproxy-addr@~2.0.7:\n  version \"2.0.7\"\n  resolved \"https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025\"\n  integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==\n  dependencies:\n    forwarded \"0.2.0\"\n    ipaddr.js \"1.9.1\"\n\npseudomap@^1.0.2:\n  version \"1.0.2\"\n  resolved \"https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3\"\n  integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM=\n\npsl@^1.1.28:\n  version \"1.6.0\"\n  resolved \"https://registry.yarnpkg.com/psl/-/psl-1.6.0.tgz#60557582ee23b6c43719d9890fb4170ecd91e110\"\n  integrity sha512-SYKKmVel98NCOYXpkwUqZqh0ahZeeKfmisiLIcEZdsb+WbLv02g/dI5BUmZnIyOe7RzZtLax81nnb2HbvC2tzA==\n\npump@^3.0.0:\n  version \"3.0.0\"\n  resolved \"https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64\"\n  integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==\n  dependencies:\n    end-of-stream \"^1.1.0\"\n    once \"^1.3.1\"\n\npunycode@^2.1.0, punycode@^2.1.1:\n  version \"2.1.1\"\n  resolved \"https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec\"\n  integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==\n\nqs@6.11.0:\n  version \"6.11.0\"\n  resolved \"https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a\"\n  integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==\n  dependencies:\n    side-channel \"^1.0.4\"\n\nqs@~6.5.2:\n  version \"6.5.2\"\n  resolved \"https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36\"\n  integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==\n\nquansync@^0.2.7:\n  version \"0.2.11\"\n  resolved \"https://registry.yarnpkg.com/quansync/-/quansync-0.2.11.tgz#f9c3adda2e1272e4f8cf3f1457b04cbdb4ee692a\"\n  integrity sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==\n\nquerystring-es3@^0.2.1:\n  version \"0.2.1\"\n  resolved \"https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73\"\n  integrity sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==\n\nqueue@6.0.2:\n  version \"6.0.2\"\n  resolved \"https://registry.yarnpkg.com/queue/-/queue-6.0.2.tgz#b91525283e2315c7553d2efa18d83e76432fed65\"\n  integrity sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==\n  dependencies:\n    inherits \"~2.0.3\"\n\nrandomatic@^3.0.0:\n  version \"3.1.1\"\n  resolved \"https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed\"\n  integrity sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==\n  dependencies:\n    is-number \"^4.0.0\"\n    kind-of \"^6.0.0\"\n    math-random \"^1.0.1\"\n\nrange-parser@~1.2.1:\n  version \"1.2.1\"\n  resolved \"https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031\"\n  integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==\n\nraw-body@2.5.1:\n  version \"2.5.1\"\n  resolved \"https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857\"\n  integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==\n  dependencies:\n    bytes \"3.1.2\"\n    http-errors \"2.0.0\"\n    iconv-lite \"0.4.24\"\n    unpipe \"1.0.0\"\n\nraw-body@2.5.2:\n  version \"2.5.2\"\n  resolved \"https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a\"\n  integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==\n  dependencies:\n    bytes \"3.1.2\"\n    http-errors \"2.0.0\"\n    iconv-lite \"0.4.24\"\n    unpipe \"1.0.0\"\n\nreact-aria@^3.2.0:\n  version \"3.25.0\"\n  resolved \"https://registry.yarnpkg.com/react-aria/-/react-aria-3.25.0.tgz#d51d4ba87a97f6d366b9a3a4bd59461d5c9925b3\"\n  integrity sha512-nvahN6tUCnES9CXCKEzEHkWy7mH39KsQoCk6eehIT3eG1pw/eYUqXFAmmWIL3g2VDCiGavpSf1/BUTnAXE2VsQ==\n  dependencies:\n    \"@react-aria/breadcrumbs\" \"^3.5.2\"\n    \"@react-aria/button\" \"^3.7.2\"\n    \"@react-aria/calendar\" \"^3.3.0\"\n    \"@react-aria/checkbox\" \"^3.9.1\"\n    \"@react-aria/combobox\" \"^3.6.1\"\n    \"@react-aria/datepicker\" \"^3.4.1\"\n    \"@react-aria/dialog\" \"^3.5.2\"\n    \"@react-aria/dnd\" \"^3.2.1\"\n    \"@react-aria/focus\" \"^3.12.1\"\n    \"@react-aria/gridlist\" \"^3.4.0\"\n    \"@react-aria/i18n\" \"^3.7.2\"\n    \"@react-aria/interactions\" \"^3.15.1\"\n    \"@react-aria/label\" \"^3.5.2\"\n    \"@react-aria/link\" \"^3.5.1\"\n    \"@react-aria/listbox\" \"^3.9.1\"\n    \"@react-aria/menu\" \"^3.9.1\"\n    \"@react-aria/meter\" \"^3.4.2\"\n    \"@react-aria/numberfield\" \"^3.5.1\"\n    \"@react-aria/overlays\" \"^3.14.1\"\n    \"@react-aria/progress\" \"^3.4.2\"\n    \"@react-aria/radio\" \"^3.6.1\"\n    \"@react-aria/searchfield\" \"^3.5.2\"\n    \"@react-aria/select\" \"^3.10.1\"\n    \"@react-aria/selection\" \"^3.15.0\"\n    \"@react-aria/separator\" \"^3.3.2\"\n    \"@react-aria/slider\" \"^3.4.1\"\n    \"@react-aria/ssr\" \"^3.6.0\"\n    \"@react-aria/switch\" \"^3.5.1\"\n    \"@react-aria/table\" \"^3.9.1\"\n    \"@react-aria/tabs\" \"^3.6.0\"\n    \"@react-aria/tag\" \"^3.0.0\"\n    \"@react-aria/textfield\" \"^3.9.2\"\n    \"@react-aria/tooltip\" \"^3.5.1\"\n    \"@react-aria/utils\" \"^3.17.0\"\n    \"@react-aria/visually-hidden\" \"^3.8.1\"\n    \"@react-types/shared\" \"^3.18.1\"\n\nreact-clone-referenced-element@^1.0.1:\n  version \"1.1.0\"\n  resolved \"https://registry.yarnpkg.com/react-clone-referenced-element/-/react-clone-referenced-element-1.1.0.tgz#9cdda7f2aeb54fea791f3ab8c6ab96c7a77d0158\"\n  integrity sha512-FKOsfKbBkPxYE8576EM6uAfHC4rnMpLyH6/TJUL4WcHUEB3EUn8AxPjnnV/IiwSSzsClvHYK+sDELKN/EJ0WYg==\n\nreact-deep-force-update@^1.0.0:\n  version \"1.1.2\"\n  resolved \"https://registry.yarnpkg.com/react-deep-force-update/-/react-deep-force-update-1.1.2.tgz#3d2ae45c2c9040cbb1772be52f8ea1ade6ca2ee1\"\n  integrity sha512-WUSQJ4P/wWcusaH+zZmbECOk7H5N2pOIl0vzheeornkIMhu+qrNdGFm0bDZLCb0hSF0jf/kH1SgkNGfBdTc4wA==\n\nreact-devtools-core@^3.6.0:\n  version \"3.6.3\"\n  resolved \"https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-3.6.3.tgz#977d95b684c6ad28205f0c62e1e12c5f16675814\"\n  integrity sha512-+P+eFy/yo8Z/UH9J0DqHZuUM5+RI2wl249TNvMx3J2jpUomLQa4Zxl56GEotGfw3PIP1eI+hVf1s53FlUONStQ==\n  dependencies:\n    shell-quote \"^1.6.1\"\n    ws \"^3.3.1\"\n\nreact-dom@^18.2.0:\n  version \"18.2.0\"\n  resolved \"https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d\"\n  integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==\n  dependencies:\n    loose-envify \"^1.1.0\"\n    scheduler \"^0.23.0\"\n\nreact-fast-compare@^2.0.1:\n  version \"2.0.4\"\n  resolved \"https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-2.0.4.tgz#e84b4d455b0fec113e0402c329352715196f81f9\"\n  integrity sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==\n\nreact-hook-form@^7.45.0:\n  version \"7.45.0\"\n  resolved \"https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.45.0.tgz#df2bbc8cee598855a63ba446e0bb06f7c8120ccf\"\n  integrity sha512-AbHeZ4ad+0dEIknSW9dBgIwcvRDfZ1O97sgj75WaMdOX0eg8TBiUf9wxzVkIjZbk76BBIE9lmFOzyD4PN80ZQg==\n\nreact-icons@^3.9.0:\n  version \"3.11.0\"\n  resolved \"https://registry.yarnpkg.com/react-icons/-/react-icons-3.11.0.tgz#2ca2903dfab8268ca18ebd8cc2e879921ec3b254\"\n  integrity sha512-JRgiI/vdF6uyBgyZhVyYJUZAop95Sy4XDe/jmT3R/bKliFWpO/uZBwvSjWEdxwzec7SYbEPNPck0Kff2tUGM2Q==\n  dependencies:\n    camelcase \"^5.0.0\"\n\nreact-is@^16.12.0, react-is@^16.13.1, react-is@^16.8.1:\n  version \"16.13.1\"\n  resolved \"https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4\"\n  integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==\n\nreact-is@^16.7.0:\n  version \"16.12.0\"\n  resolved \"https://registry.yarnpkg.com/react-is/-/react-is-16.12.0.tgz#2cc0fe0fba742d97fd527c42a13bec4eeb06241c\"\n  integrity sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q==\n\nreact-is@^17.0.1:\n  version \"17.0.2\"\n  resolved \"https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0\"\n  integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==\n\nreact-live@^2.2.2:\n  version \"2.4.1\"\n  resolved \"https://registry.yarnpkg.com/react-live/-/react-live-2.4.1.tgz#65e674ff9ca9a9a95f83117acc21ffd968aca619\"\n  integrity sha512-r+32f7oV/kBs3QZBRvaT+9vOkQW47UZrDpgwUe5FiIMOl7sdo5pmISgb7Zpj5PGHgY6XQaiXs3FEh+IWw3KbRg==\n  dependencies:\n    \"@types/buble\" \"^0.20.0\"\n    buble \"0.19.6\"\n    core-js \"^3.14.0\"\n    dom-iterator \"^1.0.0\"\n    prism-react-renderer \"^1.2.1\"\n    prop-types \"^15.7.2\"\n    react-simple-code-editor \"^0.11.0\"\n    unescape \"^1.0.1\"\n\n\"react-native@https://github.com/expo/react-native/archive/sdk-33.0.0.tar.gz\":\n  version \"0.59.8\"\n  resolved \"https://github.com/expo/react-native/archive/sdk-33.0.0.tar.gz#970a32631977dbe7158f024abc23e4c0c0975058\"\n  dependencies:\n    \"@babel/runtime\" \"^7.0.0\"\n    \"@react-native-community/cli\" \"^1.2.1\"\n    absolute-path \"^0.0.0\"\n    art \"^0.10.0\"\n    base64-js \"^1.1.2\"\n    chalk \"^2.4.1\"\n    commander \"^2.9.0\"\n    compression \"^1.7.1\"\n    connect \"^3.6.5\"\n    create-react-class \"^15.6.3\"\n    debug \"^2.2.0\"\n    denodeify \"^1.2.1\"\n    errorhandler \"^1.5.0\"\n    escape-string-regexp \"^1.0.5\"\n    event-target-shim \"^1.0.5\"\n    fbjs \"^1.0.0\"\n    fbjs-scripts \"^1.0.0\"\n    fs-extra \"^1.0.0\"\n    glob \"^7.1.1\"\n    graceful-fs \"^4.1.3\"\n    inquirer \"^3.0.6\"\n    invariant \"^2.2.4\"\n    lodash \"^4.17.5\"\n    metro-babel-register \"0.51.0\"\n    metro-react-native-babel-transformer \"0.51.0\"\n    mime \"^1.3.4\"\n    minimist \"^1.2.0\"\n    mkdirp \"^0.5.1\"\n    morgan \"^1.9.0\"\n    node-fetch \"^2.2.0\"\n    node-notifier \"^5.2.1\"\n    npmlog \"^2.0.4\"\n    nullthrows \"^1.1.0\"\n    opn \"^3.0.2\"\n    optimist \"^0.6.1\"\n    plist \"^3.0.0\"\n    pretty-format \"24.0.0-alpha.6\"\n    promise \"^7.1.1\"\n    prop-types \"^15.5.8\"\n    react-clone-referenced-element \"^1.0.1\"\n    react-devtools-core \"^3.6.0\"\n    regenerator-runtime \"^0.11.0\"\n    rimraf \"^2.5.4\"\n    semver \"^5.0.3\"\n    serve-static \"^1.13.1\"\n    shell-quote \"1.6.1\"\n    stacktrace-parser \"0.1.4\"\n    ws \"^1.1.5\"\n    xmldoc \"^0.4.0\"\n    yargs \"^9.0.0\"\n\nreact-proxy@^1.1.7:\n  version \"1.1.8\"\n  resolved \"https://registry.yarnpkg.com/react-proxy/-/react-proxy-1.1.8.tgz#9dbfd9d927528c3aa9f444e4558c37830ab8c26a\"\n  integrity sha1-nb/Z2SdSjDqp9ETkVYw3gwq4wmo=\n  dependencies:\n    lodash \"^4.6.1\"\n    react-deep-force-update \"^1.0.0\"\n\nreact-simple-code-editor@^0.11.0:\n  version \"0.11.3\"\n  resolved \"https://registry.yarnpkg.com/react-simple-code-editor/-/react-simple-code-editor-0.11.3.tgz#6e5af1c2e51588aded2c89b86e98fac144212f61\"\n  integrity sha512-7bVI4Yd1aNCeuldErXUt8ksaAG5Fi+GZ6vp3mtFBnckKdzsQtrgkDvdwMFXIhwTGG+mUYmk5ZpMo0axSW9JBzA==\n\nreact-transform-hmr@^1.0.4:\n  version \"1.0.4\"\n  resolved \"https://registry.yarnpkg.com/react-transform-hmr/-/react-transform-hmr-1.0.4.tgz#e1a40bd0aaefc72e8dfd7a7cda09af85066397bb\"\n  integrity sha1-4aQL0Krvxy6N/Xp82gmvhQZjl7s=\n  dependencies:\n    global \"^4.3.0\"\n    react-proxy \"^1.1.7\"\n\nreact@^18.2.0:\n  version \"18.2.0\"\n  resolved \"https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5\"\n  integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==\n  dependencies:\n    loose-envify \"^1.1.0\"\n\nread-cache@^1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774\"\n  integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==\n  dependencies:\n    pify \"^2.3.0\"\n\nread-pkg-up@^2.0.0:\n  version \"2.0.0\"\n  resolved \"https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be\"\n  integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=\n  dependencies:\n    find-up \"^2.0.0\"\n    read-pkg \"^2.0.0\"\n\nread-pkg-up@^7.0.1:\n  version \"7.0.1\"\n  resolved \"https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507\"\n  integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==\n  dependencies:\n    find-up \"^4.1.0\"\n    read-pkg \"^5.2.0\"\n    type-fest \"^0.8.1\"\n\nread-pkg@^2.0.0:\n  version \"2.0.0\"\n  resolved \"https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8\"\n  integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=\n  dependencies:\n    load-json-file \"^2.0.0\"\n    normalize-package-data \"^2.3.2\"\n    path-type \"^2.0.0\"\n\nread-pkg@^5.2.0:\n  version \"5.2.0\"\n  resolved \"https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc\"\n  integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==\n  dependencies:\n    \"@types/normalize-package-data\" \"^2.4.0\"\n    normalize-package-data \"^2.5.0\"\n    parse-json \"^5.0.0\"\n    type-fest \"^0.6.0\"\n\nread-yaml-file@^1.1.0:\n  version \"1.1.0\"\n  resolved \"https://registry.yarnpkg.com/read-yaml-file/-/read-yaml-file-1.1.0.tgz#9362bbcbdc77007cc8ea4519fe1c0b821a7ce0d8\"\n  integrity sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==\n  dependencies:\n    graceful-fs \"^4.1.5\"\n    js-yaml \"^3.6.1\"\n    pify \"^4.0.1\"\n    strip-bom \"^3.0.0\"\n\nreadable-stream@^2.0.1, readable-stream@^2.0.6, readable-stream@^2.2.2, readable-stream@~2.3.6:\n  version \"2.3.7\"\n  resolved \"https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57\"\n  integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==\n  dependencies:\n    core-util-is \"~1.0.0\"\n    inherits \"~2.0.3\"\n    isarray \"~1.0.0\"\n    process-nextick-args \"~2.0.0\"\n    safe-buffer \"~5.1.1\"\n    string_decoder \"~1.1.1\"\n    util-deprecate \"~1.0.1\"\n\nreaddirp@~3.6.0:\n  version \"3.6.0\"\n  resolved \"https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7\"\n  integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==\n  dependencies:\n    picomatch \"^2.2.1\"\n\nrealpath-native@^2.0.0:\n  version \"2.0.0\"\n  resolved \"https://registry.yarnpkg.com/realpath-native/-/realpath-native-2.0.0.tgz#7377ac429b6e1fd599dc38d08ed942d0d7beb866\"\n  integrity sha512-v1SEYUOXXdbBZK8ZuNgO4TBjamPsiSgcFr0aP+tEKpQZK8vooEUqV6nm6Cv502mX4NF2EfsnVqtNAHG+/6Ur1Q==\n\nrechoir@^0.6.2:\n  version \"0.6.2\"\n  resolved \"https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384\"\n  integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=\n  dependencies:\n    resolve \"^1.1.6\"\n\nreduce@^1.0.1:\n  version \"1.0.2\"\n  resolved \"https://registry.yarnpkg.com/reduce/-/reduce-1.0.2.tgz#0cd680ad3ffe0b060e57a5c68bdfce37168d361b\"\n  integrity sha512-xX7Fxke/oHO5IfZSk77lvPa/7bjMh9BuCk4OOoX5XTXrM7s0Z+MkPfSDfz0q7r91BhhGSs8gii/VEN/7zhCPpQ==\n  dependencies:\n    object-keys \"^1.1.0\"\n\nregenerate-unicode-properties@^8.2.0:\n  version \"8.2.0\"\n  resolved \"https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec\"\n  integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==\n  dependencies:\n    regenerate \"^1.4.0\"\n\nregenerate-unicode-properties@^9.0.0:\n  version \"9.0.0\"\n  resolved \"https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz#54d09c7115e1f53dc2314a974b32c1c344efe326\"\n  integrity sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA==\n  dependencies:\n    regenerate \"^1.4.2\"\n\nregenerate@^1.4.0, regenerate@^1.4.2:\n  version \"1.4.2\"\n  resolved \"https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a\"\n  integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==\n\nregenerator-runtime@^0.11.0:\n  version \"0.11.1\"\n  resolved \"https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9\"\n  integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==\n\nregenerator-runtime@^0.13.11:\n  version \"0.13.11\"\n  resolved \"https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9\"\n  integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==\n\nregenerator-runtime@^0.13.2, regenerator-runtime@^0.13.4, regenerator-runtime@^0.13.7:\n  version \"0.13.7\"\n  resolved \"https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55\"\n  integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==\n\nregenerator-transform@^0.14.2:\n  version \"0.14.5\"\n  resolved \"https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4\"\n  integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==\n  dependencies:\n    \"@babel/runtime\" \"^7.8.4\"\n\nregex-cache@^0.4.2:\n  version \"0.4.4\"\n  resolved \"https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd\"\n  integrity sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==\n  dependencies:\n    is-equal-shallow \"^0.1.3\"\n\nregex-not@^1.0.0, regex-not@^1.0.2:\n  version \"1.0.2\"\n  resolved \"https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c\"\n  integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==\n  dependencies:\n    extend-shallow \"^3.0.2\"\n    safe-regex \"^1.1.0\"\n\nregexp.prototype.flags@^1.4.3, regexp.prototype.flags@^1.5.0:\n  version \"1.5.0\"\n  resolved \"https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb\"\n  integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==\n  dependencies:\n    call-bind \"^1.0.2\"\n    define-properties \"^1.2.0\"\n    functions-have-names \"^1.2.3\"\n\nregexpp@^2.0.1:\n  version \"2.0.1\"\n  resolved \"https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f\"\n  integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==\n\nregexpp@^3.0.0:\n  version \"3.0.0\"\n  resolved \"https://registry.yarnpkg.com/regexpp/-/regexpp-3.0.0.tgz#dd63982ee3300e67b41c1956f850aa680d9d330e\"\n  integrity sha512-Z+hNr7RAVWxznLPuA7DIh8UNX1j9CDrUQxskw9IrBE1Dxue2lyXT+shqEIeLUjrokxIP8CMy1WkjgG3rTsd5/g==\n\nregexpp@^3.1.0:\n  version \"3.2.0\"\n  resolved \"https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2\"\n  integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==\n\nregexpu-core@^4.2.0:\n  version \"4.8.0\"\n  resolved \"https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.8.0.tgz#e5605ba361b67b1718478501327502f4479a98f0\"\n  integrity sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg==\n  dependencies:\n    regenerate \"^1.4.2\"\n    regenerate-unicode-properties \"^9.0.0\"\n    regjsgen \"^0.5.2\"\n    regjsparser \"^0.7.0\"\n    unicode-match-property-ecmascript \"^2.0.0\"\n    unicode-match-property-value-ecmascript \"^2.0.0\"\n\nregexpu-core@^4.7.1:\n  version \"4.7.1\"\n  resolved \"https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6\"\n  integrity sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==\n  dependencies:\n    regenerate \"^1.4.0\"\n    regenerate-unicode-properties \"^8.2.0\"\n    regjsgen \"^0.5.1\"\n    regjsparser \"^0.6.4\"\n    unicode-match-property-ecmascript \"^1.0.4\"\n    unicode-match-property-value-ecmascript \"^1.2.0\"\n\nregjsgen@^0.5.1, regjsgen@^0.5.2:\n  version \"0.5.2\"\n  resolved \"https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733\"\n  integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==\n\nregjsparser@^0.6.4:\n  version \"0.6.4\"\n  resolved \"https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272\"\n  integrity sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==\n  dependencies:\n    jsesc \"~0.5.0\"\n\nregjsparser@^0.7.0:\n  version \"0.7.0\"\n  resolved \"https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.7.0.tgz#a6b667b54c885e18b52554cb4960ef71187e9968\"\n  integrity sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ==\n  dependencies:\n    jsesc \"~0.5.0\"\n\nrehype-format@^3.0.1:\n  version \"3.1.0\"\n  resolved \"https://registry.yarnpkg.com/rehype-format/-/rehype-format-3.1.0.tgz#3ed1214b4b0047cb7817e6b3471f3515caebab26\"\n  integrity sha512-XC88CLU83x6ocwHbDsqbK/y+qNxqWcSp7gZdYeJzUZPQH05ABFke3Zb+H53UGsRAUTB2W95/UMMtn/pM+UFiKQ==\n  dependencies:\n    hast-util-embedded \"^1.0.0\"\n    hast-util-is-element \"^1.0.0\"\n    hast-util-phrasing \"^1.0.0\"\n    hast-util-whitespace \"^1.0.0\"\n    html-whitespace-sensitive-tag-names \"^1.0.0\"\n    rehype-minify-whitespace \"^4.0.0\"\n    repeat-string \"^1.0.0\"\n    unist-util-visit-parents \"^3.0.0\"\n\nrehype-img-size@^0.0.1:\n  version \"0.0.1\"\n  resolved \"https://registry.yarnpkg.com/rehype-img-size/-/rehype-img-size-0.0.1.tgz#bfdb653c08817171ce78ae37db2bee930533cad9\"\n  integrity sha512-AfJgsG0LM81+ozLkdySg5vM93gcw8N9hF8LTs2mKG39pC+wVdId9chelh/oY9MCbqvR8x7jUol4UekgVnPi1rg==\n  dependencies:\n    image-size \"^0.9.7\"\n    unist-util-visit \"^2.0.3\"\n\nrehype-minify-whitespace@^4.0.0:\n  version \"4.0.5\"\n  resolved \"https://registry.yarnpkg.com/rehype-minify-whitespace/-/rehype-minify-whitespace-4.0.5.tgz#5b4781786116216f6d5d7ceadf84e2489dd7b3cd\"\n  integrity sha512-QC3Z+bZ5wbv+jGYQewpAAYhXhzuH/TVRx7z08rurBmh9AbG8Nu8oJnvs9LWj43Fd/C7UIhXoQ7Wddgt+ThWK5g==\n  dependencies:\n    hast-util-embedded \"^1.0.0\"\n    hast-util-is-element \"^1.0.0\"\n    hast-util-whitespace \"^1.0.4\"\n    unist-util-is \"^4.0.0\"\n\nrehype-raw@^5.0.0:\n  version \"5.1.0\"\n  resolved \"https://registry.yarnpkg.com/rehype-raw/-/rehype-raw-5.1.0.tgz#66d5e8d7188ada2d31bc137bc19a1000cf2c6b7e\"\n  integrity sha512-MDvHAb/5mUnif2R+0IPCYJU8WjHa9UzGtM/F4AVy5GixPlDZ1z3HacYy4xojDU+uBa+0X/3PIfyQI26/2ljJNA==\n  dependencies:\n    hast-util-raw \"^6.1.0\"\n\nrehype-sanitize@^4.0.0:\n  version \"4.0.0\"\n  resolved \"https://registry.yarnpkg.com/rehype-sanitize/-/rehype-sanitize-4.0.0.tgz#b5241cf66bcedc49cd4e924a5f7a252f00a151ad\"\n  integrity sha512-ZCr/iQRr4JeqPjun5i9CHHILVY7i45VnLu1CkkibDrSyFQ7dTLSvw8OIQpHhS4RSh9h/9GidxFw1bRb0LOxIag==\n  dependencies:\n    hast-util-sanitize \"^3.0.0\"\n\nrehype-shiki@^0.0.9:\n  version \"0.0.9\"\n  resolved \"https://registry.yarnpkg.com/rehype-shiki/-/rehype-shiki-0.0.9.tgz#539b0113064509a921897c3fd28409ae393908f5\"\n  integrity sha512-jyatOsBu0A8ZUnQig0QK0xq7CFZpeEukr0DZazg/zFLZATbdcbnIlO779pIW2El/C2S5An33sN2d4w2kmdS+Bw==\n  dependencies:\n    hast-util-to-string \"^1.0.4\"\n    shiki \"^0.1.7\"\n    shiki-languages \"^0.1.6\"\n    unist-builder \"^2.0.3\"\n    unist-util-visit \"^2.0.3\"\n\nrehype-stringify@^7.0.0:\n  version \"7.0.0\"\n  resolved \"https://registry.yarnpkg.com/rehype-stringify/-/rehype-stringify-7.0.0.tgz#abbb172b3a2784a5739394846f6092eefda0ae1f\"\n  integrity sha512-u3dQI7mIWN2X1H0MBFPva425HbkXgB+M39C9SM5leUS2kh5hHUn2SxQs2c2yZN5eIHipoLMojC0NP5e8fptxvQ==\n  dependencies:\n    hast-util-to-html \"^7.0.0\"\n    xtend \"^4.0.0\"\n\nremark-autolink-headings@^6.0.0:\n  version \"6.1.0\"\n  resolved \"https://registry.yarnpkg.com/remark-autolink-headings/-/remark-autolink-headings-6.1.0.tgz#45fa1f8860e0fc6b78bcbc4b0f5d5dd696170e04\"\n  integrity sha512-oeMSIfjaNboWPDVKahQAjF8iJ8hsz5aI8KFzAmmBdznir7zBvkgUjYE/BrpWvd02DCf/mSQ1IklznLkl3dVvZQ==\n  dependencies:\n    \"@types/hast\" \"^2.0.0\"\n    extend \"^3.0.0\"\n    unified \"^9.0.0\"\n    unist-util-visit \"^2.0.0\"\n\nremark-emoji@^2.1.0:\n  version \"2.2.0\"\n  resolved \"https://registry.yarnpkg.com/remark-emoji/-/remark-emoji-2.2.0.tgz#1c702090a1525da5b80e15a8f963ef2c8236cac7\"\n  integrity sha512-P3cj9s5ggsUvWw5fS2uzCHJMGuXYRb0NnZqYlNecewXt8QBU9n5vW3DUUKOhepS8F9CwdMx9B8a3i7pqFWAI5w==\n  dependencies:\n    emoticon \"^3.2.0\"\n    node-emoji \"^1.10.0\"\n    unist-util-visit \"^2.0.3\"\n\nremark-footnotes@2.0.0:\n  version \"2.0.0\"\n  resolved \"https://registry.yarnpkg.com/remark-footnotes/-/remark-footnotes-2.0.0.tgz#9001c4c2ffebba55695d2dd80ffb8b82f7e6303f\"\n  integrity sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==\n\nremark-footnotes@^1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/remark-footnotes/-/remark-footnotes-1.0.0.tgz#9c7a97f9a89397858a50033373020b1ea2aad011\"\n  integrity sha512-X9Ncj4cj3/CIvLI2Z9IobHtVi8FVdUrdJkCNaL9kdX8ohfsi18DXHsCVd/A7ssARBdccdDb5ODnt62WuEWaM/g==\n\nremark-github@^9.0.0:\n  version \"9.0.1\"\n  resolved \"https://registry.yarnpkg.com/remark-github/-/remark-github-9.0.1.tgz#82d05783754b9756ae63984a4afd5282318fbab1\"\n  integrity sha512-ITzuJ7MBC+uA2+gA4gIzxzBftoO02mWA788ZEJHF3UPSiN5corALwUCN8dpliGmu4VFRFjV8+mojdFAHryMbMg==\n  dependencies:\n    is-alphabetical \"^1.0.0\"\n    is-decimal \"^1.0.0\"\n    is-hexadecimal \"^1.0.0\"\n    mdast-util-to-string \"^1.0.0\"\n    unist-util-visit \"^2.0.0\"\n\nremark-html@^13.0.1:\n  version \"13.0.2\"\n  resolved \"https://registry.yarnpkg.com/remark-html/-/remark-html-13.0.2.tgz#de5f052749ff61fc904c9708c155c88a2e2655dc\"\n  integrity sha512-LhSRQ+3RKdBqB/RGesFWkNNfkGqprDUCwjq54SylfFeNyZby5kqOG8Dn/vYsRoM8htab6EWxFXCY6XIZvMoRiQ==\n  dependencies:\n    hast-util-sanitize \"^3.0.0\"\n    hast-util-to-html \"^7.0.0\"\n    mdast-util-to-hast \"^10.0.0\"\n\nremark-images@^2.0.0:\n  version \"2.0.0\"\n  resolved \"https://registry.yarnpkg.com/remark-images/-/remark-images-2.0.0.tgz#7621a406364c3a0a6e4250c3ee63909cc14a2388\"\n  integrity sha512-1X6XTBQZW489HSwU0k+aU3xAlVe3TyPll6N2Mt1onwINTIqcTk9QTC57937Z8NQDJ8h7gKGXy9d4TJug2dm8lg==\n  dependencies:\n    is-url \"^1.2.2\"\n    unist-util-is \"^4.0.0\"\n    unist-util-visit-parents \"^3.0.0\"\n\nremark-mdx@1.6.22:\n  version \"1.6.22\"\n  resolved \"https://registry.yarnpkg.com/remark-mdx/-/remark-mdx-1.6.22.tgz#06a8dab07dcfdd57f3373af7f86bd0e992108bbd\"\n  integrity sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==\n  dependencies:\n    \"@babel/core\" \"7.12.9\"\n    \"@babel/helper-plugin-utils\" \"7.10.4\"\n    \"@babel/plugin-proposal-object-rest-spread\" \"7.12.1\"\n    \"@babel/plugin-syntax-jsx\" \"7.12.1\"\n    \"@mdx-js/util\" \"1.6.22\"\n    is-alphabetical \"1.0.4\"\n    remark-parse \"8.0.3\"\n    unified \"9.2.0\"\n\nremark-parse@8.0.3, remark-parse@^8.0.0, remark-parse@^8.0.2:\n  version \"8.0.3\"\n  resolved \"https://registry.yarnpkg.com/remark-parse/-/remark-parse-8.0.3.tgz#9c62aa3b35b79a486454c690472906075f40c7e1\"\n  integrity sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==\n  dependencies:\n    ccount \"^1.0.0\"\n    collapse-white-space \"^1.0.2\"\n    is-alphabetical \"^1.0.0\"\n    is-decimal \"^1.0.0\"\n    is-whitespace-character \"^1.0.0\"\n    is-word-character \"^1.0.0\"\n    markdown-escapes \"^1.0.0\"\n    parse-entities \"^2.0.0\"\n    repeat-string \"^1.5.4\"\n    state-toggle \"^1.0.0\"\n    trim \"0.0.1\"\n    trim-trailing-lines \"^1.0.0\"\n    unherit \"^1.0.4\"\n    unist-util-remove-position \"^2.0.0\"\n    vfile-location \"^3.0.0\"\n    xtend \"^4.0.1\"\n\nremark-rehype@^6.0.0:\n  version \"6.0.0\"\n  resolved \"https://registry.yarnpkg.com/remark-rehype/-/remark-rehype-6.0.0.tgz#dcd340ebee412709a81b15a69f4ae474a38aa72a\"\n  integrity sha512-dt7cHCD2NbbmXoSnnNolk+MnWzylsOIEU07pyhZSM71Xy08xX07+yuCh+4rddyrB/a1hebygeteVEJieyCeDzg==\n  dependencies:\n    mdast-util-to-hast \"^8.0.0\"\n\nremark-slug@^6.0.0:\n  version \"6.1.0\"\n  resolved \"https://registry.yarnpkg.com/remark-slug/-/remark-slug-6.1.0.tgz#0503268d5f0c4ecb1f33315c00465ccdd97923ce\"\n  integrity sha512-oGCxDF9deA8phWvxFuyr3oSJsdyUAxMFbA0mZ7Y1Sas+emILtO+e5WutF9564gDsEN4IXaQXm5pFo6MLH+YmwQ==\n  dependencies:\n    github-slugger \"^1.0.0\"\n    mdast-util-to-string \"^1.0.0\"\n    unist-util-visit \"^2.0.0\"\n\nremark-squeeze-paragraphs@4.0.0:\n  version \"4.0.0\"\n  resolved \"https://registry.yarnpkg.com/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz#76eb0e085295131c84748c8e43810159c5653ead\"\n  integrity sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==\n  dependencies:\n    mdast-squeeze-paragraphs \"^4.0.0\"\n\nremark-stringify@^8.0.0:\n  version \"8.1.1\"\n  resolved \"https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-8.1.1.tgz#e2a9dc7a7bf44e46a155ec78996db896780d8ce5\"\n  integrity sha512-q4EyPZT3PcA3Eq7vPpT6bIdokXzFGp9i85igjmhRyXWmPs0Y6/d2FYwUNotKAWyLch7g0ASZJn/KHHcHZQ163A==\n  dependencies:\n    ccount \"^1.0.0\"\n    is-alphanumeric \"^1.0.0\"\n    is-decimal \"^1.0.0\"\n    is-whitespace-character \"^1.0.0\"\n    longest-streak \"^2.0.1\"\n    markdown-escapes \"^1.0.0\"\n    markdown-table \"^2.0.0\"\n    mdast-util-compact \"^2.0.0\"\n    parse-entities \"^2.0.0\"\n    repeat-string \"^1.5.4\"\n    state-toggle \"^1.0.0\"\n    stringify-entities \"^3.0.0\"\n    unherit \"^1.0.4\"\n    xtend \"^4.0.1\"\n\nremark-toc@^7.0.0:\n  version \"7.2.0\"\n  resolved \"https://registry.yarnpkg.com/remark-toc/-/remark-toc-7.2.0.tgz#1c5159e9091826150db14c97ac00c2ad5a7f1523\"\n  integrity sha512-ppHepvpbg7j5kPFmU5rzDC4k2GTcPDvWcxXyr/7BZzO1cBSPk0stKtEJdsgAyw2WHKPGxadcHIZRjb2/sHxjkg==\n  dependencies:\n    \"@types/unist\" \"^2.0.3\"\n    mdast-util-toc \"^5.0.0\"\n\nremark-unwrap-images@^2.0.0:\n  version \"2.1.0\"\n  resolved \"https://registry.yarnpkg.com/remark-unwrap-images/-/remark-unwrap-images-2.1.0.tgz#1dda005e8397c6f1792e4c8d38ed29602f9284cc\"\n  integrity sha512-DpM7oEIXNjS3aDQpzxWrTWhUJcd5b8LznbSZnSPi1Yc3fJgLYJlx9uzkj5ekyp01PSBbSbPM2jq4959mcIetvA==\n  dependencies:\n    hast-util-whitespace \"^1.0.0\"\n    unist-util-visit \"^2.0.0\"\n\nremark@^12.0.0:\n  version \"12.0.1\"\n  resolved \"https://registry.yarnpkg.com/remark/-/remark-12.0.1.tgz#f1ddf68db7be71ca2bad0a33cd3678b86b9c709f\"\n  integrity sha512-gS7HDonkdIaHmmP/+shCPejCEEW+liMp/t/QwmF0Xt47Rpuhl32lLtDV1uKWvGoq+kxr5jSgg5oAIpGuyULjUw==\n  dependencies:\n    remark-parse \"^8.0.0\"\n    remark-stringify \"^8.0.0\"\n    unified \"^9.0.0\"\n\nremove-trailing-separator@^1.0.1:\n  version \"1.1.0\"\n  resolved \"https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef\"\n  integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8=\n\nrepeat-element@^1.1.2:\n  version \"1.1.3\"\n  resolved \"https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce\"\n  integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==\n\nrepeat-string@^1.0.0, repeat-string@^1.5.2, repeat-string@^1.5.4, repeat-string@^1.6.1:\n  version \"1.6.1\"\n  resolved \"https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637\"\n  integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=\n\nrequest-promise-core@1.1.4:\n  version \"1.1.4\"\n  resolved \"https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f\"\n  integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==\n  dependencies:\n    lodash \"^4.17.19\"\n\nrequest-promise-native@^1.0.7:\n  version \"1.0.9\"\n  resolved \"https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28\"\n  integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==\n  dependencies:\n    request-promise-core \"1.1.4\"\n    stealthy-require \"^1.1.1\"\n    tough-cookie \"^2.3.3\"\n\nrequest@^2.87.0, request@^2.88.0:\n  version \"2.88.2\"\n  resolved \"https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3\"\n  integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==\n  dependencies:\n    aws-sign2 \"~0.7.0\"\n    aws4 \"^1.8.0\"\n    caseless \"~0.12.0\"\n    combined-stream \"~1.0.6\"\n    extend \"~3.0.2\"\n    forever-agent \"~0.6.1\"\n    form-data \"~2.3.2\"\n    har-validator \"~5.1.3\"\n    http-signature \"~1.2.0\"\n    is-typedarray \"~1.0.0\"\n    isstream \"~0.1.2\"\n    json-stringify-safe \"~5.0.1\"\n    mime-types \"~2.1.19\"\n    oauth-sign \"~0.9.0\"\n    performance-now \"^2.1.0\"\n    qs \"~6.5.2\"\n    safe-buffer \"^5.1.2\"\n    tough-cookie \"~2.5.0\"\n    tunnel-agent \"^0.6.0\"\n    uuid \"^3.3.2\"\n\nrequire-directory@^2.1.1:\n  version \"2.1.1\"\n  resolved \"https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42\"\n  integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=\n\nrequire-from-string@^2.0.2:\n  version \"2.0.2\"\n  resolved \"https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909\"\n  integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==\n\nrequire-main-filename@^1.0.1:\n  version \"1.0.1\"\n  resolved \"https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1\"\n  integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=\n\nrequire-main-filename@^2.0.0:\n  version \"2.0.0\"\n  resolved \"https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b\"\n  integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==\n\nresolve-cwd@^3.0.0:\n  version \"3.0.0\"\n  resolved \"https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d\"\n  integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==\n  dependencies:\n    resolve-from \"^5.0.0\"\n\nresolve-from@^3.0.0:\n  version \"3.0.0\"\n  resolved \"https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748\"\n  integrity sha1-six699nWiBvItuZTM17rywoYh0g=\n\nresolve-from@^4.0.0:\n  version \"4.0.0\"\n  resolved \"https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6\"\n  integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==\n\nresolve-from@^5.0.0:\n  version \"5.0.0\"\n  resolved \"https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69\"\n  integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==\n\nresolve-pkg-maps@^1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f\"\n  integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==\n\nresolve-url@^0.2.1:\n  version \"0.2.1\"\n  resolved \"https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a\"\n  integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=\n\nresolve@1.1.7:\n  version \"1.1.7\"\n  resolved \"https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b\"\n  integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=\n\nresolve@1.17.0, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.9.0:\n  version \"1.17.0\"\n  resolved \"https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444\"\n  integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==\n  dependencies:\n    path-parse \"^1.0.6\"\n\nresolve@^1.1.6, resolve@^1.11.0, resolve@^1.12.0, resolve@^1.13.1:\n  version \"1.13.1\"\n  resolved \"https://registry.yarnpkg.com/resolve/-/resolve-1.13.1.tgz#be0aa4c06acd53083505abb35f4d66932ab35d16\"\n  integrity sha512-CxqObCX8K8YtAhOBRg+lrcdn+LK+WYOS8tSjqSFbjtrI5PnS63QPhZl4+yKfrU9tdsbMu9Anr/amegT87M9Z6w==\n  dependencies:\n    path-parse \"^1.0.6\"\n\nresolve@^1.1.7, resolve@^1.22.1, resolve@^1.22.2:\n  version \"1.22.2\"\n  resolved \"https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f\"\n  integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==\n  dependencies:\n    is-core-module \"^2.11.0\"\n    path-parse \"^1.0.7\"\n    supports-preserve-symlinks-flag \"^1.0.0\"\n\nresolve@^1.10.0, resolve@^1.3.2, resolve@^1.5.0, resolve@^1.8.1:\n  version \"1.18.1\"\n  resolved \"https://registry.yarnpkg.com/resolve/-/resolve-1.18.1.tgz#018fcb2c5b207d2a6424aee361c5a266da8f4130\"\n  integrity sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA==\n  dependencies:\n    is-core-module \"^2.0.0\"\n    path-parse \"^1.0.6\"\n\nresolve@^2.0.0-next.4:\n  version \"2.0.0-next.4\"\n  resolved \"https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660\"\n  integrity sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==\n  dependencies:\n    is-core-module \"^2.9.0\"\n    path-parse \"^1.0.7\"\n    supports-preserve-symlinks-flag \"^1.0.0\"\n\nrestore-cursor@^2.0.0:\n  version \"2.0.0\"\n  resolved \"https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf\"\n  integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368=\n  dependencies:\n    onetime \"^2.0.0\"\n    signal-exit \"^3.0.2\"\n\nrestore-cursor@^3.1.0:\n  version \"3.1.0\"\n  resolved \"https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e\"\n  integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==\n  dependencies:\n    onetime \"^5.1.0\"\n    signal-exit \"^3.0.2\"\n\nret@~0.1.10:\n  version \"0.1.15\"\n  resolved \"https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc\"\n  integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==\n\nretry@0.12.0:\n  version \"0.12.0\"\n  resolved \"https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b\"\n  integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==\n\nretry@0.13.1:\n  version \"0.13.1\"\n  resolved \"https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658\"\n  integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==\n\nreusify@^1.0.4:\n  version \"1.0.4\"\n  resolved \"https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76\"\n  integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==\n\nrimraf@2.6.3:\n  version \"2.6.3\"\n  resolved \"https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab\"\n  integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==\n  dependencies:\n    glob \"^7.1.3\"\n\nrimraf@^2.5.4:\n  version \"2.7.1\"\n  resolved \"https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec\"\n  integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==\n  dependencies:\n    glob \"^7.1.3\"\n\nrimraf@^3.0.0:\n  version \"3.0.0\"\n  resolved \"https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.0.tgz#614176d4b3010b75e5c390eb0ee96f6dc0cebb9b\"\n  integrity sha512-NDGVxTsjqfunkds7CqsOiEnxln4Bo7Nddl3XhS4pXg5OzwkLqJ971ZVAAnB+DDLnF76N+VnDEiBHaVV8I06SUg==\n  dependencies:\n    glob \"^7.1.3\"\n\nrimraf@^3.0.2:\n  version \"3.0.2\"\n  resolved \"https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a\"\n  integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==\n  dependencies:\n    glob \"^7.1.3\"\n\nrimraf@~2.2.6:\n  version \"2.2.8\"\n  resolved \"https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582\"\n  integrity sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=\n\nrollup-plugin-sourcemaps@^0.6.2:\n  version \"0.6.2\"\n  resolved \"https://registry.yarnpkg.com/rollup-plugin-sourcemaps/-/rollup-plugin-sourcemaps-0.6.2.tgz#1eed5a3e07b833dc14c4cdb1e63b300d340f4a74\"\n  integrity sha512-9AwTKg3yRykwzemfLt71ySe0LvrAci+bpsOL1LaTYFk5BX4HF6X7DQfpHa74ANfSja3hyjiQkXCR8goSOnW//Q==\n  dependencies:\n    \"@rollup/pluginutils\" \"^3.0.9\"\n    source-map-resolve \"^0.6.0\"\n\nrollup-plugin-terser@^5.1.2:\n  version \"5.1.2\"\n  resolved \"https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-5.1.2.tgz#3e41256205cb75f196fc70d4634227d1002c255c\"\n  integrity sha512-sWKBCOS+vUkRtHtEiJPAf+WnBqk/C402fBD9AVHxSIXMqjsY7MnYWKYEUqGixtr0c8+1DjzUEPlNgOYQPVrS1g==\n  dependencies:\n    \"@babel/code-frame\" \"^7.0.0\"\n    jest-worker \"^24.6.0\"\n    rollup-pluginutils \"^2.8.1\"\n    serialize-javascript \"^1.7.0\"\n    terser \"^4.1.0\"\n\nrollup-plugin-typescript2@^0.27.3:\n  version \"0.27.3\"\n  resolved \"https://registry.yarnpkg.com/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.27.3.tgz#cd9455ac026d325b20c5728d2cc54a08a771b68b\"\n  integrity sha512-gmYPIFmALj9D3Ga1ZbTZAKTXq1JKlTQBtj299DXhqYz9cL3g/AQfUvbb2UhH+Nf++cCq941W2Mv7UcrcgLzJJg==\n  dependencies:\n    \"@rollup/pluginutils\" \"^3.1.0\"\n    find-cache-dir \"^3.3.1\"\n    fs-extra \"8.1.0\"\n    resolve \"1.17.0\"\n    tslib \"2.0.1\"\n\nrollup-pluginutils@^2.8.1:\n  version \"2.8.2\"\n  resolved \"https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e\"\n  integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==\n  dependencies:\n    estree-walker \"^0.6.1\"\n\nrollup@^1.32.1:\n  version \"1.32.1\"\n  resolved \"https://registry.yarnpkg.com/rollup/-/rollup-1.32.1.tgz#4480e52d9d9e2ae4b46ba0d9ddeaf3163940f9c4\"\n  integrity sha512-/2HA0Ec70TvQnXdzynFffkjA6XN+1e2pEv/uKS5Ulca40g2L7KuOE3riasHoNVHOsFD5KKZgDsMk1CP3Tw9s+A==\n  dependencies:\n    \"@types/estree\" \"*\"\n    \"@types/node\" \"*\"\n    acorn \"^7.1.0\"\n\nrsvp@^3.3.3:\n  version \"3.6.2\"\n  resolved \"https://registry.yarnpkg.com/rsvp/-/rsvp-3.6.2.tgz#2e96491599a96cde1b515d5674a8f7a91452926a\"\n  integrity sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==\n\nrsvp@^4.8.4:\n  version \"4.8.5\"\n  resolved \"https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734\"\n  integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==\n\nrun-applescript@^5.0.0:\n  version \"5.0.0\"\n  resolved \"https://registry.yarnpkg.com/run-applescript/-/run-applescript-5.0.0.tgz#e11e1c932e055d5c6b40d98374e0268d9b11899c\"\n  integrity sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==\n  dependencies:\n    execa \"^5.0.0\"\n\nrun-async@^2.2.0:\n  version \"2.4.1\"\n  resolved \"https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455\"\n  integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==\n\nrun-parallel@^1.1.9:\n  version \"1.1.9\"\n  resolved \"https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679\"\n  integrity sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==\n\nrx-lite-aggregates@^4.0.8:\n  version \"4.0.8\"\n  resolved \"https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be\"\n  integrity sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=\n  dependencies:\n    rx-lite \"*\"\n\nrx-lite@*, rx-lite@^4.0.8:\n  version \"4.0.8\"\n  resolved \"https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444\"\n  integrity sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=\n\nrxjs@^6.4.0:\n  version \"6.5.3\"\n  resolved \"https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.3.tgz#510e26317f4db91a7eb1de77d9dd9ba0a4899a3a\"\n  integrity sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA==\n  dependencies:\n    tslib \"^1.9.0\"\n\nrxjs@^6.6.2:\n  version \"6.6.3\"\n  resolved \"https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.3.tgz#8ca84635c4daa900c0d3967a6ee7ac60271ee552\"\n  integrity sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==\n  dependencies:\n    tslib \"^1.9.0\"\n\nsade@^1.4.2:\n  version \"1.7.0\"\n  resolved \"https://registry.yarnpkg.com/sade/-/sade-1.7.0.tgz#5f16f718c80c6ba61d9031da1e22c07e1479b5d2\"\n  integrity sha512-HSkPpZzN7q4EFN5PVW8nTfDn1rJZh4sKbPQqz33AXokIo6SMDeVJ3RA4e0ZASlnMK6PywEMZxKXudEn5dxSWew==\n  dependencies:\n    mri \"^1.1.0\"\n\nsafe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:\n  version \"5.1.2\"\n  resolved \"https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d\"\n  integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==\n\nsafe-buffer@5.2.1:\n  version \"5.2.1\"\n  resolved \"https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6\"\n  integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==\n\nsafe-buffer@^5.0.1, safe-buffer@^5.1.2:\n  version \"5.2.0\"\n  resolved \"https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519\"\n  integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==\n\nsafe-regex-test@^1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295\"\n  integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==\n  dependencies:\n    call-bind \"^1.0.2\"\n    get-intrinsic \"^1.1.3\"\n    is-regex \"^1.1.4\"\n\nsafe-regex@^1.1.0:\n  version \"1.1.0\"\n  resolved \"https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e\"\n  integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4=\n  dependencies:\n    ret \"~0.1.10\"\n\n\"safer-buffer@>= 2.1.2 < 3\", \"safer-buffer@>= 2.1.2 < 3.0.0\", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:\n  version \"2.1.2\"\n  resolved \"https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a\"\n  integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==\n\nsane@^3.0.0:\n  version \"3.1.0\"\n  resolved \"https://registry.yarnpkg.com/sane/-/sane-3.1.0.tgz#995193b7dc1445ef1fe41ddfca2faf9f111854c6\"\n  integrity sha512-G5GClRRxT1cELXfdAq7UKtUsv8q/ZC5k8lQGmjEm4HcAl3HzBy68iglyNCmw4+0tiXPCBZntslHlRhbnsSws+Q==\n  dependencies:\n    anymatch \"^2.0.0\"\n    capture-exit \"^1.2.0\"\n    exec-sh \"^0.2.0\"\n    execa \"^1.0.0\"\n    fb-watchman \"^2.0.0\"\n    micromatch \"^3.1.4\"\n    minimist \"^1.1.1\"\n    walker \"~1.0.5\"\n    watch \"~0.18.0\"\n  optionalDependencies:\n    fsevents \"^1.2.3\"\n\nsane@^4.0.3:\n  version \"4.1.0\"\n  resolved \"https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded\"\n  integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==\n  dependencies:\n    \"@cnakazawa/watch\" \"^1.0.3\"\n    anymatch \"^2.0.0\"\n    capture-exit \"^2.0.0\"\n    exec-sh \"^0.3.2\"\n    execa \"^1.0.0\"\n    fb-watchman \"^2.0.0\"\n    micromatch \"^3.1.4\"\n    minimist \"^1.1.1\"\n    walker \"~1.0.5\"\n\nsax@~1.1.1:\n  version \"1.1.6\"\n  resolved \"https://registry.yarnpkg.com/sax/-/sax-1.1.6.tgz#5d616be8a5e607d54e114afae55b7eaf2fcc3240\"\n  integrity sha1-XWFr6KXmB9VOEUr65Vt+ry/MMkA=\n\nsaxes@^3.1.9:\n  version \"3.1.11\"\n  resolved \"https://registry.yarnpkg.com/saxes/-/saxes-3.1.11.tgz#d59d1fd332ec92ad98a2e0b2ee644702384b1c5b\"\n  integrity sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==\n  dependencies:\n    xmlchars \"^2.1.1\"\n\nscheduler@^0.23.0:\n  version \"0.23.0\"\n  resolved \"https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe\"\n  integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==\n  dependencies:\n    loose-envify \"^1.1.0\"\n\nscroll-into-view-if-needed@^2.2.24:\n  version \"2.2.31\"\n  resolved \"https://registry.yarnpkg.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.31.tgz#d3c482959dc483e37962d1521254e3295d0d1587\"\n  integrity sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA==\n  dependencies:\n    compute-scroll-into-view \"^1.0.20\"\n\nsection-matter@^1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/section-matter/-/section-matter-1.0.0.tgz#e9041953506780ec01d59f292a19c7b850b84167\"\n  integrity sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==\n  dependencies:\n    extend-shallow \"^2.0.1\"\n    kind-of \"^6.0.0\"\n\nsemver-compare@^1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc\"\n  integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w=\n\nsemver-regex@^2.0.0:\n  version \"2.0.0\"\n  resolved \"https://registry.yarnpkg.com/semver-regex/-/semver-regex-2.0.0.tgz#a93c2c5844539a770233379107b38c7b4ac9d338\"\n  integrity sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==\n\nsemver-regex@^3.1.1:\n  version \"3.1.4\"\n  resolved \"https://registry.yarnpkg.com/semver-regex/-/semver-regex-3.1.4.tgz#13053c0d4aa11d070a2f2872b6b1e3ae1e1971b4\"\n  integrity sha512-6IiqeZNgq01qGf0TId0t3NvKzSvUsjcpdEO3AQNeIjR6A2+ckTnQlDpl4qu1bjRv0RzN3FP9hzFmws3lKqRWkA==\n\n\"semver@2 || 3 || 4 || 5\", semver@^5.0.3, semver@^5.1.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0:\n  version \"5.7.1\"\n  resolved \"https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7\"\n  integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==\n\nsemver@5.5.0:\n  version \"5.5.0\"\n  resolved \"https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab\"\n  integrity sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==\n\nsemver@6.x, semver@^6.0.0, semver@^6.1.2, semver@^6.3.0:\n  version \"6.3.0\"\n  resolved \"https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d\"\n  integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==\n\nsemver@7.0.0:\n  version \"7.0.0\"\n  resolved \"https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e\"\n  integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==\n\nsemver@^7.1.1:\n  version \"7.3.2\"\n  resolved \"https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938\"\n  integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==\n\nsemver@^7.2.1, semver@^7.3.7:\n  version \"7.5.1\"\n  resolved \"https://registry.yarnpkg.com/semver/-/semver-7.5.1.tgz#c90c4d631cf74720e46b21c1d37ea07edfab91ec\"\n  integrity sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==\n  dependencies:\n    lru-cache \"^6.0.0\"\n\nsemver@^7.5.3:\n  version \"7.7.3\"\n  resolved \"https://registry.yarnpkg.com/semver/-/semver-7.7.3.tgz#4b5f4143d007633a8dc671cd0a6ef9147b8bb946\"\n  integrity sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==\n\nsend@0.17.1:\n  version \"0.17.1\"\n  resolved \"https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8\"\n  integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==\n  dependencies:\n    debug \"2.6.9\"\n    depd \"~1.1.2\"\n    destroy \"~1.0.4\"\n    encodeurl \"~1.0.2\"\n    escape-html \"~1.0.3\"\n    etag \"~1.8.1\"\n    fresh \"0.5.2\"\n    http-errors \"~1.7.2\"\n    mime \"1.6.0\"\n    ms \"2.1.1\"\n    on-finished \"~2.3.0\"\n    range-parser \"~1.2.1\"\n    statuses \"~1.5.0\"\n\nsend@0.18.0:\n  version \"0.18.0\"\n  resolved \"https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be\"\n  integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==\n  dependencies:\n    debug \"2.6.9\"\n    depd \"2.0.0\"\n    destroy \"1.2.0\"\n    encodeurl \"~1.0.2\"\n    escape-html \"~1.0.3\"\n    etag \"~1.8.1\"\n    fresh \"0.5.2\"\n    http-errors \"2.0.0\"\n    mime \"1.6.0\"\n    ms \"2.1.3\"\n    on-finished \"2.4.1\"\n    range-parser \"~1.2.1\"\n    statuses \"2.0.1\"\n\nserialize-error@^2.1.0:\n  version \"2.1.0\"\n  resolved \"https://registry.yarnpkg.com/serialize-error/-/serialize-error-2.1.0.tgz#50b679d5635cdf84667bdc8e59af4e5b81d5f60a\"\n  integrity sha1-ULZ51WNc34Rme9yOWa9OW4HV9go=\n\nserialize-javascript@^1.7.0:\n  version \"1.9.1\"\n  resolved \"https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.9.1.tgz#cfc200aef77b600c47da9bb8149c943e798c2fdb\"\n  integrity sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A==\n\nserve-static@1.15.0:\n  version \"1.15.0\"\n  resolved \"https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540\"\n  integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==\n  dependencies:\n    encodeurl \"~1.0.2\"\n    escape-html \"~1.0.3\"\n    parseurl \"~1.3.3\"\n    send \"0.18.0\"\n\nserve-static@^1.13.1:\n  version \"1.14.1\"\n  resolved \"https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9\"\n  integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==\n  dependencies:\n    encodeurl \"~1.0.2\"\n    escape-html \"~1.0.3\"\n    parseurl \"~1.3.3\"\n    send \"0.17.1\"\n\nset-blocking@^2.0.0:\n  version \"2.0.0\"\n  resolved \"https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7\"\n  integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=\n\nset-value@^2.0.0, set-value@^2.0.1:\n  version \"2.0.1\"\n  resolved \"https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b\"\n  integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==\n  dependencies:\n    extend-shallow \"^2.0.1\"\n    is-extendable \"^0.1.1\"\n    is-plain-object \"^2.0.3\"\n    split-string \"^3.0.1\"\n\nsetimmediate@^1.0.5:\n  version \"1.0.5\"\n  resolved \"https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285\"\n  integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=\n\nsetprototypeof@1.1.1:\n  version \"1.1.1\"\n  resolved \"https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683\"\n  integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==\n\nsetprototypeof@1.2.0:\n  version \"1.2.0\"\n  resolved \"https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424\"\n  integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==\n\nshebang-command@^1.2.0:\n  version \"1.2.0\"\n  resolved \"https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea\"\n  integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=\n  dependencies:\n    shebang-regex \"^1.0.0\"\n\nshebang-command@^2.0.0:\n  version \"2.0.0\"\n  resolved \"https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea\"\n  integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==\n  dependencies:\n    shebang-regex \"^3.0.0\"\n\nshebang-regex@^1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3\"\n  integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=\n\nshebang-regex@^3.0.0:\n  version \"3.0.0\"\n  resolved \"https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172\"\n  integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==\n\nshell-quote@1.6.1:\n  version \"1.6.1\"\n  resolved \"https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767\"\n  integrity sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=\n  dependencies:\n    array-filter \"~0.0.0\"\n    array-map \"~0.0.0\"\n    array-reduce \"~0.0.0\"\n    jsonify \"~0.0.0\"\n\nshell-quote@^1.6.1:\n  version \"1.7.2\"\n  resolved \"https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2\"\n  integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==\n\nshelljs@0.8.5, shelljs@^0.8.3:\n  version \"0.8.5\"\n  resolved \"https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c\"\n  integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==\n  dependencies:\n    glob \"^7.0.0\"\n    interpret \"^1.0.0\"\n    rechoir \"^0.6.2\"\n\nshellwords@^0.1.1:\n  version \"0.1.1\"\n  resolved \"https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b\"\n  integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==\n\nshiki-languages@^0.1.6:\n  version \"0.1.6\"\n  resolved \"https://registry.yarnpkg.com/shiki-languages/-/shiki-languages-0.1.6.tgz#4a71eba9d345de4780fc46994e4d073356573e3e\"\n  integrity sha512-rMu+z97UCPKMtPBkzLBItReawXnlOgXZmELFwI/s3ATxd9VzJgSQTtQW/hmW5EYCrzF2kAUjoOnn+50/MPWjgQ==\n  dependencies:\n    vscode-textmate \"https://github.com/octref/vscode-textmate\"\n\nshiki-themes@^0.1.7:\n  version \"0.1.7\"\n  resolved \"https://registry.yarnpkg.com/shiki-themes/-/shiki-themes-0.1.7.tgz#edaf2027b31bb3645dd044f66a76d4cdb2599b77\"\n  integrity sha512-mpF/VynGun/uNdjOIPnyPv4boN/QYDh+zE94SavgvmatMHkXXjZhls19Xv9rcRwuxUrWfXjaPkEZj7VAk94GGg==\n  dependencies:\n    json5 \"^2.1.0\"\n    vscode-textmate \"https://github.com/octref/vscode-textmate\"\n\nshiki@^0.1.7:\n  version \"0.1.7\"\n  resolved \"https://registry.yarnpkg.com/shiki/-/shiki-0.1.7.tgz#138eed000063a80e44eedc800381977c690271e5\"\n  integrity sha512-9J0PhAdXv6tt3FZf82oKZkcV8c8NRZYJEOH0eIrrxfcyNzMuB79tJFGFSI3OhhiYFL5namob/Ii0Ri4iDoF15A==\n  dependencies:\n    onigasm \"^2.2.1\"\n    shiki-languages \"^0.1.6\"\n    shiki-themes \"^0.1.7\"\n    vscode-textmate \"https://github.com/octref/vscode-textmate\"\n\nside-channel@^1.0.4:\n  version \"1.0.4\"\n  resolved \"https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf\"\n  integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==\n  dependencies:\n    call-bind \"^1.0.0\"\n    get-intrinsic \"^1.0.2\"\n    object-inspect \"^1.9.0\"\n\nsignal-exit@^3.0.0, signal-exit@^3.0.2:\n  version \"3.0.3\"\n  resolved \"https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c\"\n  integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==\n\nsignal-exit@^3.0.3, signal-exit@^3.0.7:\n  version \"3.0.7\"\n  resolved \"https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9\"\n  integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==\n\nsignal-exit@^4.0.1:\n  version \"4.1.0\"\n  resolved \"https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04\"\n  integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==\n\nsimple-plist@^1.0.0:\n  version \"1.1.1\"\n  resolved \"https://registry.yarnpkg.com/simple-plist/-/simple-plist-1.1.1.tgz#54367ca28bc5996a982c325c1c4a4c1a05f4047c\"\n  integrity sha512-pKMCVKvZbZTsqYR6RKgLfBHkh2cV89GXcA/0CVPje3sOiNOnXA8+rp/ciAMZ7JRaUdLzlEM6JFfUn+fS6Nt3hg==\n  dependencies:\n    bplist-creator \"0.0.8\"\n    bplist-parser \"0.2.0\"\n    plist \"^3.0.1\"\n\nsisteransi@^1.0.3:\n  version \"1.0.4\"\n  resolved \"https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.4.tgz#386713f1ef688c7c0304dc4c0632898941cad2e3\"\n  integrity sha512-/ekMoM4NJ59ivGSfKapeG+FWtrmWvA1p6FBZwXrqojw90vJu8lBmrTxCMuBCydKtkaUe2zt4PlxeTKpjwMbyig==\n\nslash@^2.0.0:\n  version \"2.0.0\"\n  resolved \"https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44\"\n  integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==\n\nslash@^3.0.0:\n  version \"3.0.0\"\n  resolved \"https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634\"\n  integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==\n\nslash@^4.0.0:\n  version \"4.0.0\"\n  resolved \"https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7\"\n  integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==\n\nslice-ansi@^2.1.0:\n  version \"2.1.0\"\n  resolved \"https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636\"\n  integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==\n  dependencies:\n    ansi-styles \"^3.2.0\"\n    astral-regex \"^1.0.0\"\n    is-fullwidth-code-point \"^2.0.0\"\n\nslice-ansi@^3.0.0:\n  version \"3.0.0\"\n  resolved \"https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787\"\n  integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==\n  dependencies:\n    ansi-styles \"^4.0.0\"\n    astral-regex \"^2.0.0\"\n    is-fullwidth-code-point \"^3.0.0\"\n\nslice-ansi@^4.0.0:\n  version \"4.0.0\"\n  resolved \"https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b\"\n  integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==\n  dependencies:\n    ansi-styles \"^4.0.0\"\n    astral-regex \"^2.0.0\"\n    is-fullwidth-code-point \"^3.0.0\"\n\nslide@^1.1.5:\n  version \"1.1.6\"\n  resolved \"https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707\"\n  integrity sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=\n\nsnapdragon-node@^2.0.1:\n  version \"2.1.1\"\n  resolved \"https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b\"\n  integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==\n  dependencies:\n    define-property \"^1.0.0\"\n    isobject \"^3.0.0\"\n    snapdragon-util \"^3.0.1\"\n\nsnapdragon-util@^3.0.1:\n  version \"3.0.1\"\n  resolved \"https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2\"\n  integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==\n  dependencies:\n    kind-of \"^3.2.0\"\n\nsnapdragon@^0.8.1:\n  version \"0.8.2\"\n  resolved \"https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d\"\n  integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==\n  dependencies:\n    base \"^0.11.1\"\n    debug \"^2.2.0\"\n    define-property \"^0.2.5\"\n    extend-shallow \"^2.0.1\"\n    map-cache \"^0.2.2\"\n    source-map \"^0.5.6\"\n    source-map-resolve \"^0.5.0\"\n    use \"^3.1.0\"\n\nsource-map-js@^1.0.2:\n  version \"1.0.2\"\n  resolved \"https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c\"\n  integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==\n\nsource-map-resolve@^0.5.0:\n  version \"0.5.3\"\n  resolved \"https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a\"\n  integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==\n  dependencies:\n    atob \"^2.1.2\"\n    decode-uri-component \"^0.2.0\"\n    resolve-url \"^0.2.1\"\n    source-map-url \"^0.4.0\"\n    urix \"^0.1.0\"\n\nsource-map-resolve@^0.6.0:\n  version \"0.6.0\"\n  resolved \"https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.6.0.tgz#3d9df87e236b53f16d01e58150fc7711138e5ed2\"\n  integrity sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==\n  dependencies:\n    atob \"^2.1.2\"\n    decode-uri-component \"^0.2.0\"\n\nsource-map-support@^0.5.16:\n  version \"0.5.19\"\n  resolved \"https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61\"\n  integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==\n  dependencies:\n    buffer-from \"^1.0.0\"\n    source-map \"^0.6.0\"\n\nsource-map-support@^0.5.6, source-map-support@~0.5.12:\n  version \"0.5.16\"\n  resolved \"https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042\"\n  integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==\n  dependencies:\n    buffer-from \"^1.0.0\"\n    source-map \"^0.6.0\"\n\nsource-map-url@^0.4.0:\n  version \"0.4.0\"\n  resolved \"https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3\"\n  integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=\n\nsource-map@^0.5.0, source-map@^0.5.6:\n  version \"0.5.7\"\n  resolved \"https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc\"\n  integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=\n\nsource-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1:\n  version \"0.6.1\"\n  resolved \"https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263\"\n  integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==\n\nsource-map@^0.7.3:\n  version \"0.7.3\"\n  resolved \"https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383\"\n  integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==\n\nsourcemap-codec@^1.4.4:\n  version \"1.4.6\"\n  resolved \"https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.6.tgz#e30a74f0402bad09807640d39e971090a08ce1e9\"\n  integrity sha512-1ZooVLYFxC448piVLBbtOxFcXwnymH9oUF8nRd3CuYDVvkRBxRl6pB4Mtas5a4drtL+E8LDgFkQNcgIw6tc8Hg==\n\nsourcemap-codec@^1.4.8:\n  version \"1.4.8\"\n  resolved \"https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4\"\n  integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==\n\nspace-separated-tokens@^1.0.0:\n  version \"1.1.5\"\n  resolved \"https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz#85f32c3d10d9682007e917414ddc5c26d1aa6899\"\n  integrity sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==\n\nspawndamnit@^3.0.1:\n  version \"3.0.1\"\n  resolved \"https://registry.yarnpkg.com/spawndamnit/-/spawndamnit-3.0.1.tgz#44410235d3dc4e21f8e4f740ae3266e4486c2aed\"\n  integrity sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==\n  dependencies:\n    cross-spawn \"^7.0.5\"\n    signal-exit \"^4.0.1\"\n\nspdx-correct@^3.0.0:\n  version \"3.1.1\"\n  resolved \"https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9\"\n  integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==\n  dependencies:\n    spdx-expression-parse \"^3.0.0\"\n    spdx-license-ids \"^3.0.0\"\n\nspdx-exceptions@^2.1.0:\n  version \"2.3.0\"\n  resolved \"https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d\"\n  integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==\n\nspdx-expression-parse@^3.0.0:\n  version \"3.0.1\"\n  resolved \"https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679\"\n  integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==\n  dependencies:\n    spdx-exceptions \"^2.1.0\"\n    spdx-license-ids \"^3.0.0\"\n\nspdx-license-ids@^3.0.0:\n  version \"3.0.6\"\n  resolved \"https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz#c80757383c28abf7296744998cbc106ae8b854ce\"\n  integrity sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw==\n\nsplit-string@^3.0.1, split-string@^3.0.2:\n  version \"3.1.0\"\n  resolved \"https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2\"\n  integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==\n  dependencies:\n    extend-shallow \"^3.0.0\"\n\nsprintf-js@~1.0.2:\n  version \"1.0.3\"\n  resolved \"https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c\"\n  integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=\n\nsshpk@^1.7.0:\n  version \"1.16.1\"\n  resolved \"https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877\"\n  integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==\n  dependencies:\n    asn1 \"~0.2.3\"\n    assert-plus \"^1.0.0\"\n    bcrypt-pbkdf \"^1.0.0\"\n    dashdash \"^1.12.0\"\n    ecc-jsbn \"~0.1.1\"\n    getpass \"^0.1.1\"\n    jsbn \"~0.1.0\"\n    safer-buffer \"^2.0.2\"\n    tweetnacl \"~0.14.0\"\n\nstack-utils@^1.0.1:\n  version \"1.0.2\"\n  resolved \"https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8\"\n  integrity sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==\n\nstacktrace-parser@0.1.4:\n  version \"0.1.4\"\n  resolved \"https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.4.tgz#01397922e5f62ecf30845522c95c4fe1d25e7d4e\"\n  integrity sha1-ATl5IuX2Ls8whFUiyVxP4dJefU4=\n\nstate-toggle@^1.0.0:\n  version \"1.0.3\"\n  resolved \"https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.3.tgz#e123b16a88e143139b09c6852221bc9815917dfe\"\n  integrity sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==\n\nstatic-extend@^0.1.1:\n  version \"0.1.2\"\n  resolved \"https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6\"\n  integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=\n  dependencies:\n    define-property \"^0.2.5\"\n    object-copy \"^0.1.0\"\n\nstatuses@2.0.1:\n  version \"2.0.1\"\n  resolved \"https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63\"\n  integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==\n\n\"statuses@>= 1.5.0 < 2\", statuses@~1.5.0:\n  version \"1.5.0\"\n  resolved \"https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c\"\n  integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=\n\nstealthy-require@^1.1.1:\n  version \"1.1.1\"\n  resolved \"https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b\"\n  integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=\n\nstop-iteration-iterator@^1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz#6a60be0b4ee757d1ed5254858ec66b10c49285e4\"\n  integrity sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==\n  dependencies:\n    internal-slot \"^1.0.4\"\n\nstream-buffers@~2.2.0:\n  version \"2.2.0\"\n  resolved \"https://registry.yarnpkg.com/stream-buffers/-/stream-buffers-2.2.0.tgz#91d5f5130d1cef96dcfa7f726945188741d09ee4\"\n  integrity sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ=\n\nstreamsearch@^1.1.0:\n  version \"1.1.0\"\n  resolved \"https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764\"\n  integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==\n\nstring-argv@0.3.1:\n  version \"0.3.1\"\n  resolved \"https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da\"\n  integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==\n\nstring-length@^3.1.0:\n  version \"3.1.0\"\n  resolved \"https://registry.yarnpkg.com/string-length/-/string-length-3.1.0.tgz#107ef8c23456e187a8abd4a61162ff4ac6e25837\"\n  integrity sha512-Ttp5YvkGm5v9Ijagtaz1BnN+k9ObpvS0eIBblPMp2YWL8FBmi9qblQ9fexc2k/CXFgrTIteU3jAw3payCnwSTA==\n  dependencies:\n    astral-regex \"^1.0.0\"\n    strip-ansi \"^5.2.0\"\n\nstring-width@^1.0.1:\n  version \"1.0.2\"\n  resolved \"https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3\"\n  integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=\n  dependencies:\n    code-point-at \"^1.0.0\"\n    is-fullwidth-code-point \"^1.0.0\"\n    strip-ansi \"^3.0.0\"\n\nstring-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1:\n  version \"2.1.1\"\n  resolved \"https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e\"\n  integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==\n  dependencies:\n    is-fullwidth-code-point \"^2.0.0\"\n    strip-ansi \"^4.0.0\"\n\nstring-width@^3.0.0:\n  version \"3.1.0\"\n  resolved \"https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961\"\n  integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==\n  dependencies:\n    emoji-regex \"^7.0.1\"\n    is-fullwidth-code-point \"^2.0.0\"\n    strip-ansi \"^5.1.0\"\n\nstring-width@^4.1.0, string-width@^4.2.0:\n  version \"4.2.0\"\n  resolved \"https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5\"\n  integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==\n  dependencies:\n    emoji-regex \"^8.0.0\"\n    is-fullwidth-code-point \"^3.0.0\"\n    strip-ansi \"^6.0.0\"\n\nstring-width@^4.2.3:\n  version \"4.2.3\"\n  resolved \"https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010\"\n  integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==\n  dependencies:\n    emoji-regex \"^8.0.0\"\n    is-fullwidth-code-point \"^3.0.0\"\n    strip-ansi \"^6.0.1\"\n\nstring.prototype.matchall@^4.0.8:\n  version \"4.0.8\"\n  resolved \"https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3\"\n  integrity sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==\n  dependencies:\n    call-bind \"^1.0.2\"\n    define-properties \"^1.1.4\"\n    es-abstract \"^1.20.4\"\n    get-intrinsic \"^1.1.3\"\n    has-symbols \"^1.0.3\"\n    internal-slot \"^1.0.3\"\n    regexp.prototype.flags \"^1.4.3\"\n    side-channel \"^1.0.4\"\n\nstring.prototype.trim@^1.2.7:\n  version \"1.2.7\"\n  resolved \"https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz#a68352740859f6893f14ce3ef1bb3037f7a90533\"\n  integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==\n  dependencies:\n    call-bind \"^1.0.2\"\n    define-properties \"^1.1.4\"\n    es-abstract \"^1.20.4\"\n\nstring.prototype.trimend@^1.0.1:\n  version \"1.0.1\"\n  resolved \"https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913\"\n  integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==\n  dependencies:\n    define-properties \"^1.1.3\"\n    es-abstract \"^1.17.5\"\n\nstring.prototype.trimend@^1.0.6:\n  version \"1.0.6\"\n  resolved \"https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533\"\n  integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==\n  dependencies:\n    call-bind \"^1.0.2\"\n    define-properties \"^1.1.4\"\n    es-abstract \"^1.20.4\"\n\nstring.prototype.trimleft@^2.1.0:\n  version \"2.1.0\"\n  resolved \"https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz#6cc47f0d7eb8d62b0f3701611715a3954591d634\"\n  integrity sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==\n  dependencies:\n    define-properties \"^1.1.3\"\n    function-bind \"^1.1.1\"\n\nstring.prototype.trimright@^2.1.0:\n  version \"2.1.0\"\n  resolved \"https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz#669d164be9df9b6f7559fa8e89945b168a5a6c58\"\n  integrity sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==\n  dependencies:\n    define-properties \"^1.1.3\"\n    function-bind \"^1.1.1\"\n\nstring.prototype.trimstart@^1.0.1:\n  version \"1.0.1\"\n  resolved \"https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54\"\n  integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==\n  dependencies:\n    define-properties \"^1.1.3\"\n    es-abstract \"^1.17.5\"\n\nstring.prototype.trimstart@^1.0.6:\n  version \"1.0.6\"\n  resolved \"https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4\"\n  integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==\n  dependencies:\n    call-bind \"^1.0.2\"\n    define-properties \"^1.1.4\"\n    es-abstract \"^1.20.4\"\n\nstring_decoder@~1.1.1:\n  version \"1.1.1\"\n  resolved \"https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8\"\n  integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==\n  dependencies:\n    safe-buffer \"~5.1.0\"\n\nstringify-entities@^3.0.0, stringify-entities@^3.0.1:\n  version \"3.1.0\"\n  resolved \"https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-3.1.0.tgz#b8d3feac256d9ffcc9fa1fefdcf3ca70576ee903\"\n  integrity sha512-3FP+jGMmMV/ffZs86MoghGqAoqXAdxLrJP4GUdrDN1aIScYih5tuIO3eF4To5AJZ79KDZ8Fpdy7QJnK8SsL1Vg==\n  dependencies:\n    character-entities-html4 \"^1.0.0\"\n    character-entities-legacy \"^1.0.0\"\n    xtend \"^4.0.0\"\n\nstringify-object@^3.3.0:\n  version \"3.3.0\"\n  resolved \"https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629\"\n  integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==\n  dependencies:\n    get-own-enumerable-property-symbols \"^3.0.0\"\n    is-obj \"^1.0.1\"\n    is-regexp \"^1.0.0\"\n\nstrip-ansi@^3.0.0, strip-ansi@^3.0.1:\n  version \"3.0.1\"\n  resolved \"https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf\"\n  integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=\n  dependencies:\n    ansi-regex \"^2.0.0\"\n\nstrip-ansi@^4.0.0:\n  version \"4.0.0\"\n  resolved \"https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f\"\n  integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8=\n  dependencies:\n    ansi-regex \"^3.0.0\"\n\nstrip-ansi@^5.1.0, strip-ansi@^5.2.0:\n  version \"5.2.0\"\n  resolved \"https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae\"\n  integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==\n  dependencies:\n    ansi-regex \"^4.1.0\"\n\nstrip-ansi@^6.0.0:\n  version \"6.0.0\"\n  resolved \"https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532\"\n  integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==\n  dependencies:\n    ansi-regex \"^5.0.0\"\n\nstrip-ansi@^6.0.1:\n  version \"6.0.1\"\n  resolved \"https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9\"\n  integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==\n  dependencies:\n    ansi-regex \"^5.0.1\"\n\nstrip-bom-string@^1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92\"\n  integrity sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==\n\nstrip-bom@^3.0.0:\n  version \"3.0.0\"\n  resolved \"https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3\"\n  integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=\n\nstrip-bom@^4.0.0:\n  version \"4.0.0\"\n  resolved \"https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878\"\n  integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==\n\nstrip-eof@^1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf\"\n  integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=\n\nstrip-final-newline@^2.0.0:\n  version \"2.0.0\"\n  resolved \"https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad\"\n  integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==\n\nstrip-final-newline@^3.0.0:\n  version \"3.0.0\"\n  resolved \"https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd\"\n  integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==\n\nstrip-json-comments@^3.0.1:\n  version \"3.0.1\"\n  resolved \"https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7\"\n  integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==\n\nstrip-json-comments@^3.1.0, strip-json-comments@^3.1.1:\n  version \"3.1.1\"\n  resolved \"https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006\"\n  integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==\n\nstyle-to-object@0.3.0, style-to-object@^0.3.0:\n  version \"0.3.0\"\n  resolved \"https://registry.yarnpkg.com/style-to-object/-/style-to-object-0.3.0.tgz#b1b790d205991cc783801967214979ee19a76e46\"\n  integrity sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==\n  dependencies:\n    inline-style-parser \"0.1.1\"\n\nstyle-value-types@^3.1.6, style-value-types@^3.1.7:\n  version \"3.2.0\"\n  resolved \"https://registry.yarnpkg.com/style-value-types/-/style-value-types-3.2.0.tgz#eb89cab1340823fa7876f3e289d29d99c92111bb\"\n  integrity sha512-ih0mGsrYYmVvdDi++/66O6BaQPRPRMQHoZevNNdMMcPlP/cH28Rnfsqf1UEba/Bwfuw9T8BmIMwbGdzsPwQKrQ==\n  dependencies:\n    hey-listen \"^1.0.8\"\n    tslib \"^1.10.0\"\n\nstyled-jsx@5.1.1:\n  version \"5.1.1\"\n  resolved \"https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.1.1.tgz#839a1c3aaacc4e735fed0781b8619ea5d0009d1f\"\n  integrity sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==\n  dependencies:\n    client-only \"0.0.1\"\n\nstylefire@^7.0.2:\n  version \"7.0.3\"\n  resolved \"https://registry.yarnpkg.com/stylefire/-/stylefire-7.0.3.tgz#9120ecbb084111788e0ddaa04074799750f20d1d\"\n  integrity sha512-Q0l7NSeFz/OkX+o6/7Zg3VZxSAZeQzQpYomWmIpOehFM/rJNMSLVX5fgg6Q48ut2ETNKwdhm97mPNU643EBCoQ==\n  dependencies:\n    \"@popmotion/popcorn\" \"^0.4.4\"\n    framesync \"^4.0.0\"\n    hey-listen \"^1.0.8\"\n    style-value-types \"^3.1.7\"\n    tslib \"^1.10.0\"\n\nsucrase@^3.32.0:\n  version \"3.32.0\"\n  resolved \"https://registry.yarnpkg.com/sucrase/-/sucrase-3.32.0.tgz#c4a95e0f1e18b6847127258a75cf360bc568d4a7\"\n  integrity sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==\n  dependencies:\n    \"@jridgewell/gen-mapping\" \"^0.3.2\"\n    commander \"^4.0.0\"\n    glob \"7.1.6\"\n    lines-and-columns \"^1.1.6\"\n    mz \"^2.7.0\"\n    pirates \"^4.0.1\"\n    ts-interface-checker \"^0.1.9\"\n\nsupports-color@^2.0.0:\n  version \"2.0.0\"\n  resolved \"https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7\"\n  integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=\n\nsupports-color@^5.3.0:\n  version \"5.5.0\"\n  resolved \"https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f\"\n  integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==\n  dependencies:\n    has-flag \"^3.0.0\"\n\nsupports-color@^6.1.0:\n  version \"6.1.0\"\n  resolved \"https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3\"\n  integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==\n  dependencies:\n    has-flag \"^3.0.0\"\n\nsupports-color@^7.0.0, supports-color@^7.1.0:\n  version \"7.2.0\"\n  resolved \"https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da\"\n  integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==\n  dependencies:\n    has-flag \"^4.0.0\"\n\nsupports-hyperlinks@^2.0.0:\n  version \"2.1.0\"\n  resolved \"https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz#f663df252af5f37c5d49bbd7eeefa9e0b9e59e47\"\n  integrity sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA==\n  dependencies:\n    has-flag \"^4.0.0\"\n    supports-color \"^7.0.0\"\n\nsupports-preserve-symlinks-flag@^1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09\"\n  integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==\n\nsymbol-tree@^3.2.2:\n  version \"3.2.4\"\n  resolved \"https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2\"\n  integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==\n\nsynckit@^0.8.5:\n  version \"0.8.5\"\n  resolved \"https://registry.yarnpkg.com/synckit/-/synckit-0.8.5.tgz#b7f4358f9bb559437f9f167eb6bc46b3c9818fa3\"\n  integrity sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==\n  dependencies:\n    \"@pkgr/utils\" \"^2.3.1\"\n    tslib \"^2.5.0\"\n\ntable@^5.2.3:\n  version \"5.4.6\"\n  resolved \"https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e\"\n  integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==\n  dependencies:\n    ajv \"^6.10.2\"\n    lodash \"^4.17.14\"\n    slice-ansi \"^2.1.0\"\n    string-width \"^3.0.0\"\n\ntable@^6.0.9:\n  version \"6.8.1\"\n  resolved \"https://registry.yarnpkg.com/table/-/table-6.8.1.tgz#ea2b71359fe03b017a5fbc296204471158080bdf\"\n  integrity sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==\n  dependencies:\n    ajv \"^8.0.1\"\n    lodash.truncate \"^4.4.2\"\n    slice-ansi \"^4.0.0\"\n    string-width \"^4.2.3\"\n    strip-ansi \"^6.0.1\"\n\ntailwindcss@^3.2.6:\n  version \"3.3.2\"\n  resolved \"https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.3.2.tgz#2f9e35d715fdf0bbf674d90147a0684d7054a2d3\"\n  integrity sha512-9jPkMiIBXvPc2KywkraqsUfbfj+dHDb+JPWtSJa9MLFdrPyazI7q6WX2sUrm7R9eVR7qqv3Pas7EvQFzxKnI6w==\n  dependencies:\n    \"@alloc/quick-lru\" \"^5.2.0\"\n    arg \"^5.0.2\"\n    chokidar \"^3.5.3\"\n    didyoumean \"^1.2.2\"\n    dlv \"^1.1.3\"\n    fast-glob \"^3.2.12\"\n    glob-parent \"^6.0.2\"\n    is-glob \"^4.0.3\"\n    jiti \"^1.18.2\"\n    lilconfig \"^2.1.0\"\n    micromatch \"^4.0.5\"\n    normalize-path \"^3.0.0\"\n    object-hash \"^3.0.0\"\n    picocolors \"^1.0.0\"\n    postcss \"^8.4.23\"\n    postcss-import \"^15.1.0\"\n    postcss-js \"^4.0.1\"\n    postcss-load-config \"^4.0.1\"\n    postcss-nested \"^6.0.1\"\n    postcss-selector-parser \"^6.0.11\"\n    postcss-value-parser \"^4.2.0\"\n    resolve \"^1.22.2\"\n    sucrase \"^3.32.0\"\n\ntapable@^2.2.0:\n  version \"2.2.1\"\n  resolved \"https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0\"\n  integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==\n\ntemp@0.8.3:\n  version \"0.8.3\"\n  resolved \"https://registry.yarnpkg.com/temp/-/temp-0.8.3.tgz#e0c6bc4d26b903124410e4fed81103014dfc1f59\"\n  integrity sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k=\n  dependencies:\n    os-tmpdir \"^1.0.0\"\n    rimraf \"~2.2.6\"\n\nterm-size@^2.1.0:\n  version \"2.2.0\"\n  resolved \"https://registry.yarnpkg.com/term-size/-/term-size-2.2.0.tgz#1f16adedfe9bdc18800e1776821734086fcc6753\"\n  integrity sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw==\n\nterminal-link@^2.0.0:\n  version \"2.1.1\"\n  resolved \"https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994\"\n  integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==\n  dependencies:\n    ansi-escapes \"^4.2.1\"\n    supports-hyperlinks \"^2.0.0\"\n\nterser@^4.1.0:\n  version \"4.4.2\"\n  resolved \"https://registry.yarnpkg.com/terser/-/terser-4.4.2.tgz#448fffad0245f4c8a277ce89788b458bfd7706e8\"\n  integrity sha512-Uufrsvhj9O1ikwgITGsZ5EZS6qPokUOkCegS7fYOdGTv+OA90vndUbU6PEjr5ePqHfNUbGyMO7xyIZv2MhsALQ==\n  dependencies:\n    commander \"^2.20.0\"\n    source-map \"~0.6.1\"\n    source-map-support \"~0.5.12\"\n\ntest-exclude@^6.0.0:\n  version \"6.0.0\"\n  resolved \"https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e\"\n  integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==\n  dependencies:\n    \"@istanbuljs/schema\" \"^0.1.2\"\n    glob \"^7.1.4\"\n    minimatch \"^3.0.4\"\n\ntext-table@^0.2.0:\n  version \"0.2.0\"\n  resolved \"https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4\"\n  integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=\n\nthenify-all@^1.0.0:\n  version \"1.6.0\"\n  resolved \"https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726\"\n  integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==\n  dependencies:\n    thenify \">= 3.1.0 < 4\"\n\n\"thenify@>= 3.1.0 < 4\":\n  version \"3.3.1\"\n  resolved \"https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f\"\n  integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==\n  dependencies:\n    any-promise \"^1.0.0\"\n\nthroat@^4.1.0:\n  version \"4.1.0\"\n  resolved \"https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a\"\n  integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=\n\nthroat@^5.0.0:\n  version \"5.0.0\"\n  resolved \"https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b\"\n  integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==\n\nthrough2@^2.0.0:\n  version \"2.0.5\"\n  resolved \"https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd\"\n  integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==\n  dependencies:\n    readable-stream \"~2.3.6\"\n    xtend \"~4.0.1\"\n\nthrough@^2.3.6, through@^2.3.8, through@~2.3.4:\n  version \"2.3.8\"\n  resolved \"https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5\"\n  integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=\n\ntime-stamp@^1.0.0:\n  version \"1.1.0\"\n  resolved \"https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3\"\n  integrity sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=\n\ntiny-glob@^0.2.6:\n  version \"0.2.6\"\n  resolved \"https://registry.yarnpkg.com/tiny-glob/-/tiny-glob-0.2.6.tgz#9e056e169d9788fe8a734dfa1ff02e9b92ed7eda\"\n  integrity sha512-A7ewMqPu1B5PWwC3m7KVgAu96Ch5LA0w4SnEN/LbDREj/gAD0nPWboRbn8YoP9ISZXqeNAlMvKSKoEuhcfK3Pw==\n  dependencies:\n    globalyzer \"^0.1.0\"\n    globrex \"^0.1.1\"\n\ntiny-warning@^1.0.2:\n  version \"1.0.3\"\n  resolved \"https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754\"\n  integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==\n\ntitleize@^3.0.0:\n  version \"3.0.0\"\n  resolved \"https://registry.yarnpkg.com/titleize/-/titleize-3.0.0.tgz#71c12eb7fdd2558aa8a44b0be83b8a76694acd53\"\n  integrity sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==\n\ntmp@^0.0.33:\n  version \"0.0.33\"\n  resolved \"https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9\"\n  integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==\n  dependencies:\n    os-tmpdir \"~1.0.2\"\n\ntmpl@1.0.x:\n  version \"1.0.4\"\n  resolved \"https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1\"\n  integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=\n\nto-factory@^1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/to-factory/-/to-factory-1.0.0.tgz#8738af8bd97120ad1d4047972ada5563bf9479b1\"\n  integrity sha512-JVYrY42wMG7ddf+wBUQR/uHGbjUHZbLisJ8N62AMm0iTZ0p8YTcZLzdtomU0+H+wa99VbkyvQGB3zxB7NDzgIQ==\n\nto-fast-properties@^2.0.0:\n  version \"2.0.0\"\n  resolved \"https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e\"\n  integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=\n\nto-object-path@^0.3.0:\n  version \"0.3.0\"\n  resolved \"https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af\"\n  integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=\n  dependencies:\n    kind-of \"^3.0.2\"\n\nto-regex-range@^2.1.0:\n  version \"2.1.1\"\n  resolved \"https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38\"\n  integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=\n  dependencies:\n    is-number \"^3.0.0\"\n    repeat-string \"^1.6.1\"\n\nto-regex-range@^5.0.1:\n  version \"5.0.1\"\n  resolved \"https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4\"\n  integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==\n  dependencies:\n    is-number \"^7.0.0\"\n\nto-regex@^3.0.1, to-regex@^3.0.2:\n  version \"3.0.2\"\n  resolved \"https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce\"\n  integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==\n  dependencies:\n    define-property \"^2.0.2\"\n    extend-shallow \"^3.0.2\"\n    regex-not \"^1.0.2\"\n    safe-regex \"^1.1.0\"\n\ntoggle-selection@^1.0.6:\n  version \"1.0.6\"\n  resolved \"https://registry.yarnpkg.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32\"\n  integrity sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==\n\ntoidentifier@1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553\"\n  integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==\n\ntoidentifier@1.0.1:\n  version \"1.0.1\"\n  resolved \"https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35\"\n  integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==\n\ntoposort@^2.0.2:\n  version \"2.0.2\"\n  resolved \"https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330\"\n  integrity sha1-riF2gXXRVZ1IvvNUILL0li8JwzA=\n\ntough-cookie@^2.3.3, tough-cookie@~2.5.0:\n  version \"2.5.0\"\n  resolved \"https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2\"\n  integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==\n  dependencies:\n    psl \"^1.1.28\"\n    punycode \"^2.1.1\"\n\ntough-cookie@^3.0.1:\n  version \"3.0.1\"\n  resolved \"https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-3.0.1.tgz#9df4f57e739c26930a018184887f4adb7dca73b2\"\n  integrity sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==\n  dependencies:\n    ip-regex \"^2.1.0\"\n    psl \"^1.1.28\"\n    punycode \"^2.1.1\"\n\ntr46@^1.0.1:\n  version \"1.0.1\"\n  resolved \"https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09\"\n  integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=\n  dependencies:\n    punycode \"^2.1.0\"\n\ntr46@~0.0.3:\n  version \"0.0.3\"\n  resolved \"https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a\"\n  integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==\n\ntrim-lines@^1.0.0:\n  version \"1.1.3\"\n  resolved \"https://registry.yarnpkg.com/trim-lines/-/trim-lines-1.1.3.tgz#839514be82428fd9e7ec89e35081afe8f6f93115\"\n  integrity sha512-E0ZosSWYK2mkSu+KEtQ9/KqarVjA9HztOSX+9FDdNacRAq29RRV6ZQNgob3iuW8Htar9vAfEa6yyt5qBAHZDBA==\n\ntrim-trailing-lines@^1.0.0:\n  version \"1.1.4\"\n  resolved \"https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz#bd4abbec7cc880462f10b2c8b5ce1d8d1ec7c2c0\"\n  integrity sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==\n\ntrim@0.0.1:\n  version \"0.0.1\"\n  resolved \"https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd\"\n  integrity sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ==\n\ntrough@^1.0.0:\n  version \"1.0.5\"\n  resolved \"https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406\"\n  integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==\n\nts-interface-checker@^0.1.9:\n  version \"0.1.13\"\n  resolved \"https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699\"\n  integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==\n\nts-jest@^25.3.1:\n  version \"25.5.1\"\n  resolved \"https://registry.yarnpkg.com/ts-jest/-/ts-jest-25.5.1.tgz#2913afd08f28385d54f2f4e828be4d261f4337c7\"\n  integrity sha512-kHEUlZMK8fn8vkxDjwbHlxXRB9dHYpyzqKIGDNxbzs+Rz+ssNDSDNusEK8Fk/sDd4xE6iKoQLfFkFVaskmTJyw==\n  dependencies:\n    bs-logger \"0.x\"\n    buffer-from \"1.x\"\n    fast-json-stable-stringify \"2.x\"\n    json5 \"2.x\"\n    lodash.memoize \"4.x\"\n    make-error \"1.x\"\n    micromatch \"4.x\"\n    mkdirp \"0.x\"\n    semver \"6.x\"\n    yargs-parser \"18.x\"\n\ntsconfig-paths@^3.14.1:\n  version \"3.14.2\"\n  resolved \"https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088\"\n  integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==\n  dependencies:\n    \"@types/json5\" \"^0.0.29\"\n    json5 \"^1.0.2\"\n    minimist \"^1.2.6\"\n    strip-bom \"^3.0.0\"\n\ntsdx@^0.14.1:\n  version \"0.14.1\"\n  resolved \"https://registry.yarnpkg.com/tsdx/-/tsdx-0.14.1.tgz#8771d509b6fc523ad971bae3a63ebe3a88355ab3\"\n  integrity sha512-keHmFdCL2kx5nYFlBdbE3639HQ2v9iGedAFAajobrUTH2wfX0nLPdDhbHv+GHLQZqf0c5ur1XteE8ek/+Eyj5w==\n  dependencies:\n    \"@babel/core\" \"^7.4.4\"\n    \"@babel/helper-module-imports\" \"^7.0.0\"\n    \"@babel/parser\" \"^7.11.5\"\n    \"@babel/plugin-proposal-class-properties\" \"^7.4.4\"\n    \"@babel/preset-env\" \"^7.11.0\"\n    \"@babel/traverse\" \"^7.11.5\"\n    \"@rollup/plugin-babel\" \"^5.1.0\"\n    \"@rollup/plugin-commonjs\" \"^11.0.0\"\n    \"@rollup/plugin-json\" \"^4.0.0\"\n    \"@rollup/plugin-node-resolve\" \"^9.0.0\"\n    \"@rollup/plugin-replace\" \"^2.2.1\"\n    \"@types/jest\" \"^25.2.1\"\n    \"@typescript-eslint/eslint-plugin\" \"^2.12.0\"\n    \"@typescript-eslint/parser\" \"^2.12.0\"\n    ansi-escapes \"^4.2.1\"\n    asyncro \"^3.0.0\"\n    babel-eslint \"^10.0.3\"\n    babel-plugin-annotate-pure-calls \"^0.4.0\"\n    babel-plugin-dev-expression \"^0.2.1\"\n    babel-plugin-macros \"^2.6.1\"\n    babel-plugin-polyfill-regenerator \"^0.0.4\"\n    babel-plugin-transform-rename-import \"^2.3.0\"\n    camelcase \"^6.0.0\"\n    chalk \"^4.0.0\"\n    enquirer \"^2.3.4\"\n    eslint \"^6.1.0\"\n    eslint-config-prettier \"^6.0.0\"\n    eslint-config-react-app \"^5.2.1\"\n    eslint-plugin-flowtype \"^3.13.0\"\n    eslint-plugin-import \"^2.18.2\"\n    eslint-plugin-jsx-a11y \"^6.2.3\"\n    eslint-plugin-prettier \"^3.1.0\"\n    eslint-plugin-react \"^7.14.3\"\n    eslint-plugin-react-hooks \"^2.2.0\"\n    execa \"^4.0.3\"\n    fs-extra \"^9.0.0\"\n    jest \"^25.3.0\"\n    jest-watch-typeahead \"^0.5.0\"\n    jpjs \"^1.2.1\"\n    lodash.merge \"^4.6.2\"\n    ora \"^4.0.3\"\n    pascal-case \"^3.1.1\"\n    prettier \"^1.19.1\"\n    progress-estimator \"^0.2.2\"\n    regenerator-runtime \"^0.13.7\"\n    rollup \"^1.32.1\"\n    rollup-plugin-sourcemaps \"^0.6.2\"\n    rollup-plugin-terser \"^5.1.2\"\n    rollup-plugin-typescript2 \"^0.27.3\"\n    sade \"^1.4.2\"\n    semver \"^7.1.1\"\n    shelljs \"^0.8.3\"\n    tiny-glob \"^0.2.6\"\n    ts-jest \"^25.3.1\"\n    tslib \"^1.9.3\"\n    typescript \"^3.7.3\"\n\ntslib@2.0.1:\n  version \"2.0.1\"\n  resolved \"https://registry.yarnpkg.com/tslib/-/tslib-2.0.1.tgz#410eb0d113e5b6356490eec749603725b021b43e\"\n  integrity sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ==\n\ntslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3:\n  version \"1.10.0\"\n  resolved \"https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a\"\n  integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==\n\ntslib@^2.0.0, tslib@^2.3.1, tslib@^2.4.0, tslib@^2.5.0:\n  version \"2.5.2\"\n  resolved \"https://registry.yarnpkg.com/tslib/-/tslib-2.5.2.tgz#1b6f07185c881557b0ffa84b111a0106989e8338\"\n  integrity sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA==\n\ntslib@^2.5.3:\n  version \"2.5.3\"\n  resolved \"https://registry.yarnpkg.com/tslib/-/tslib-2.5.3.tgz#24944ba2d990940e6e982c4bea147aba80209913\"\n  integrity sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==\n\ntsutils@^3.17.1, tsutils@^3.7.0:\n  version \"3.17.1\"\n  resolved \"https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759\"\n  integrity sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==\n  dependencies:\n    tslib \"^1.8.1\"\n\ntsutils@^3.21.0:\n  version \"3.21.0\"\n  resolved \"https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623\"\n  integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==\n  dependencies:\n    tslib \"^1.8.1\"\n\ntsx@^4.19.0:\n  version \"4.19.0\"\n  resolved \"https://registry.yarnpkg.com/tsx/-/tsx-4.19.0.tgz#6166cb399b17d14d125e6158d23384045cfdf4f6\"\n  integrity sha512-bV30kM7bsLZKZIOCHeMNVMJ32/LuJzLVajkQI/qf92J2Qr08ueLQvW00PUZGiuLPP760UINwupgUj8qrSCPUKg==\n  dependencies:\n    esbuild \"~0.23.0\"\n    get-tsconfig \"^4.7.5\"\n  optionalDependencies:\n    fsevents \"~2.3.3\"\n\ntunnel-agent@^0.6.0:\n  version \"0.6.0\"\n  resolved \"https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd\"\n  integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=\n  dependencies:\n    safe-buffer \"^5.0.1\"\n\nturbo-darwin-64@2.6.0:\n  version \"2.6.0\"\n  resolved \"https://registry.yarnpkg.com/turbo-darwin-64/-/turbo-darwin-64-2.6.0.tgz#5dd0e703239914ccabb519027261f01d639fe6de\"\n  integrity sha512-6vHnLAubHj8Ib45Knu+oY0ZVCLO7WcibzAvt5b1E72YHqAs4y8meMAGMZM0jLqWPh/9maHDc16/qBCMxtW4pXg==\n\nturbo-darwin-arm64@2.6.0:\n  version \"2.6.0\"\n  resolved \"https://registry.yarnpkg.com/turbo-darwin-arm64/-/turbo-darwin-arm64-2.6.0.tgz#49dd7b03f2f93ce4f7623f885ee68cb8be58b11c\"\n  integrity sha512-IU+gWMEXNBw8H0pxvE7nPEa5p6yahxbN8g/Q4Bf0AHymsAFqsScgV0peeNbWybdmY9jk1LPbALOsF2kY1I7ZiQ==\n\nturbo-linux-64@2.6.0:\n  version \"2.6.0\"\n  resolved \"https://registry.yarnpkg.com/turbo-linux-64/-/turbo-linux-64-2.6.0.tgz#4fc80a29681052d69fdcbdc0fe22830bfa99bcc1\"\n  integrity sha512-CKoiJ2ZFJLCDsWdRlZg+ew1BkGn8iCEGdePhISVpjsGwkJwSVhVu49z2zKdBeL1IhcSKS2YALwp9ellNZANJxw==\n\nturbo-linux-arm64@2.6.0:\n  version \"2.6.0\"\n  resolved \"https://registry.yarnpkg.com/turbo-linux-arm64/-/turbo-linux-arm64-2.6.0.tgz#d7a242316beba40cef239e75478b62ad620fe3e0\"\n  integrity sha512-WroVCdCvJbrhNxNdw7XB7wHAfPPJPV+IXY+ZKNed+9VdfBu/2mQNfKnvqTuFTH7n+Pdpv8to9qwhXRTJe26upg==\n\nturbo-windows-64@2.6.0:\n  version \"2.6.0\"\n  resolved \"https://registry.yarnpkg.com/turbo-windows-64/-/turbo-windows-64-2.6.0.tgz#7aa77e9e81a16707e94a12ea0fc2df9c5d0b1fe0\"\n  integrity sha512-7pZo5aGQPR+A7RMtWCZHusarJ6y15LQ+o3jOmpMxTic/W6Bad+jSeqo07TWNIseIWjCVzrSv27+0odiYRYtQdA==\n\nturbo-windows-arm64@2.6.0:\n  version \"2.6.0\"\n  resolved \"https://registry.yarnpkg.com/turbo-windows-arm64/-/turbo-windows-arm64-2.6.0.tgz#a614111eca81d9112d5b7c32f2e653709b1a0531\"\n  integrity sha512-1Ty+NwIksQY7AtFUCPrTpcKQE7zmd/f7aRjdT+qkqGFQjIjFYctEtN7qo4vpQPBgCfS1U3ka83A2u/9CfJQ3wQ==\n\nturbo@^2.6.0:\n  version \"2.6.0\"\n  resolved \"https://registry.yarnpkg.com/turbo/-/turbo-2.6.0.tgz#7a649587f5e873d7ec408d39f1d7ae6ac2054cde\"\n  integrity sha512-kC5VJqOXo50k0/0jnJDDjibLAXalqT9j7PQ56so0pN+81VR4Fwb2QgIE9dTzT3phqOTQuEXkPh3sCpnv5Isz2g==\n  optionalDependencies:\n    turbo-darwin-64 \"2.6.0\"\n    turbo-darwin-arm64 \"2.6.0\"\n    turbo-linux-64 \"2.6.0\"\n    turbo-linux-arm64 \"2.6.0\"\n    turbo-windows-64 \"2.6.0\"\n    turbo-windows-arm64 \"2.6.0\"\n\ntweetnacl@^0.14.3, tweetnacl@~0.14.0:\n  version \"0.14.5\"\n  resolved \"https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64\"\n  integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=\n\ntype-check@^0.4.0, type-check@~0.4.0:\n  version \"0.4.0\"\n  resolved \"https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1\"\n  integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==\n  dependencies:\n    prelude-ls \"^1.2.1\"\n\ntype-check@~0.3.2:\n  version \"0.3.2\"\n  resolved \"https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72\"\n  integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=\n  dependencies:\n    prelude-ls \"~1.1.2\"\n\ntype-detect@4.0.8:\n  version \"4.0.8\"\n  resolved \"https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c\"\n  integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==\n\ntype-fest@^0.11.0:\n  version \"0.11.0\"\n  resolved \"https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1\"\n  integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==\n\ntype-fest@^0.20.2:\n  version \"0.20.2\"\n  resolved \"https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4\"\n  integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==\n\ntype-fest@^0.6.0:\n  version \"0.6.0\"\n  resolved \"https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b\"\n  integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==\n\ntype-fest@^0.8.1:\n  version \"0.8.1\"\n  resolved \"https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d\"\n  integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==\n\ntype-is@~1.6.18:\n  version \"1.6.18\"\n  resolved \"https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131\"\n  integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==\n  dependencies:\n    media-typer \"0.3.0\"\n    mime-types \"~2.1.24\"\n\ntyped-array-length@^1.0.4:\n  version \"1.0.4\"\n  resolved \"https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb\"\n  integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==\n  dependencies:\n    call-bind \"^1.0.2\"\n    for-each \"^0.3.3\"\n    is-typed-array \"^1.1.9\"\n\ntypedarray-to-buffer@^3.1.5:\n  version \"3.1.5\"\n  resolved \"https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080\"\n  integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==\n  dependencies:\n    is-typedarray \"^1.0.0\"\n\ntypedarray@^0.0.6:\n  version \"0.0.6\"\n  resolved \"https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777\"\n  integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=\n\ntypescript@^3.7.3, typescript@^4.0.0, typescript@^4.0.3, typescript@^4.4.3:\n  version \"4.9.5\"\n  resolved \"https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a\"\n  integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==\n\nua-parser-js@^0.7.18:\n  version \"0.7.22\"\n  resolved \"https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.22.tgz#960df60a5f911ea8f1c818f3747b99c6e177eae3\"\n  integrity sha512-YUxzMjJ5T71w6a8WWVcMGM6YWOTX27rCoIQgLXiWaxqXSx9D7DNjiGWn1aJIRSQ5qr0xuhra77bSIh6voR/46Q==\n\nuglify-es@^3.1.9:\n  version \"3.3.9\"\n  resolved \"https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.9.tgz#0c1c4f0700bed8dbc124cdb304d2592ca203e677\"\n  integrity sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==\n  dependencies:\n    commander \"~2.13.0\"\n    source-map \"~0.6.1\"\n\nultron@1.0.x:\n  version \"1.0.2\"\n  resolved \"https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa\"\n  integrity sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=\n\nultron@~1.1.0:\n  version \"1.1.1\"\n  resolved \"https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c\"\n  integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==\n\nunbox-primitive@^1.0.2:\n  version \"1.0.2\"\n  resolved \"https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e\"\n  integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==\n  dependencies:\n    call-bind \"^1.0.2\"\n    has-bigints \"^1.0.2\"\n    has-symbols \"^1.0.3\"\n    which-boxed-primitive \"^1.0.2\"\n\nunescape@^1.0.1:\n  version \"1.0.1\"\n  resolved \"https://registry.yarnpkg.com/unescape/-/unescape-1.0.1.tgz#956e430f61cad8a4d57d82c518f5e6cc5d0dda96\"\n  integrity sha512-O0+af1Gs50lyH1nUu3ZyYS1cRh01Q/kUKatTOkSs7jukXE6/NebucDVxyiDsA9AQ4JC1V1jUH9EO8JX2nMDgGQ==\n  dependencies:\n    extend-shallow \"^2.0.1\"\n\nunfetch@^4.2.0:\n  version \"4.2.0\"\n  resolved \"https://registry.yarnpkg.com/unfetch/-/unfetch-4.2.0.tgz#7e21b0ef7d363d8d9af0fb929a5555f6ef97a3be\"\n  integrity sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==\n\nunherit@^1.0.4:\n  version \"1.1.3\"\n  resolved \"https://registry.yarnpkg.com/unherit/-/unherit-1.1.3.tgz#6c9b503f2b41b262330c80e91c8614abdaa69c22\"\n  integrity sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==\n  dependencies:\n    inherits \"^2.0.0\"\n    xtend \"^4.0.0\"\n\nunicode-canonical-property-names-ecmascript@^1.0.4:\n  version \"1.0.4\"\n  resolved \"https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818\"\n  integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==\n\nunicode-canonical-property-names-ecmascript@^2.0.0:\n  version \"2.0.0\"\n  resolved \"https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc\"\n  integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==\n\nunicode-match-property-ecmascript@^1.0.4:\n  version \"1.0.4\"\n  resolved \"https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c\"\n  integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==\n  dependencies:\n    unicode-canonical-property-names-ecmascript \"^1.0.4\"\n    unicode-property-aliases-ecmascript \"^1.0.4\"\n\nunicode-match-property-ecmascript@^2.0.0:\n  version \"2.0.0\"\n  resolved \"https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3\"\n  integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==\n  dependencies:\n    unicode-canonical-property-names-ecmascript \"^2.0.0\"\n    unicode-property-aliases-ecmascript \"^2.0.0\"\n\nunicode-match-property-value-ecmascript@^1.2.0:\n  version \"1.2.0\"\n  resolved \"https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531\"\n  integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==\n\nunicode-match-property-value-ecmascript@^2.0.0:\n  version \"2.1.0\"\n  resolved \"https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0\"\n  integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==\n\nunicode-property-aliases-ecmascript@^1.0.4:\n  version \"1.1.0\"\n  resolved \"https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4\"\n  integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==\n\nunicode-property-aliases-ecmascript@^2.0.0:\n  version \"2.1.0\"\n  resolved \"https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd\"\n  integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==\n\nunified@9.2.0:\n  version \"9.2.0\"\n  resolved \"https://registry.yarnpkg.com/unified/-/unified-9.2.0.tgz#67a62c627c40589edebbf60f53edfd4d822027f8\"\n  integrity sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==\n  dependencies:\n    bail \"^1.0.0\"\n    extend \"^3.0.0\"\n    is-buffer \"^2.0.0\"\n    is-plain-obj \"^2.0.0\"\n    trough \"^1.0.0\"\n    vfile \"^4.0.0\"\n\nunified@^9.0.0:\n  version \"9.2.2\"\n  resolved \"https://registry.yarnpkg.com/unified/-/unified-9.2.2.tgz#67649a1abfc3ab85d2969502902775eb03146975\"\n  integrity sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==\n  dependencies:\n    bail \"^1.0.0\"\n    extend \"^3.0.0\"\n    is-buffer \"^2.0.0\"\n    is-plain-obj \"^2.0.0\"\n    trough \"^1.0.0\"\n    vfile \"^4.0.0\"\n\nunion-value@^1.0.0:\n  version \"1.0.1\"\n  resolved \"https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847\"\n  integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==\n  dependencies:\n    arr-union \"^3.1.0\"\n    get-value \"^2.0.6\"\n    is-extendable \"^0.1.1\"\n    set-value \"^2.0.1\"\n\nunist-builder@2.0.3, unist-builder@^2.0.0, unist-builder@^2.0.3:\n  version \"2.0.3\"\n  resolved \"https://registry.yarnpkg.com/unist-builder/-/unist-builder-2.0.3.tgz#77648711b5d86af0942f334397a33c5e91516436\"\n  integrity sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==\n\nunist-util-generated@^1.0.0:\n  version \"1.1.6\"\n  resolved \"https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-1.1.6.tgz#5ab51f689e2992a472beb1b35f2ce7ff2f324d4b\"\n  integrity sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==\n\nunist-util-is@^4.0.0:\n  version \"4.1.0\"\n  resolved \"https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-4.1.0.tgz#976e5f462a7a5de73d94b706bac1b90671b57797\"\n  integrity sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==\n\nunist-util-position@^3.0.0:\n  version \"3.1.0\"\n  resolved \"https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-3.1.0.tgz#1c42ee6301f8d52f47d14f62bbdb796571fa2d47\"\n  integrity sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==\n\nunist-util-remove-position@^2.0.0:\n  version \"2.0.1\"\n  resolved \"https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz#5d19ca79fdba712301999b2b73553ca8f3b352cc\"\n  integrity sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==\n  dependencies:\n    unist-util-visit \"^2.0.0\"\n\nunist-util-remove@^2.0.0:\n  version \"2.1.0\"\n  resolved \"https://registry.yarnpkg.com/unist-util-remove/-/unist-util-remove-2.1.0.tgz#b0b4738aa7ee445c402fda9328d604a02d010588\"\n  integrity sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q==\n  dependencies:\n    unist-util-is \"^4.0.0\"\n\nunist-util-stringify-position@^2.0.0:\n  version \"2.0.3\"\n  resolved \"https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz#cce3bfa1cdf85ba7375d1d5b17bdc4cada9bd9da\"\n  integrity sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==\n  dependencies:\n    \"@types/unist\" \"^2.0.2\"\n\nunist-util-visit-parents@^3.0.0:\n  version \"3.1.1\"\n  resolved \"https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz#65a6ce698f78a6b0f56aa0e88f13801886cdaef6\"\n  integrity sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==\n  dependencies:\n    \"@types/unist\" \"^2.0.0\"\n    unist-util-is \"^4.0.0\"\n\nunist-util-visit@2.0.3, unist-util-visit@^2.0.0, unist-util-visit@^2.0.2, unist-util-visit@^2.0.3:\n  version \"2.0.3\"\n  resolved \"https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-2.0.3.tgz#c3703893146df47203bb8a9795af47d7b971208c\"\n  integrity sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==\n  dependencies:\n    \"@types/unist\" \"^2.0.0\"\n    unist-util-is \"^4.0.0\"\n    unist-util-visit-parents \"^3.0.0\"\n\nuniversalify@^0.1.0:\n  version \"0.1.2\"\n  resolved \"https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66\"\n  integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==\n\nuniversalify@^1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d\"\n  integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==\n\nunpipe@1.0.0, unpipe@~1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec\"\n  integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=\n\nunset-value@^1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559\"\n  integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=\n  dependencies:\n    has-value \"^0.3.1\"\n    isobject \"^3.0.0\"\n\nuntildify@^4.0.0:\n  version \"4.0.0\"\n  resolved \"https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b\"\n  integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==\n\nupdate-browserslist-db@^1.0.11:\n  version \"1.0.11\"\n  resolved \"https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940\"\n  integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==\n  dependencies:\n    escalade \"^3.1.1\"\n    picocolors \"^1.0.0\"\n\nuri-js@^4.2.2:\n  version \"4.2.2\"\n  resolved \"https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0\"\n  integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==\n  dependencies:\n    punycode \"^2.1.0\"\n\nurix@^0.1.0:\n  version \"0.1.0\"\n  resolved \"https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72\"\n  integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=\n\nuse-isomorphic-layout-effect@^1.1.1:\n  version \"1.1.2\"\n  resolved \"https://registry.yarnpkg.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz#497cefb13d863d687b08477d9e5a164ad8c1a6fb\"\n  integrity sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==\n\nuse-latest@^1.0.0:\n  version \"1.2.1\"\n  resolved \"https://registry.yarnpkg.com/use-latest/-/use-latest-1.2.1.tgz#d13dfb4b08c28e3e33991546a2cee53e14038cf2\"\n  integrity sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==\n  dependencies:\n    use-isomorphic-layout-effect \"^1.1.1\"\n\nuse-onclickoutside@^0.3.1:\n  version \"0.3.2\"\n  resolved \"https://registry.yarnpkg.com/use-onclickoutside/-/use-onclickoutside-0.3.2.tgz#1681704055463295a34236dee43d5911c6c3c418\"\n  integrity sha512-7P+U4B6nUlWLtmktuF6KTNg9mzxf7VqnBVxv418i3SQytw68/19Fk8hUW1uZjZv3DGHtGEwLa4vnjbm5sPL2ZQ==\n  dependencies:\n    are-passive-events-supported \"^1.1.0\"\n    use-latest \"^1.0.0\"\n\nuse@^3.1.0:\n  version \"3.1.1\"\n  resolved \"https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f\"\n  integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==\n\nutil-deprecate@^1.0.2, util-deprecate@~1.0.1:\n  version \"1.0.2\"\n  resolved \"https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf\"\n  integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=\n\nutils-merge@1.0.1:\n  version \"1.0.1\"\n  resolved \"https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713\"\n  integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=\n\nuuid@^3.3.2:\n  version \"3.4.0\"\n  resolved \"https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee\"\n  integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==\n\nv8-compile-cache@^2.0.3:\n  version \"2.1.0\"\n  resolved \"https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz#e14de37b31a6d194f5690d67efc4e7f6fc6ab30e\"\n  integrity sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==\n\nv8-to-istanbul@^4.1.3:\n  version \"4.1.4\"\n  resolved \"https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-4.1.4.tgz#b97936f21c0e2d9996d4985e5c5156e9d4e49cd6\"\n  integrity sha512-Rw6vJHj1mbdK8edjR7+zuJrpDtKIgNdAvTSAcpYfgMIw+u2dPDntD3dgN4XQFLU2/fvFQdzj+EeSGfd/jnY5fQ==\n  dependencies:\n    \"@types/istanbul-lib-coverage\" \"^2.0.1\"\n    convert-source-map \"^1.6.0\"\n    source-map \"^0.7.3\"\n\nvalidate-npm-package-license@^3.0.1:\n  version \"3.0.4\"\n  resolved \"https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a\"\n  integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==\n  dependencies:\n    spdx-correct \"^3.0.0\"\n    spdx-expression-parse \"^3.0.0\"\n\nvary@~1.1.2:\n  version \"1.1.2\"\n  resolved \"https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc\"\n  integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=\n\nverror@1.10.0:\n  version \"1.10.0\"\n  resolved \"https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400\"\n  integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=\n  dependencies:\n    assert-plus \"^1.0.0\"\n    core-util-is \"1.0.2\"\n    extsprintf \"^1.2.0\"\n\nvfile-location@^3.0.0, vfile-location@^3.2.0:\n  version \"3.2.0\"\n  resolved \"https://registry.yarnpkg.com/vfile-location/-/vfile-location-3.2.0.tgz#d8e41fbcbd406063669ebf6c33d56ae8721d0f3c\"\n  integrity sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==\n\nvfile-message@^2.0.0:\n  version \"2.0.4\"\n  resolved \"https://registry.yarnpkg.com/vfile-message/-/vfile-message-2.0.4.tgz#5b43b88171d409eae58477d13f23dd41d52c371a\"\n  integrity sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==\n  dependencies:\n    \"@types/unist\" \"^2.0.0\"\n    unist-util-stringify-position \"^2.0.0\"\n\nvfile@^4.0.0:\n  version \"4.2.1\"\n  resolved \"https://registry.yarnpkg.com/vfile/-/vfile-4.2.1.tgz#03f1dce28fc625c625bc6514350fbdb00fa9e624\"\n  integrity sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==\n  dependencies:\n    \"@types/unist\" \"^2.0.0\"\n    is-buffer \"^2.0.0\"\n    unist-util-stringify-position \"^2.0.0\"\n    vfile-message \"^2.0.0\"\n\nvlq@^1.0.0:\n  version \"1.0.1\"\n  resolved \"https://registry.yarnpkg.com/vlq/-/vlq-1.0.1.tgz#c003f6e7c0b4c1edd623fd6ee50bbc0d6a1de468\"\n  integrity sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==\n\n\"vscode-textmate@https://github.com/octref/vscode-textmate\":\n  version \"4.0.1\"\n  resolved \"https://github.com/octref/vscode-textmate#e65aabe2227febda7beaad31dd0fca1228c5ddf3\"\n\nw3c-hr-time@^1.0.1:\n  version \"1.0.1\"\n  resolved \"https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045\"\n  integrity sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=\n  dependencies:\n    browser-process-hrtime \"^0.1.2\"\n\nw3c-xmlserializer@^1.1.2:\n  version \"1.1.2\"\n  resolved \"https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz#30485ca7d70a6fd052420a3d12fd90e6339ce794\"\n  integrity sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==\n  dependencies:\n    domexception \"^1.0.1\"\n    webidl-conversions \"^4.0.2\"\n    xml-name-validator \"^3.0.0\"\n\nwalker@^1.0.7, walker@~1.0.5:\n  version \"1.0.7\"\n  resolved \"https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb\"\n  integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=\n  dependencies:\n    makeerror \"1.0.x\"\n\nwatch@~0.18.0:\n  version \"0.18.0\"\n  resolved \"https://registry.yarnpkg.com/watch/-/watch-0.18.0.tgz#28095476c6df7c90c963138990c0a5423eb4b986\"\n  integrity sha1-KAlUdsbffJDJYxOJkMClQj60uYY=\n  dependencies:\n    exec-sh \"^0.2.0\"\n    minimist \"^1.2.0\"\n\nwcwidth@^1.0.1:\n  version \"1.0.1\"\n  resolved \"https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8\"\n  integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=\n  dependencies:\n    defaults \"^1.0.3\"\n\nweb-namespaces@^1.0.0:\n  version \"1.1.4\"\n  resolved \"https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-1.1.4.tgz#bc98a3de60dadd7faefc403d1076d529f5e030ec\"\n  integrity sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==\n\nwebidl-conversions@^3.0.0:\n  version \"3.0.1\"\n  resolved \"https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871\"\n  integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==\n\nwebidl-conversions@^4.0.2:\n  version \"4.0.2\"\n  resolved \"https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad\"\n  integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==\n\nwhatwg-encoding@^1.0.1, whatwg-encoding@^1.0.5:\n  version \"1.0.5\"\n  resolved \"https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0\"\n  integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==\n  dependencies:\n    iconv-lite \"0.4.24\"\n\nwhatwg-fetch@>=0.10.0:\n  version \"3.4.1\"\n  resolved \"https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.4.1.tgz#e5f871572d6879663fa5674c8f833f15a8425ab3\"\n  integrity sha512-sofZVzE1wKwO+EYPbWfiwzaKovWiZXf4coEzjGP9b2GBVgQRLQUZ2QcuPpQExGDAW5GItpEm6Tl4OU5mywnAoQ==\n\nwhatwg-mimetype@^2.2.0, whatwg-mimetype@^2.3.0:\n  version \"2.3.0\"\n  resolved \"https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf\"\n  integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==\n\nwhatwg-url@^5.0.0:\n  version \"5.0.0\"\n  resolved \"https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d\"\n  integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==\n  dependencies:\n    tr46 \"~0.0.3\"\n    webidl-conversions \"^3.0.0\"\n\nwhatwg-url@^7.0.0:\n  version \"7.1.0\"\n  resolved \"https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06\"\n  integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==\n  dependencies:\n    lodash.sortby \"^4.7.0\"\n    tr46 \"^1.0.1\"\n    webidl-conversions \"^4.0.2\"\n\nwhich-boxed-primitive@^1.0.2:\n  version \"1.0.2\"\n  resolved \"https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6\"\n  integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==\n  dependencies:\n    is-bigint \"^1.0.1\"\n    is-boolean-object \"^1.1.0\"\n    is-number-object \"^1.0.4\"\n    is-string \"^1.0.5\"\n    is-symbol \"^1.0.3\"\n\nwhich-collection@^1.0.1:\n  version \"1.0.1\"\n  resolved \"https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906\"\n  integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==\n  dependencies:\n    is-map \"^2.0.1\"\n    is-set \"^2.0.1\"\n    is-weakmap \"^2.0.1\"\n    is-weakset \"^2.0.1\"\n\nwhich-module@^2.0.0:\n  version \"2.0.0\"\n  resolved \"https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a\"\n  integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=\n\nwhich-pm-runs@^1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb\"\n  integrity sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=\n\nwhich-typed-array@^1.1.9:\n  version \"1.1.9\"\n  resolved \"https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6\"\n  integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==\n  dependencies:\n    available-typed-arrays \"^1.0.5\"\n    call-bind \"^1.0.2\"\n    for-each \"^0.3.3\"\n    gopd \"^1.0.1\"\n    has-tostringtag \"^1.0.0\"\n    is-typed-array \"^1.1.10\"\n\nwhich@^1.2.9, which@^1.3.0, which@^1.3.1:\n  version \"1.3.1\"\n  resolved \"https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a\"\n  integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==\n  dependencies:\n    isexe \"^2.0.0\"\n\nwhich@^2.0.1, which@^2.0.2:\n  version \"2.0.2\"\n  resolved \"https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1\"\n  integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==\n  dependencies:\n    isexe \"^2.0.0\"\n\nword-wrap@^1.2.3, word-wrap@~1.2.3:\n  version \"1.2.3\"\n  resolved \"https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c\"\n  integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==\n\nwordwrap@^1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb\"\n  integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=\n\nwordwrap@~0.0.2:\n  version \"0.0.3\"\n  resolved \"https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107\"\n  integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc=\n\nwrap-ansi@^2.0.0:\n  version \"2.1.0\"\n  resolved \"https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85\"\n  integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=\n  dependencies:\n    string-width \"^1.0.1\"\n    strip-ansi \"^3.0.1\"\n\nwrap-ansi@^3.0.1:\n  version \"3.0.1\"\n  resolved \"https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz#288a04d87eda5c286e060dfe8f135ce8d007f8ba\"\n  integrity sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo=\n  dependencies:\n    string-width \"^2.1.1\"\n    strip-ansi \"^4.0.0\"\n\nwrap-ansi@^6.2.0:\n  version \"6.2.0\"\n  resolved \"https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53\"\n  integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==\n  dependencies:\n    ansi-styles \"^4.0.0\"\n    string-width \"^4.1.0\"\n    strip-ansi \"^6.0.0\"\n\nwrappy@1:\n  version \"1.0.2\"\n  resolved \"https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f\"\n  integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=\n\nwrite-file-atomic@^1.2.0:\n  version \"1.3.4\"\n  resolved \"https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.3.4.tgz#f807a4f0b1d9e913ae7a48112e6cc3af1991b45f\"\n  integrity sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=\n  dependencies:\n    graceful-fs \"^4.1.11\"\n    imurmurhash \"^0.1.4\"\n    slide \"^1.1.5\"\n\nwrite-file-atomic@^3.0.0:\n  version \"3.0.3\"\n  resolved \"https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8\"\n  integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==\n  dependencies:\n    imurmurhash \"^0.1.4\"\n    is-typedarray \"^1.0.0\"\n    signal-exit \"^3.0.2\"\n    typedarray-to-buffer \"^3.1.5\"\n\nwrite@1.0.3:\n  version \"1.0.3\"\n  resolved \"https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3\"\n  integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==\n  dependencies:\n    mkdirp \"^0.5.1\"\n\nws@^1.1.0, ws@^1.1.5:\n  version \"1.1.5\"\n  resolved \"https://registry.yarnpkg.com/ws/-/ws-1.1.5.tgz#cbd9e6e75e09fc5d2c90015f21f0c40875e0dd51\"\n  integrity sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==\n  dependencies:\n    options \">=0.0.5\"\n    ultron \"1.0.x\"\n\nws@^3.3.1:\n  version \"3.3.3\"\n  resolved \"https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2\"\n  integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==\n  dependencies:\n    async-limiter \"~1.0.0\"\n    safe-buffer \"~5.1.0\"\n    ultron \"~1.1.0\"\n\nws@^7.0.0:\n  version \"7.3.1\"\n  resolved \"https://registry.yarnpkg.com/ws/-/ws-7.3.1.tgz#d0547bf67f7ce4f12a72dfe31262c68d7dc551c8\"\n  integrity sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA==\n\nxcode@^2.0.0:\n  version \"2.1.0\"\n  resolved \"https://registry.yarnpkg.com/xcode/-/xcode-2.1.0.tgz#bab64a7e954bb50ca8d19da7e09531c65a43ecfe\"\n  integrity sha512-uCrmPITrqTEzhn0TtT57fJaNaw8YJs1aCzs+P/QqxsDbvPZSv7XMPPwXrKvHtD6pLjBM/NaVwraWJm8q83Y4iQ==\n  dependencies:\n    simple-plist \"^1.0.0\"\n    uuid \"^3.3.2\"\n\nxml-name-validator@^3.0.0:\n  version \"3.0.0\"\n  resolved \"https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a\"\n  integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==\n\nxmlbuilder@^9.0.7:\n  version \"9.0.7\"\n  resolved \"https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d\"\n  integrity sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=\n\nxmlchars@^2.1.1:\n  version \"2.2.0\"\n  resolved \"https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb\"\n  integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==\n\nxmldoc@^0.4.0:\n  version \"0.4.0\"\n  resolved \"https://registry.yarnpkg.com/xmldoc/-/xmldoc-0.4.0.tgz#d257224be8393eaacbf837ef227fd8ec25b36888\"\n  integrity sha1-0lciS+g5PqrL+DfvIn/Y7CWzaIg=\n  dependencies:\n    sax \"~1.1.1\"\n\nxmldom@0.1.x:\n  version \"0.1.31\"\n  resolved \"https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.31.tgz#b76c9a1bd9f0a9737e5a72dc37231cf38375e2ff\"\n  integrity sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ==\n\nxpipe@^1.0.5:\n  version \"1.0.5\"\n  resolved \"https://registry.yarnpkg.com/xpipe/-/xpipe-1.0.5.tgz#8dd8bf45fc3f7f55f0e054b878f43a62614dafdf\"\n  integrity sha1-jdi/Rfw/f1Xw4FS4ePQ6YmFNr98=\n\nxtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1:\n  version \"4.0.2\"\n  resolved \"https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54\"\n  integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==\n\ny18n@^3.2.1:\n  version \"3.2.1\"\n  resolved \"https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41\"\n  integrity sha1-bRX7qITAhnnA136I53WegR4H+kE=\n\ny18n@^4.0.0:\n  version \"4.0.0\"\n  resolved \"https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b\"\n  integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==\n\nyallist@^2.1.2:\n  version \"2.1.2\"\n  resolved \"https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52\"\n  integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=\n\nyallist@^3.0.2:\n  version \"3.1.1\"\n  resolved \"https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd\"\n  integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==\n\nyallist@^4.0.0:\n  version \"4.0.0\"\n  resolved \"https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72\"\n  integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==\n\nyaml@^1.10.0:\n  version \"1.10.0\"\n  resolved \"https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e\"\n  integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==\n\nyaml@^1.7.2:\n  version \"1.7.2\"\n  resolved \"https://registry.yarnpkg.com/yaml/-/yaml-1.7.2.tgz#f26aabf738590ab61efaca502358e48dc9f348b2\"\n  integrity sha512-qXROVp90sb83XtAoqE8bP9RwAkTTZbugRUTm5YeFCBfNRPEp2YzTeqWiz7m5OORHzEvrA/qcGS8hp/E+MMROYw==\n  dependencies:\n    \"@babel/runtime\" \"^7.6.3\"\n\nyaml@^2.1.1:\n  version \"2.3.1\"\n  resolved \"https://registry.yarnpkg.com/yaml/-/yaml-2.3.1.tgz#02fe0975d23cd441242aa7204e09fc28ac2ac33b\"\n  integrity sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==\n\nyargs-parser@18.x, yargs-parser@^18.1.2:\n  version \"18.1.3\"\n  resolved \"https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0\"\n  integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==\n  dependencies:\n    camelcase \"^5.0.0\"\n    decamelize \"^1.2.0\"\n\nyargs-parser@^7.0.0:\n  version \"7.0.0\"\n  resolved \"https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9\"\n  integrity sha1-jQrELxbqVd69MyyvTEA4s+P139k=\n  dependencies:\n    camelcase \"^4.1.0\"\n\nyargs@^15.3.1:\n  version \"15.4.1\"\n  resolved \"https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8\"\n  integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==\n  dependencies:\n    cliui \"^6.0.0\"\n    decamelize \"^1.2.0\"\n    find-up \"^4.1.0\"\n    get-caller-file \"^2.0.1\"\n    require-directory \"^2.1.1\"\n    require-main-filename \"^2.0.0\"\n    set-blocking \"^2.0.0\"\n    string-width \"^4.2.0\"\n    which-module \"^2.0.0\"\n    y18n \"^4.0.0\"\n    yargs-parser \"^18.1.2\"\n\nyargs@^9.0.0:\n  version \"9.0.1\"\n  resolved \"https://registry.yarnpkg.com/yargs/-/yargs-9.0.1.tgz#52acc23feecac34042078ee78c0c007f5085db4c\"\n  integrity sha1-UqzCP+7Kw0BCB47njAwAf1CF20w=\n  dependencies:\n    camelcase \"^4.1.0\"\n    cliui \"^3.2.0\"\n    decamelize \"^1.1.1\"\n    get-caller-file \"^1.0.1\"\n    os-locale \"^2.0.0\"\n    read-pkg-up \"^2.0.0\"\n    require-directory \"^2.1.1\"\n    require-main-filename \"^1.0.1\"\n    set-blocking \"^2.0.0\"\n    string-width \"^2.0.0\"\n    which-module \"^2.0.0\"\n    y18n \"^3.2.1\"\n    yargs-parser \"^7.0.0\"\n\nyup@^0.32.0:\n  version \"0.32.11\"\n  resolved \"https://registry.yarnpkg.com/yup/-/yup-0.32.11.tgz#d67fb83eefa4698607982e63f7ca4c5ed3cf18c5\"\n  integrity sha512-Z2Fe1bn+eLstG8DRR6FTavGD+MeAwyfmouhHsIUgaADz8jvFKbO/fXc2trJKZg+5EBjh4gGm3iU/t3onKlXHIg==\n  dependencies:\n    \"@babel/runtime\" \"^7.15.4\"\n    \"@types/lodash\" \"^4.14.175\"\n    lodash \"^4.17.21\"\n    lodash-es \"^4.17.21\"\n    nanoclone \"^0.2.1\"\n    property-expr \"^2.0.4\"\n    toposort \"^2.0.2\"\n\nzepto@^1.2.0:\n  version \"1.2.0\"\n  resolved \"https://registry.yarnpkg.com/zepto/-/zepto-1.2.0.tgz#e127bd9e66fd846be5eab48c1394882f7c0e4f98\"\n  integrity sha512-C1x6lfvBICFTQIMgbt3JqMOno3VOtkWat/xEakLTOurskYIHPmzJrzd1e8BnmtdDVJlGuk5D+FxyCA8MPmkIyA==\n\nzod@3.21.4:\n  version \"3.21.4\"\n  resolved \"https://registry.yarnpkg.com/zod/-/zod-3.21.4.tgz#10882231d992519f0a10b5dd58a38c9dabbb64db\"\n  integrity sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==\n\nzwitch@^1.0.0:\n  version \"1.0.5\"\n  resolved \"https://registry.yarnpkg.com/zwitch/-/zwitch-1.0.5.tgz#d11d7381ffed16b742f6af7b3f223d5cd9fe9920\"\n  integrity sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==\n"
  }
]