diff --git a/.babelrc b/.babelrc deleted file mode 100644 index 14ef043..0000000 --- a/.babelrc +++ /dev/null @@ -1,13 +0,0 @@ -{ - "presets": ["next/babel"], - "plugins": [ - [ - "styled-components", - { - "ssr": true, - "displayName": true, - "preprocess": false - } - ] - ] -} diff --git a/.dvmrc b/.dvmrc new file mode 100644 index 0000000..57807d6 --- /dev/null +++ b/.dvmrc @@ -0,0 +1 @@ +1.22.0 diff --git a/.env.sample b/.env.sample index efb69c7..8526897 100644 --- a/.env.sample +++ b/.env.sample @@ -1,4 +1 @@ -NODE_PATH=/ -AWS_ACCESS_KEY_ID=accesskey -AWS_SECRET_ACCESS_KEY=sshhh -NEXT_PUBLIC_USERBASE_APP_ID=get-from-userbase.com +USERBASE_APP_ID=get-from-userbase.com diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 35b8cf5..0000000 --- a/.eslintignore +++ /dev/null @@ -1,10 +0,0 @@ -**/public/precache.*.*.js -**/public/sw.js -**/public/workbox-*.js -**/public/worker-*.js -**/public/fallback-*.js -**/public/precache.*.*.js.map -**/public/sw.js.map -**/public/workbox-*.js.map -**/public/worker-*.js.map -**/public/fallback-*.js diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index b4a7851..0000000 --- a/.eslintrc.js +++ /dev/null @@ -1,99 +0,0 @@ -const eslint = { - parser: '@typescript-eslint/parser', - extends: [ - 'airbnb', - 'eslint:recommended', - 'plugin:@typescript-eslint/recommended', - 'prettier', - ], - rules: { - semi: 2, - 'max-len': 'off', - 'react/react-in-jsx-scope': 'off', - 'react/jsx-no-bind': 'off', - 'react/jsx-one-expression-per-line': 'off', - 'react/destructuring-assignment': 'off', - 'react/forbid-prop-types': 'off', - 'react/prefer-stateless-function': 'off', - 'react/no-danger': 'off', - 'no-console': 'off', - 'no-param-reassign': 'off', - 'import/prefer-default-export': 'off', - 'import/no-extraneous-dependencies': 'off', - 'implicit-arrow-linebreak': 'off', - 'object-curly-newline': 'off', - 'react/jsx-closing-tag-location': 'off', - 'no-restricted-syntax': 'off', - 'operator-linebreak': 'off', - 'arrow-body-style': 'off', - 'jsx-a11y/anchor-is-valid': 'off', - 'react/jsx-filename-extension': [ - 1, - { extensions: ['.js', '.jsx', '.ts', '.tsx'] }, - ], - 'no-underscore-dangle': 'off', - '@typescript-eslint/no-empty-function': 'off', - '@typescript-eslint/no-var-requires': 'off', - '@typescript-eslint/explicit-function-return-type': 'off', - 'react/jsx-props-no-spreading': 'off', - 'jsx-a11y/html-has-lang': 'off', - 'spaced-comment': 'off', - '@typescript-eslint/no-empty-interface': 'off', - 'react/no-array-index-key': 'off', - 'jsx-a11y/no-noninteractive-element-interactions': 'off', - 'jsx-a11y/click-events-have-key-events': 'off', - '@typescript-eslint/no-explicit-any': 'off', - 'import/first': 'off', - '@typescript-eslint/camelcase': 'off', - '@typescript-eslint/ban-ts-ignore': 'off', - 'jsx-a11y/label-has-associated-control': 'off', - 'no-await-in-loop': 'off', - 'react/no-did-update-set-state': 'off', - 'no-continue': 'off', - 'react/no-unescaped-entities': 'off', - 'no-use-before-define': 'off', - '@typescript-eslint/no-use-before-define': ['error'], - '@typescript-eslint/ban-ts-comment': 'off', - 'react/require-default-props': 'off', - '@typescript-eslint/explicit-module-boundary-types': 'off', - 'import/extensions': [ - 'error', - 'ignorePackages', - { - js: 'never', - jsx: 'never', - ts: 'never', - tsx: 'never', - }, - ], - 'function-paren-newline': 'off', - 'no-confusing-arrow': 'off', - 'react/jsx-curly-newline': 'off', - 'react/function-component-definition': 'off', - 'react/jsx-no-useless-fragment': 'off', - 'no-nested-ternary': 'off', - }, - parserOptions: { - ecmaFeatures: { - jsx: true, - }, - useJSXTextNode: true, - extraFileExtensions: ['.ts', '.tsx'], - }, - settings: { - 'import/resolver': { - node: { - paths: ['.'], - extensions: ['.js', '.jsx', '.ts', '.tsx'], - }, - }, - }, - plugins: ['react', '@typescript-eslint'], - env: { - browser: true, - node: true, - jest: true, - }, -}; - -module.exports = eslint; diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml deleted file mode 100644 index 4426b5f..0000000 --- a/.github/workflows/ci.yml +++ /dev/null @@ -1,18 +0,0 @@ -name: Run Tests - -on: [push] - -jobs: - test: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v1 - with: - node-version: 12.x - - run: | - make install - - run: | - make test/ci - env: - CI: true diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml new file mode 100644 index 0000000..8ecea55 --- /dev/null +++ b/.github/workflows/tests.yml @@ -0,0 +1,14 @@ +name: Run Tests + +on: [push] + +jobs: + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: denoland/setup-deno@v1 + with: + deno-version: v1.22.0 + - run: | + make test diff --git a/.gitignore b/.gitignore index 59ee055..4c49bd7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,20 +1 @@ -.DS_Store -node_modules -*.log -*.zip .env -.next -.env.build -.serverless -.serverless_nextjs -**/public/precache.*.*.js -**/public/sw.js -**/public/workbox-*.js -**/public/worker-*.js -**/public/fallback-*.js -**/public/precache.*.*.js.map -**/public/sw.js.map -**/public/workbox-*.js.map -**/public/worker-*.js.map -**/public/fallback-*.js -*.tsbuildinfo diff --git a/.npmrc b/.npmrc deleted file mode 100644 index cffe8cd..0000000 --- a/.npmrc +++ /dev/null @@ -1 +0,0 @@ -save-exact=true diff --git a/.nvmrc b/.nvmrc deleted file mode 100644 index f0b10f1..0000000 --- a/.nvmrc +++ /dev/null @@ -1 +0,0 @@ -v16.13.1 diff --git a/.prettierignore b/.prettierignore deleted file mode 100644 index 17c3147..0000000 --- a/.prettierignore +++ /dev/null @@ -1,15 +0,0 @@ -node_modules -.next -package-lock.json -.serverless -.serverless_nextjs -**/public/precache.*.*.js -**/public/sw.js -**/public/workbox-*.js -**/public/worker-*.js -**/public/fallback-*.js -**/public/precache.*.*.js.map -**/public/sw.js.map -**/public/workbox-*.js.map -**/public/worker-*.js.map -**/public/fallback-*.js diff --git a/.prettierrc.js b/.prettierrc.js deleted file mode 100644 index 6fe40d5..0000000 --- a/.prettierrc.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - trailingComma: 'all', - tabWidth: 2, - singleQuote: true, - arrowParens: 'always', -}; diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..e1533c2 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,4 @@ +{ + "deno.enable": true, + "deno.lint": true +} diff --git a/Makefile b/Makefile index 0fbce29..d19c121 100644 --- a/Makefile +++ b/Makefile @@ -1,39 +1,13 @@ -.PHONY: install -install: - -cp -n .env.sample .env - npm install --legacy-peer-deps - .PHONY: start start: - npm run dev + deno run --watch --allow-net --allow-read --allow-env=PORT,USERBASE_APP_ID main.ts + +.PHONY: format +format: + deno fmt .PHONY: test test: - make lint - npm run test - -.PHONY: test/update -test/update: - make lint - npm run test -- -u - -.PHONY: test/pretty -test/pretty: - npm run pretty/test - -.PHONY: test/ci -test/ci: - make test/pretty - make test - -.PHONY: lint -lint: - npm run lint - -.PHONY: pretty -pretty: - npm run pretty - -.PHONY: deploy -deploy: - serverless + deno fmt --check + deno lint + deno test --allow-net --allow-read --allow-env=PORT,USERBASE_APP_ID --check=all diff --git a/README.md b/README.md index 2d9d7ce..6234742 100644 --- a/README.md +++ b/README.md @@ -2,23 +2,39 @@ [![](https://github.com/BrunoBernardino/budgetzen-web/workflows/Run%20Tests/badge.svg)](https://github.com/BrunoBernardino/budgetzen-web/actions?workflow=Run+Tests) -This is the web app for the [Budget Zen app](https://budgetzen.net), built with Next.js and deployed to AWS with Serverless. +This is the web app for the [Budget Zen app](https://budgetzen.net), built with [Deno](https://deno.land) and deployed to [Deno Deploy](https://deno.com/deploy). This is v2, which is [end-to-end encrypted via userbase](https://userbase.com), and works via web on any device (it's a PWA - Progressive Web App). It's not compatible with Budget Zen v1 (not end-to-end encrypted), which you can still get locally from [this commit](https://github.com/BrunoBernardino/budgetzen-web/tree/397d625469b7dfd8d1968c847b32e607ee7c8ee9). You can still export and import the data as the JSON format is the same (unencrypted). +## Requirements + +This was tested with `deno@1.22.0`, though it's possible older versions might work. + +There are no other dependencies. **Deno**! + ## Development -```bash -make install # installs dependencies -make start # starts the app -make pretty # prettifies the code -make test # runs linting and tests -make deploy # deploys to app.budgetzen.net (requires `serverless` to be installed globally) +```sh +$ make start +$ make format +$ make test ``` -## TODOs +## Structure + +This is vanilla JS, web standards, no frameworks. If you'd like to see/use [the Next.js version deployed to AWS via Serverless, check this commit](https://github.com/BrunoBernardino/budgetzen-web/tree/b1097c710ba89abf9aed044a7d7444e91d04a6a7). + +- Backend routes are defined at `routes.ts`. +- Static files are defined at `public/`. +- Pages are defined at `pages/`. + +## Deployment + +- Deno Deploy: Just push to the `main` branch. Any other branch will create a preview deployment. + +## TODOs: -- [ ] Improve UI/UX in general -- [ ] Improve dark/light mode +- [ ] Enable true offline mode (securely cache data, allow read-only) + - https://github.com/smallbets/userbase/issues/255 has interesting ideas, while it's not natively supported diff --git a/components/Budget/index.tsx b/components/Budget/index.tsx deleted file mode 100644 index 65947ee..0000000 --- a/components/Budget/index.tsx +++ /dev/null @@ -1,86 +0,0 @@ -import React from 'react'; -import styled from 'styled-components'; - -import { formatNumber } from 'lib/utils'; -import { colors, fontSizes } from 'lib/constants'; - -import * as T from 'lib/types'; - -interface BudgetProps extends T.Budget { - currency: T.Currency; - onClick: () => void; - expensesCost: number; -} - -type ContainerProps = { - isTotal: boolean; -}; - -const Container = styled.section<ContainerProps>` - display: flex; - flex: 1; - flex-direction: row; - justify-content: space-between; - align-items: flex-start; - padding: 14px 16px; - border-radius: 12px; - box-shadow: 0px 0px 4px - rgba(0, 0, 0, ${({ isTotal }) => (isTotal ? '0.2' : '0.1')}); - background-color: ${({ isTotal }) => - isTotal ? colors().secondaryBackground : colors().background}; - margin: 8px; - cursor: pointer; - min-width: 200px; - &:hover { - box-shadow: 0px 0px 4px - rgba(0, 0, 0, ${({ isTotal }) => (isTotal ? '0.5' : '0.3')}); - } -`; - -const LeftColumn = styled.div` - display: flex; - flex: 1; - flex-direction: column; -`; - -const Cost = styled.span` - color: ${colors().text}; - font-size: ${fontSizes.label}px; - font-weight: bold; - text-align: left; -`; - -const Name = styled.span` - color: ${colors().text}; - font-size: ${fontSizes.text}px; - font-weight: normal; - text-align: left; - margin-top: 6px; -`; - -const BudgetMissing = styled.div` - color: ${colors().secondaryText}; - font-size: ${fontSizes.largeText}px; - font-weight: normal; - text-align: right; -`; - -const Budget = (props: BudgetProps) => { - const budgetMissing = props.value - props.expensesCost; - return ( - <Container isTotal={props.name === 'Total'} onClick={props.onClick}> - <LeftColumn> - <Cost> - {formatNumber(props.currency, props.expensesCost)} of{' '} - {formatNumber(props.currency, props.value)} - </Cost> - <Name>{props.name}</Name> - </LeftColumn> - <BudgetMissing> - {formatNumber(props.currency, budgetMissing)} - </BudgetMissing> - </Container> - ); -}; - -export default Budget; diff --git a/components/BudgetModal.tsx b/components/BudgetModal.tsx deleted file mode 100644 index 73b9acf..0000000 --- a/components/BudgetModal.tsx +++ /dev/null @@ -1,203 +0,0 @@ -import React, { useState, useCallback } from 'react'; -import styled from 'styled-components'; -import Rodal from 'rodal'; -import Swal from 'sweetalert2'; - -import Button from 'components/Button'; -import { showNotification } from 'lib/utils'; -import { saveBudget, deleteBudget } from 'lib/data-utils'; -import { colors, fontSizes } from 'lib/constants'; -import * as T from 'lib/types'; - -interface BudgetModalProps { - isOpen: boolean; - onClose: () => void; - id: string; - name: string; - month: string; - value: number; - reloadData: () => Promise<void>; -} - -const Container = styled.section` - display: flex; - flex-direction: column; - flex: 1; - background-color: ${colors().background}; - padding: 0 16px; -`; - -const Label = styled.label` - color: ${colors().inputLabel}; - font-size: ${fontSizes.inputLabel}px; - font-weight: bold; - text-align: left; - margin-top: 38px; -`; - -const Input = styled.input` - font-family: inherit; - color: ${colors().inputField}; - font-size: ${fontSizes.inputField}px; - font-weight: normal; - text-align: left; - margin-top: 8px; - background-color: ${colors().background}; - padding: 5px 8px; - border: 1px solid ${colors().secondaryBackground}; - border-radius: 5px; - outline: none; - &::-webkit-input-placeholder { - color: ${colors().inputPlaceholder}; - } - &:hover, - &:focus, - &:active { - box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.2); - } -`; - -const BudgetModal = (props: BudgetModalProps) => { - const [isSubmitting, setIsSubmitting] = useState(false); - const [name, setName] = useState(props.name); - const [month, setMonth] = useState(`${props.month}-01`); - const [value, setValue] = useState(props.value.toString()); - - const { id, isOpen, reloadData } = props; - - const onClose = useCallback(() => { - const { onClose: closeModal } = props; - setName(''); - setMonth(''); - setValue(''); - closeModal(); - }, []); - - const addBudget = async () => { - if (isSubmitting) { - // Ignore sequential clicks - return; - } - - setIsSubmitting(true); - - const parsedBudget: T.Budget = { - id: id || 'newBudget', - value: Number.parseFloat(value.replace(',', '.')), - name, - month: month ? month.substring(0, 7) : '', - }; - - const success = await saveBudget(parsedBudget); - - setIsSubmitting(false); - - if (success) { - showNotification(`Budget ${id ? 'updated' : 'added'} successfully.`); - onClose(); - } - - await reloadData(); - }; - - const removeBudget = async () => { - if (isSubmitting) { - // Ignore sequential clicks - return; - } - - const confirmationResult = await Swal.fire({ - icon: 'warning', - title: 'Are you sure?', - text: 'Are you sure you want to delete this budget?\n\nThis action is irreversible.', - showDenyButton: true, - showCancelButton: true, - confirmButtonText: 'Yes!', - denyButtonText: 'Nope, cancel.', - }); - - if (!confirmationResult || !confirmationResult.isConfirmed) { - return; - } - - setIsSubmitting(true); - - const success = await deleteBudget(id); - - setIsSubmitting(false); - - if (success) { - showNotification('Budget deleted successfully.'); - onClose(); - } - - await reloadData(); - }; - - const onKeyDown = useCallback( - (event: React.KeyboardEvent<HTMLDivElement>) => { - if (event.key === 'Enter') { - event.preventDefault(); - event.stopPropagation(); - addBudget(); - } - }, - [], - ); - - return ( - <Rodal visible={isOpen} onClose={onClose} animation="slideDown"> - <Container> - <Label>Name</Label> - <Input - placeholder="Food" - onChange={(event) => setName(event.target.value)} - value={name} - autoComplete="off" - type="text" - onKeyDown={onKeyDown} - /> - - <Label>Value</Label> - <Input - placeholder="100" - onChange={(event) => setValue(event.target.value)} - value={value} - autoComplete="off" - type="number" - inputMode="decimal" - onKeyDown={onKeyDown} - /> - - <Label>Month</Label> - <Input - onChange={(event) => setMonth(event.target.value)} - value={month} - autoComplete="off" - type="date" - onKeyDown={onKeyDown} - /> - - <Button - onClick={() => addBudget()} - type="primary" - style={{ margin: '20px 0' }} - > - {id ? 'Save Budget' : 'Add Budget'} - </Button> - - {Boolean(id) && ( - <Button - onClick={() => removeBudget()} - type="delete" - style={{ margin: '20px 0' }} - > - Delete Budget - </Button> - )} - </Container> - </Rodal> - ); -}; - -export default BudgetModal; diff --git a/components/Button/__snapshots__/test.tsx.snap b/components/Button/__snapshots__/test.tsx.snap deleted file mode 100644 index 14165c8..0000000 --- a/components/Button/__snapshots__/test.tsx.snap +++ /dev/null @@ -1,11 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Button renders the button as expected 1`] = ` -<button - className="Button__StyledButton-sc-1hxbnbg-0 undefined Button Button--primary " - disabled={false} - type="button" -> - Hello -</button> -`; diff --git a/components/Button/index.tsx b/components/Button/index.tsx deleted file mode 100644 index da6747e..0000000 --- a/components/Button/index.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import React, { forwardRef } from 'react'; -import styled from 'styled-components'; - -import styles from './styles.module.scss'; - -interface ButtonProps { - element?: 'button' | 'a'; - isDisabled?: boolean; - type?: 'primary' | 'secondary' | 'delete'; - href?: string; - onClick?: any; - className?: string; - width?: '' | 'large' | 'tiny'; - style?: any; -} - -const Button: React.FC<ButtonProps> = forwardRef( - (props: ButtonProps, ref: any) => { - const { element, className, type, isDisabled, width, ...remainingProps } = - props; - - if (element === 'button') { - const StyledButton = styled.button.attrs({ - className: `${styles[className] || ''} ${styles.Button} ${ - styles[`Button--${type}`] - } ${width ? styles[`Button--${width}`] : ''}`, - })``; - return ( - <StyledButton - ref={ref} - type="button" - disabled={isDisabled} - {...remainingProps} - /> - ); - } - - const StyledAnchor = styled.a.attrs({ - className: `${styles[className] || ''} ${styles.Button} ${ - styles[`Button--${type}`] - } ${width ? styles[`Button--${width}`] : ''}`, - })``; - - return <StyledAnchor ref={ref} {...remainingProps} />; - }, -); - -Button.defaultProps = { - element: 'button', - isDisabled: false, - type: 'primary', - width: '', -}; - -export default Button; diff --git a/components/Button/styles.module.scss b/components/Button/styles.module.scss deleted file mode 100644 index ee6da09..0000000 --- a/components/Button/styles.module.scss +++ /dev/null @@ -1,87 +0,0 @@ -@import 'styles/__variables'; - -$transition-speed: 140ms; - -a.Button { - display: inline-block; - padding: 1.3rem 1.8rem; - - &--large { - padding: 1.3rem 4.2rem; - } - - &--tiny { - font-size: 0.85rem; - line-height: 1.2rem; - margin: 0 auto; - text-align: center; - padding: 0.5rem 0.8rem; - font-weight: normal; - } -} - -button.Button { - display: block; - padding: 1rem 1.8rem; - - &--large { - padding: 1rem 4.2rem; - } - - &--tiny { - padding: 1rem; - } -} - -.Button { - color: $color-white; - font-size: 1.3rem; - line-height: 1.5rem; - margin: 0 auto; - text-align: center; - padding: 1rem 1.3rem; - border-radius: 5px; - cursor: pointer; - text-decoration: none; - font-weight: 500; - z-index: 0; - position: relative; - background-size: 100%; - transition: all $transition-speed ease-in; - border: none; - - &:focus, - &:hover { - color: $color-white; - box-shadow: 1px 1px 3px $color-block-border; - text-shadow: 1px 1px 1px $color-text; - outline: none; - - opacity: 0.7; - } - - &--primary { - background-color: $color-menu-background; - } - - &--secondary { - background-color: $color-light-gray; - - @media (prefers-color-scheme: dark) { - background-color: $color-text-gray; - } - @at-root .theme-dark #{&} { - background-color: $color-text-gray; - } - - &:focus, - &:hover { - box-shadow: 1px 1px 3px $color-block-border; - text-shadow: 1px 1px 1px $color-block-border; - } - } - - &--delete { - background-color: $color-background-red; - } -} diff --git a/components/Button/test.tsx b/components/Button/test.tsx deleted file mode 100644 index 18a1776..0000000 --- a/components/Button/test.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import React from 'react'; -import renderer from 'react-test-renderer'; -import { shallow } from 'enzyme'; -import expect from 'expect'; -import enzymify from 'expect-enzyme'; - -import Button from './index'; - -expect.extend(enzymify()); - -describe('Button', () => { - it('renders the button without errors', () => { - const wrapper = shallow(<Button>Hello</Button>); - expect(wrapper.first().text()).toBe('Hello'); - }); - - it('renders the button as expected', () => { - const tree = renderer.create(<Button>Hello</Button>).toJSON(); - expect(tree).toMatchSnapshot(); - }); -}); diff --git a/components/Expense/index.tsx b/components/Expense/index.tsx deleted file mode 100644 index 7a8230f..0000000 --- a/components/Expense/index.tsx +++ /dev/null @@ -1,81 +0,0 @@ -import React from 'react'; -import moment from 'moment'; -import styled from 'styled-components'; - -import { formatNumber } from 'lib/utils'; -import { colors, fontSizes } from 'lib/constants'; - -import * as T from 'lib/types'; - -interface ExpenseProps extends T.Expense { - currency: T.Currency; - onClick: () => void; -} - -const Container = styled.section` - display: flex; - flex: 1; - flex-direction: row; - justify-content: space-between; - align-items: flex-start; - padding: 14px 16px; - border-radius: 12px; - box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.1); - background-color: ${colors().background}; - margin: 8px; - cursor: pointer; - min-width: 200px; -`; - -const LeftColumn = styled.div` - display: flex; - flex: 0.5; - flex-direction: column; -`; -const Cost = styled.span` - color: ${colors().text}; - font-size: ${fontSizes.label}px; - font-weight: bold; - text-align: left; -`; -const Budget = styled.span` - color: ${colors().secondaryText}; - font-size: ${fontSizes.text}px; - font-weight: normal; - text-align: left; - margin-top: 6px; -`; -const Description = styled.div` - color: ${colors().text}; - font-size: ${fontSizes.mediumText}px; - font-weight: normal; - text-align: left; - padding: 0 6px; -`; -const Date = styled.div` - color: ${colors().secondaryText}; - font-size: ${fontSizes.largeText}px; - font-weight: normal; - text-align: right; - text-transform: uppercase; -`; - -const Expense = (props: ExpenseProps) => { - const expenseDate = moment(props.date, 'YYYY-MM-DD'); - return ( - <Container onClick={props.onClick}> - <LeftColumn> - <Cost>{formatNumber(props.currency, props.cost)}</Cost> - <Budget>{props.budget}</Budget> - </LeftColumn> - <Description>{props.description}</Description> - <Date> - {expenseDate.format('DD')} - {'\n'} - {expenseDate.format('MMM')} - </Date> - </Container> - ); -}; - -export default Expense; diff --git a/components/ExpenseModal.tsx b/components/ExpenseModal.tsx deleted file mode 100644 index c825cf0..0000000 --- a/components/ExpenseModal.tsx +++ /dev/null @@ -1,252 +0,0 @@ -import React, { useState, useCallback } from 'react'; -import styled from 'styled-components'; -import Rodal from 'rodal'; -import Swal from 'sweetalert2'; - -import Button from 'components/Button'; -import { showNotification } from 'lib/utils'; -import { saveExpense, deleteExpense } from 'lib/data-utils'; -import { colors, fontSizes } from 'lib/constants'; -import * as T from 'lib/types'; - -interface ExpenseModalProps { - isOpen: boolean; - onClose: () => void; - id: string; - cost: number; - description: string; - budget: string; - date: string; - budgets: T.Budget[]; - reloadData: () => Promise<void>; -} - -const Container = styled.section` - display: flex; - flex-direction: column; - flex: 1; - background-color: ${colors().background}; - padding: 0 16px; -`; - -const Label = styled.label` - color: ${colors().inputLabel}; - font-size: ${fontSizes.inputLabel}px; - font-weight: bold; - text-align: left; - margin-top: 38px; -`; - -const Input = styled.input` - font-family: inherit; - color: ${colors().inputField}; - font-size: ${fontSizes.inputField}px; - font-weight: normal; - text-align: left; - margin-top: 8px; - background-color: ${colors().background}; - padding: 5px 8px; - border: 1px solid ${colors().secondaryBackground}; - border-radius: 5px; - outline: none; - &::-webkit-input-placeholder { - color: ${colors().inputPlaceholder}; - } - &:hover, - &:focus, - &:active { - box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.2); - } -`; - -const Select = styled.select` - color: ${colors().inputField}; - font-size: ${fontSizes.inputField}px; - font-weight: normal; - text-align: left; - margin-top: 8px; - background-color: ${colors().background}; - padding: 5px 8px; - border: 1px solid ${colors().secondaryBackground}; - border-radius: 5px; - outline: none; - &::-webkit-input-placeholder { - color: ${colors().inputPlaceholder}; - } - &:hover, - &:focus, - &:active { - box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.2); - } -`; - -const ExpenseModal = (props: ExpenseModalProps) => { - const [isSubmitting, setIsSubmitting] = useState(false); - const [description, setDescription] = useState(props.description); - const [cost, setCost] = useState(props.cost.toString()); - const [budget, setBudget] = useState(props.budget); - const [date, setDate] = useState(props.date); - - const { id, isOpen, budgets, reloadData } = props; - - const onClose = useCallback(() => { - const { onClose: closeModal } = props; - setDescription(''); - setCost(''); - setBudget(''); - setDate(''); - closeModal(); - }, []); - - const addExpense = async () => { - if (isSubmitting) { - // Ignore sequential clicks - return; - } - - setIsSubmitting(true); - - const parsedExpense: T.Expense = { - id: id || 'newExpense', - description, - cost: Number.parseFloat(cost.replace(',', '.')), - budget, - date, - }; - - const success = await saveExpense(parsedExpense); - - setIsSubmitting(false); - - if (success) { - showNotification(`Expense ${id ? 'updated' : 'added'} successfully.`); - onClose(); - } - - await reloadData(); - }; - - const removeExpense = async () => { - if (isSubmitting) { - // Ignore sequential clicks - return; - } - - const confirmationResult = await Swal.fire({ - icon: 'warning', - title: 'Are you sure?', - text: 'Are you sure you want to delete this expense?\n\nThis action is irreversible.', - showDenyButton: true, - showCancelButton: true, - confirmButtonText: 'Yes!', - denyButtonText: 'Nope, cancel.', - }); - - if (!confirmationResult || !confirmationResult.isConfirmed) { - return; - } - - setIsSubmitting(true); - - const success = await deleteExpense(id); - - setIsSubmitting(false); - - if (success) { - showNotification('Expense deleted successfully.'); - onClose(); - } - - await reloadData(); - }; - - const onKeyDown = useCallback( - (event: React.KeyboardEvent<HTMLInputElement>) => { - // @ts-ignore: Convert comma to dot - if (event.key === ',' && event.target.type === 'number') { - event.preventDefault(); - event.stopPropagation(); - setCost(`${cost}.`); - } - - if (event.key === 'Enter') { - event.preventDefault(); - event.stopPropagation(); - addExpense(); - } - }, - [cost, description, budget, date], - ); - - return ( - <Rodal visible={isOpen} onClose={onClose} animation="slideDown"> - <Container> - <Label>Cost</Label> - <Input - placeholder="10.99" - onChange={(event) => setCost(event.target.value)} - value={cost} - autoComplete="off" - type="number" - inputMode="decimal" - onKeyDown={onKeyDown} - /> - - <Label>Description</Label> - <Input - placeholder="Lunch" - onChange={(event) => setDescription(event.target.value)} - value={description} - autoComplete="off" - type="text" - onKeyDown={onKeyDown} - /> - - <Label>Budget</Label> - <Select - placeholder="Misc" - onChange={(event) => - setBudget(budgets[event.target.selectedIndex].name) - } - value={budget || 'Misc'} - > - {budgets.map((budgetOption: T.Budget) => ( - <option key={budgetOption.id} value={budgetOption.name}> - {budgetOption.name} - </option> - ))} - </Select> - - <Label>Date</Label> - <Input - placeholder="Today" - onChange={(event) => setDate(event.target.value)} - value={date} - autoComplete="off" - type="date" - onKeyDown={onKeyDown} - /> - - <Button - onClick={() => addExpense()} - type="primary" - style={{ margin: '20px 0' }} - > - {id ? 'Save Expense' : 'Add Expense'} - </Button> - - {Boolean(id) && ( - <Button - onClick={() => removeExpense()} - type="delete" - style={{ margin: '20px 0' }} - > - Delete Expense - </Button> - )} - </Container> - </Rodal> - ); -}; - -export default ExpenseModal; diff --git a/components/FilterBudgetModal.tsx b/components/FilterBudgetModal.tsx deleted file mode 100644 index 25337d2..0000000 --- a/components/FilterBudgetModal.tsx +++ /dev/null @@ -1,73 +0,0 @@ -import React from 'react'; -import styled from 'styled-components'; -import Rodal from 'rodal'; -import Switch from 'react-toggle-switch'; - -import { colors, fontSizes } from 'lib/constants'; - -import * as T from 'lib/types'; - -interface FilterBudgetModalProps { - isOpen: boolean; - onClose: () => void; - onFilterBudgetToggle: (budgetName: string, newValue: boolean) => void; - budgets: T.Budget[]; - filterBudgets: Set<string>; -} - -const Container = styled.section` - display: flex; - flex-direction: column; - flex: 1; - background-color: ${colors().background}; - padding: 0 16px; -`; - -const IntroText = styled.p` - color: ${colors().secondaryText}; - font-size: ${fontSizes.mediumText}; - margin-bottom: 20px; -`; - -const Budget = styled.section<{ isOdd: boolean }>` - display: flex; - flex-direction: row; - justify-content: space-between; - align-items: center; - background-color: ${({ isOdd }) => - isOdd ? colors().alternateBackground : colors().background}; - padding: 8px; - border-radius: 10px; -`; - -const BudgetName = styled.span` - font-size: ${fontSizes.label}; -`; - -const FilterBudgetModal = (props: FilterBudgetModalProps) => { - const { isOpen, onClose, budgets, onFilterBudgetToggle, filterBudgets } = - props; - return ( - <Rodal visible={isOpen} onClose={onClose} animation="slideDown"> - <Container> - <IntroText>Choose which budgets to filter by:</IntroText> - {budgets.map((budget, index) => ( - <Budget key={budget.id} isOdd={index % 2 !== 0}> - <BudgetName>{budget.name}</BudgetName> - <Switch - on={filterBudgets.has(budget.name)} - onClick={() => - onFilterBudgetToggle( - budget.name, - !filterBudgets.has(budget.name), - ) - } - /> - </Budget> - ))} - </Container> - </Rodal> - ); -}; - -export default FilterBudgetModal; diff --git a/components/IconButton.tsx b/components/IconButton.tsx deleted file mode 100644 index 0f34da6..0000000 --- a/components/IconButton.tsx +++ /dev/null @@ -1,63 +0,0 @@ -import React from 'react'; -import { IonIcon, addIcons } from 'react-svg-ionicons'; -import styled from 'styled-components'; -import settings from 'react-svg-ionicons/icons/settings'; -import options from 'react-svg-ionicons/icons/options'; -import arrowBack from 'react-svg-ionicons/icons/arrow-back'; -import arrowForward from 'react-svg-ionicons/icons/arrow-forward'; - -interface IconButtonProps { - icon: 'settings' | 'options' | 'arrow-back' | 'arrow-forward'; - size: number; - color: string; - onClick: () => void; - className?: string; -} - -const bundle = { - settings, - options, - 'arrow-back': arrowBack, - 'arrow-forward': arrowForward, -}; -addIcons(bundle); - -const Container = styled.div` - display: flex; - flex: 1; - justify-content: center; - align-items: center; - padding: 0 10px; -`; - -const Button = styled.button` - background: transparent; - border: none; - align-items: center; - padding: 5px 10px; - cursor: pointer; - outline: none; - &:hover, - &:focus, - &:active { - opacity: 0.6; - } -`; - -const IconButton = ({ - icon, - size, - color, - className, - onClick, -}: IconButtonProps) => { - return ( - <Container className={className}> - <Button onClick={() => onClick()}> - <IonIcon name={icon} size={size} color={color} mode="ios" /> - </Button> - </Container> - ); -}; - -export default IconButton; diff --git a/components/ImportExportModal.tsx b/components/ImportExportModal.tsx deleted file mode 100644 index e3fbc27..0000000 --- a/components/ImportExportModal.tsx +++ /dev/null @@ -1,204 +0,0 @@ -import React, { useState } from 'react'; -import styled from 'styled-components'; -import Rodal from 'rodal'; -import Swal from 'sweetalert2'; - -import Button from 'components/Button'; -import { showNotification } from 'lib/utils'; -import { exportAllData, importData } from 'lib/data-utils'; -import { colors, fontSizes } from 'lib/constants'; -import * as T from 'lib/types'; - -type ImportedFileData = { - budgets?: T.Budget[]; - expenses?: T.Expense[]; -}; - -interface ImportExportModalProps { - isOpen: boolean; - onClose: () => void; - setIsLoading: (isLoading: boolean) => void; -} - -const Container = styled.section` - display: flex; - flex-direction: column; - flex: 1; - background-color: ${colors().background}; - padding: 0 16px; -`; - -const Label = styled.label` - color: ${colors().inputLabel}; - font-size: ${fontSizes.inputLabel}px; - font-weight: bold; - text-align: left; - margin-top: 38px; -`; - -const Note = styled.span` - color: ${colors().inputLabel}; - font-size: ${fontSizes.mediumText}px; - font-weight: normal; - text-align: left; - margin-top: 30px; -`; - -const ImportExportModal = (props: ImportExportModalProps) => { - const [isSubmitting, setIsSubmitting] = useState(false); - - const { isOpen, onClose, setIsLoading } = props; - - const onRequestImport = async () => { - if (isSubmitting) { - // Ignore sequential taps - return; - } - - const importFileDialogResult = await Swal.fire({ - icon: 'warning', - input: 'file', - title: 'Choose JSON File', - inputAttributes: { - accept: 'text/pain,application/json,.json', - 'aria-label': 'Import your budgets and expenses', - }, - }); - - if (!importFileDialogResult || !importFileDialogResult.value) { - return; - } - - const reader = new FileReader(); - reader.onload = async (fileRead) => { - const importFileContents = fileRead.target.result; - - let importedFileData: ImportedFileData = {}; - - try { - importedFileData = JSON.parse(importFileContents.toString()); - } catch (error) { - importedFileData = {}; - } - - if ( - !Object.prototype.hasOwnProperty.call(importedFileData, 'budgets') && - !Object.prototype.hasOwnProperty.call(importedFileData, 'expenses') - ) { - showNotification( - 'Could not parse the file. Please confirm what you chose is correct.', - 'error', - ); - return; - } - - const budgets = importedFileData.budgets || []; - const expenses = importedFileData.expenses || []; - - const mergeOrReplaceDialogResult = await Swal.fire({ - icon: 'question', - title: 'Merge or Replace?', - text: 'Do you want to merge this with your existing data, or replace it?', - showCancelButton: true, - showDenyButton: true, - confirmButtonText: 'Merge', - denyButtonText: 'Replace', - cancelButtonText: 'Wait, cancel.', - }); - - if ( - mergeOrReplaceDialogResult.isConfirmed || - mergeOrReplaceDialogResult.isDenied - ) { - setIsSubmitting(true); - setIsLoading(true); - - const success = await importData( - mergeOrReplaceDialogResult.isDenied, - budgets, - expenses, - ); - - setIsSubmitting(false); - setIsLoading(false); - - if (success) { - onClose(); - } - } - }; - - reader.readAsText(importFileDialogResult.value); - }; - - const onRequestExport = async () => { - if (isSubmitting) { - // Ignore sequential taps - return; - } - - setIsSubmitting(true); - - const fileName = `data-export-${new Date() - .toISOString() - .substring(0, 19) - .replace(/:/g, '-')}.json`; - - const exportData = await exportAllData(); - - const exportContents = JSON.stringify(exportData, null, 2); - - // Add content-type - const jsonContent = `data:application/json;charset=utf-8,${exportContents}`; - - // Download the file - const data = encodeURI(jsonContent); - const link = document.createElement('a'); - link.setAttribute('href', data); - link.setAttribute('download', fileName); - link.click(); - link.remove(); - - setIsSubmitting(false); - - showNotification('Data exported successfully!'); - }; - - return ( - <Rodal visible={isOpen} onClose={onClose} animation="slideDown"> - <Container> - <Label>Import</Label> - <Note> - Import a JSON file exported from Budget Zen (v1 or v2) before. - </Note> - - <Button - element="a" - href="https://budgetzen.net/import-export-file-format" - type="secondary" - style={{ margin: '20px 0', alignSelf: 'center' }} - > - Learn more - </Button> - - <Button - onClick={() => onRequestImport()} - type="secondary" - style={{ margin: '20px 0', alignSelf: 'center' }} - > - Import Data - </Button> - - <Button - onClick={() => onRequestExport()} - type="primary" - style={{ margin: '20px 0', alignSelf: 'center' }} - > - Export Data - </Button> - </Container> - </Rodal> - ); -}; - -export default ImportExportModal; diff --git a/components/Layout/Footer.module.scss b/components/Layout/Footer.module.scss deleted file mode 100644 index 8885c89..0000000 --- a/components/Layout/Footer.module.scss +++ /dev/null @@ -1,89 +0,0 @@ -@import 'styles/__variables'; - -.Footer { - display: block; - padding: 20px 10px; - margin: 20px auto 0; - text-align: center; - background-color: #dfdfdf; - - @media (prefers-color-scheme: dark) { - background-color: #161616; - } - @at-root .theme-dark #{&} { - background-color: #161616; - } - - &__faq { - display: block; - padding: 1em 2em 2em; - border-bottom: 1px solid #999; - - h3 { - font-size: 1.3em; - font-weight: 500; - line-height: 1.5em; - margin-bottom: 1em; - } - } - - &__faq-items { - display: block; - max-width: 100%; - margin: 0 auto; - - @media #{$bigger-screen} { - @include flex; - flex-wrap: wrap; - width: $max-width; - } - } - - &__faq-item { - display: block; - margin: 1em 1em 2em; - text-align: left; - line-height: 1.4em; - font-size: 0.9em; - text-align: center; - - @media #{$bigger-screen} { - margin: 1em; - width: 45%; - } - - h4 { - font-size: 1.1em; - font-weight: 500; - margin-bottom: 0.2em; - } - } - - &__links { - font-size: 0.8rem; - line-height: 1rem; - font-weight: 400; - margin-top: 1.5em; - - a { - text-decoration: none; - - @media (prefers-color-scheme: dark) { - color: $color-menu-background-hover; - } - @at-root .theme-dark #{&} { - color: $color-menu-background-hover; - } - - &:hover, - &:focus { - @media (prefers-color-scheme: dark) { - color: #f3f3f3; - } - @at-root .theme-dark #{&} { - color: #f3f3f3; - } - } - } - } -} diff --git a/components/Layout/Footer.test.tsx b/components/Layout/Footer.test.tsx deleted file mode 100644 index b485924..0000000 --- a/components/Layout/Footer.test.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react'; -import { shallow } from 'enzyme'; -import expect from 'expect'; -import enzymify from 'expect-enzyme'; - -import Footer from './Footer'; - -expect.extend(enzymify()); - -describe('Footer', () => { - it('renders the Footer with a link', () => { - const wrapper = shallow(<Footer />); - expect( - wrapper.find('a[href="https://brunobernardino.com"]').length, - ).toEqual(1); - }); -}); diff --git a/components/Layout/Footer.tsx b/components/Layout/Footer.tsx deleted file mode 100644 index 5bfcec0..0000000 --- a/components/Layout/Footer.tsx +++ /dev/null @@ -1,73 +0,0 @@ -import Link from 'next/link'; - -import styles from './Footer.module.scss'; - -const Footer = ({ hasValidSession }: { hasValidSession: boolean }) => { - return ( - <footer className={styles.Footer}> - <section className={styles.Footer__faq}> - <h3>Frequently asked questions</h3> - - <div className={styles['Footer__faq-items']}> - <div className={styles['Footer__faq-item']}> - <h4>What is Budget Zen?</h4> - <p> - Simple and encrypted budget management.{' '} - <a href="https://budgetzen.net">Read more here</a>. - </p> - </div> - - {hasValidSession ? ( - <> - <div className={styles['Footer__faq-item']}> - <h4>How can I manage my subscription?</h4> - <p> - <Link href="/billing"> - <a>In your billing section</a> - </Link> - . - </p> - </div> - <div className={styles['Footer__faq-item']}> - <h4>How can I change my email or password / ecryption key?</h4> - <p> - <Link href="/email-password"> - <a>Right here</a> - </Link> - . - </p> - </div> - </> - ) : ( - <div className={styles['Footer__faq-item']}> - <h4>How can I subscribe?</h4> - <p> - <Link href="/pricing"> - <a>In the pricing section</a> - </Link> - . - </p> - </div> - )} - - <div className={styles['Footer__faq-item']}> - <h4>Where's the code for this web app?</h4> - <p> - <a href="https://github.com/BrunoBernardino/budgetzen-web"> - It's in GitHub - </a> - . - </p> - </div> - </div> - </section> - <h3 className={styles.Footer__links}> - <a href="https://budgetzen.net/privacy">Privacy Policy</a> |{' '} - <a href="mailto:me@brunobernardino.com">Get Help</a> | by{' '} - <a href="https://brunobernardino.com">Bruno Bernardino</a> - </h3> - </footer> - ); -}; - -export default Footer; diff --git a/components/Layout/Header.module.scss b/components/Layout/Header.module.scss deleted file mode 100644 index cd55170..0000000 --- a/components/Layout/Header.module.scss +++ /dev/null @@ -1,15 +0,0 @@ -@import 'styles/__variables'; - -.Header { - display: block; - text-align: right; - - &__logo { - display: block; - margin: 0 1em; - - img { - width: 220px; - } - } -} diff --git a/components/Layout/Header.tsx b/components/Layout/Header.tsx deleted file mode 100644 index bdf75c7..0000000 --- a/components/Layout/Header.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import Link from 'next/link'; - -import styles from './Header.module.scss'; - -const Header = () => { - return ( - <header className={styles.Header}> - <h1 className={styles.Header__logo}> - <Link href="/"> - <a> - <img - alt="Logo: stylized letters Budget Zen" - src="/images/logo.svg" - /> - </a> - </Link> - </h1> - </header> - ); -}; - -export default Header; diff --git a/components/Layout/Main.tsx b/components/Layout/Main.tsx deleted file mode 100644 index 4f550a4..0000000 --- a/components/Layout/Main.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import { ReactNode } from 'react'; -import Head from 'next/head'; -import Helmet from 'react-helmet'; - -import { Footer } from 'components/Layout'; - -interface MainLayoutProps { - children: ReactNode; - title?: string; - description?: string; - keywords?: string; - hasValidSession?: boolean; -} - -const MainLayout = ({ - children, - title, - description, - keywords, - hasValidSession, -}: MainLayoutProps) => { - const metaTags = [ - { property: 'og:title', content: title }, - { - name: 'description', - content: description, - }, - { - name: 'keywords', - content: keywords, - }, - ]; - - const SEOOverride: JSX.Element = - title && description ? <Helmet title={title} meta={metaTags} /> : null; - - return ( - <> - <Head> - {title && <title>{title}</title>} - {title && <meta property="og:title" content={title} />} - {description && <meta name="description" content={description} />} - {keywords && <meta name="keywords" content={keywords} />} - </Head> - {SEOOverride} - <div className="wrapper">{children}</div> - <Footer hasValidSession={Boolean(hasValidSession)} /> - </> - ); -}; - -export default MainLayout; diff --git a/components/Layout/index.ts b/components/Layout/index.ts deleted file mode 100644 index b10b1cd..0000000 --- a/components/Layout/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export { default as Header } from './Header'; -export { default as Footer } from './Footer'; -export { default as Main } from './Main'; diff --git a/components/Loading/styles.module.scss b/components/Loading/styles.module.scss deleted file mode 100644 index 240a5b5..0000000 --- a/components/Loading/styles.module.scss +++ /dev/null @@ -1,25 +0,0 @@ -.Loading { - position: fixed; - top: 0; - left: 0; - display: flex; - align-items: center; - justify-content: center; - width: 100%; - height: 100%; - z-index: 10000; - background: rgba(0, 0, 0, 0.7); - transition: all 200ms ease-in-out; - opacity: 0; - visibility: hidden; - - svg path, - svg rect { - fill: #ffffff; - } - - &--show { - visibility: visible; - opacity: 1; - } -} diff --git a/components/Loading/test.tsx b/components/Loading/test.tsx deleted file mode 100644 index 0997141..0000000 --- a/components/Loading/test.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import { shallow } from 'enzyme'; -import expect from 'expect'; -import enzymify from 'expect-enzyme'; - -import Loading from './index'; - -expect.extend(enzymify()); - -describe('Loading', () => { - it('renders the loading hidden', () => { - const wrapper = shallow(<Loading />); - expect(wrapper.find('.Loading--show').exists()).toBe(false); - }); - - it('renders the loading visible', () => { - const wrapper = shallow(<Loading isShowing />); - expect(wrapper.find('.Loading--show').exists()).toBe(true); - }); -}); diff --git a/components/MonthNavigation.tsx b/components/MonthNavigation.tsx deleted file mode 100644 index b9cf6b3..0000000 --- a/components/MonthNavigation.tsx +++ /dev/null @@ -1,66 +0,0 @@ -import React, { useCallback } from 'react'; -import moment from 'moment'; -import styled from 'styled-components'; - -import IconButton from 'components/IconButton'; -import { colors } from 'lib/constants'; - -interface MonthNavigationProps { - currentMonth: string; - handleChangeMonth: (newMonth: string) => void; -} - -const Container = styled.section` - display: flex; - margin-top: 20; - align-items: center; - flex-direction: row; - justify-content: space-between; -`; -const Text = styled.span` - color: ${colors().inputLabel}; - width: 70%; - padding: 0 20px; - font-size: 24px; - font-weight: bold; - text-align: center; -`; - -const MonthNavigation = ({ - currentMonth, - handleChangeMonth, -}: MonthNavigationProps) => { - const goBack = useCallback(() => { - const previousMonth = moment(currentMonth, 'YYYY-MM') - .subtract(1, 'month') - .format('YYYY-MM'); - handleChangeMonth(previousMonth); - }, [currentMonth]); - - const goForward = useCallback(() => { - const nextMonth = moment(currentMonth, 'YYYY-MM') - .add(1, 'month') - .format('YYYY-MM'); - handleChangeMonth(nextMonth); - }, [currentMonth]); - - return ( - <Container> - <IconButton - onClick={goBack} - icon="arrow-back" - size={32} - color={colors().inputLabel} - /> - <Text>{moment(currentMonth, 'YYYY-MM').format('MMMM YYYY')}</Text> - <IconButton - onClick={goForward} - icon="arrow-forward" - size={32} - color={colors().inputLabel} - /> - </Container> - ); -}; - -export default MonthNavigation; diff --git a/components/Panels/AddExpense.tsx b/components/Panels/AddExpense.tsx deleted file mode 100644 index 6f3b976..0000000 --- a/components/Panels/AddExpense.tsx +++ /dev/null @@ -1,227 +0,0 @@ -import React, { useState, useCallback } from 'react'; -import styled from 'styled-components'; - -import Button from 'components/Button'; -import { colors, fontSizes } from 'lib/constants'; -import { showNotification } from 'lib/utils'; -import { saveExpense } from 'lib/data-utils'; -import * as T from 'lib/types'; - -interface AddExpenseProps { - budgets: T.Budget[]; - reloadData: () => Promise<void>; -} - -const Container = styled.section` - display: flex; - flex-direction: column; - flex: 1; - background-color: ${colors().background}; - padding: 0 16px; - width: 86vw; - border-radius: 5px; - margin: 10px 0 30px; - - @media only screen and (min-width: 800px) { - max-width: 280px; - margin-top: 5px; - margin-bottom: 10px; - } -`; - -const Logo = styled.img` - margin-top: 10px; - margin-bottom: -20px; - height: 50px; - resize-mode: contain; - align-self: center; -`; - -const Label = styled.label` - color: ${colors().inputLabel}; - font-size: ${fontSizes.inputLabel}px; - font-weight: bold; - text-align: left; - margin-top: 38px; -`; - -const Input = styled.input` - font-family: inherit; - color: ${colors().inputField}; - font-size: ${fontSizes.inputField}px; - font-weight: normal; - text-align: left; - margin-top: 8px; - background-color: ${colors().background}; - padding: 5px 8px; - border: 1px solid ${colors().secondaryBackground}; - border-radius: 5px; - outline: none; - &::-webkit-input-placeholder { - color: ${colors().inputPlaceholder}; - } - &:hover, - &:focus, - &:active { - box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.2); - } -`; - -const Select = styled.select` - color: ${colors().inputField}; - font-size: ${fontSizes.inputField}px; - font-weight: normal; - text-align: left; - margin-top: 8px; - background-color: ${colors().background}; - padding: 5px 8px; - border: 1px solid ${colors().secondaryBackground}; - border-radius: 5px; - outline: none; - &::-webkit-input-placeholder { - color: ${colors().inputPlaceholder}; - } - &:hover, - &:focus, - &:active { - box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.2); - } -`; - -const AddExpense = ({ budgets, reloadData }: AddExpenseProps) => { - const [isSubmitting, setIsSubmitting] = useState(false); - const [description, setDescription] = useState(''); - const [cost, setCost] = useState(''); - const [budget, setBudget] = useState(''); - const [date, setDate] = useState(''); - - const addExpense = async () => { - if (isSubmitting) { - // Ignore sequential clicks - return; - } - - setIsSubmitting(true); - - const parsedExpense: T.Expense = { - id: 'newExpense', - cost: Number.parseFloat(cost.replace(',', '.')), - description, - budget, - date, - }; - - const success = await saveExpense(parsedExpense); - - setIsSubmitting(false); - - if (success) { - setDescription(''); - setCost(''); - setBudget(''); - setDate(''); - showNotification('Expense added successfully.'); - } - - await reloadData(); - }; - - const onKeyDown = useCallback( - (event: React.KeyboardEvent<HTMLInputElement>) => { - // @ts-ignore: Convert comma to dot - if (event.key === ',' && event.target.type === 'number') { - event.preventDefault(); - event.stopPropagation(); - setCost(`${cost}.`); - } - - if (event.key === 'Enter') { - event.preventDefault(); - event.stopPropagation(); - addExpense(); - } - }, - [cost, description, budget, date], - ); - - const budgetsToShow = [...budgets]; - - if (budgetsToShow.length === 0) { - // Only the name matters/is used below - budgetsToShow.push({ - id: 'fake', - name: 'Misc', - month: '', - value: 0, - }); - } - - return ( - <Container> - <Logo - alt="Logo: stylized letters Budget Zen" - src="/images/logomark.png" - /> - <Label>Cost</Label> - <Input - placeholder="10.99" - onChange={(event) => setCost(event.target.value)} - value={cost} - autoComplete="off" - type="number" - inputMode="decimal" - onKeyDown={onKeyDown} - data-automation="add-expense-cost" - /> - - <Label>Description</Label> - <Input - placeholder="Lunch" - onChange={(event) => setDescription(event.target.value)} - value={description} - autoComplete="off" - type="text" - onKeyDown={onKeyDown} - data-automation="add-expense-description" - /> - - <Label>Budget</Label> - <Select - placeholder="Misc" - onChange={(event) => - setBudget(budgets[event.target.selectedIndex].name) - } - value={budget || 'Misc'} - data-automation="add-expense-budget" - > - {budgetsToShow.map((budgetOption: T.Budget) => ( - <option key={budgetOption.id} value={budgetOption.name}> - {budgetOption.name} - </option> - ))} - </Select> - - <Label>Date</Label> - <Input - placeholder="Today" - onChange={(event) => setDate(event.target.value)} - value={date} - autoComplete="off" - type="date" - onKeyDown={onKeyDown} - data-automation="add-expense-date" - /> - <Button - isDisabled={isSubmitting} - onClick={() => addExpense()} - type="primary" - style={{ margin: '20px 0' }} - data-automation="add-expense-button" - > - {isSubmitting ? 'Adding...' : 'Add Expense'} - </Button> - </Container> - ); -}; - -export default AddExpense; diff --git a/components/Panels/All.tsx b/components/Panels/All.tsx deleted file mode 100644 index 51b1980..0000000 --- a/components/Panels/All.tsx +++ /dev/null @@ -1,183 +0,0 @@ -import React, { useState, useEffect } from 'react'; -import moment from 'moment'; -import styled from 'styled-components'; -import { useAsync } from 'react-use'; -import { useRouter } from 'next/router'; - -import LogoutLink from 'modules/auth/LogoutLink'; -import { Loading } from 'components'; -import { getUserInfo, showNotification, getUserSession } from 'lib/utils'; -import { - initializeDb, - fetchBudgets, - fetchExpenses, - copyBudgets, -} from 'lib/data-utils'; -import * as T from 'lib/types'; - -import Navigation from './Navigation'; -import Expenses from './Expenses'; -import Budgets from './Budgets'; -import AddExpense from './AddExpense'; -import Settings from './Settings'; - -const Wrapper = styled.main` - display: flex; - flex: 1; - justify-content: center; - align-items: flex-start; - flex-direction: column-reverse; - max-width: 100vw; - - @media only screen and (min-width: 800px) { - flex-direction: row; - } -`; - -const LeftSide = styled.section` - display: flex; - flex: 1; - justify-content: flex-start; - align-items: center; - flex-direction: column; -`; - -const All = () => { - const router = useRouter(); - const [isLoading, setIsLoading] = useState(true); - const [monthInView, setMonthInView] = useState(moment().format('YYYY-MM')); - const [currency, setCurrency] = useState<T.Currency>('USD'); - const [theme, setTheme] = useState<T.Theme>('light'); - const [budgets, setBudgets] = useState<T.Budget[]>([]); - const [expenses, setExpenses] = useState<T.Expense[]>([]); - - type ReloadData = (options?: { - monthToLoad?: string; - isComingFromEmptyState?: boolean; - }) => Promise<void>; - const reloadData: ReloadData = async ({ - monthToLoad, - isComingFromEmptyState = false, - } = {}) => { - setIsLoading(true); - - const fetchedBudgets = await fetchBudgets(monthToLoad || monthInView); - setBudgets(fetchedBudgets); - - const fetchedExpenses = await fetchExpenses(monthToLoad || monthInView); - setExpenses(fetchedExpenses); - - // If this is for the current or next month and there are no budgets, create budgets based on the previous/current month. - if (fetchedBudgets.length === 0 && !isComingFromEmptyState) { - const currentMonth = moment().format('YYYY-MM'); - const nextMonth = moment().add(1, 'month').format('YYYY-MM'); - const previousMonth = moment().subtract(1, 'month').format('YYYY-MM'); - - if ( - (monthToLoad && monthToLoad === nextMonth) || - (!monthToLoad && monthInView === nextMonth) - ) { - await copyBudgets(currentMonth, nextMonth); - await reloadData({ monthToLoad, isComingFromEmptyState: true }); - return; - } - - if ( - (monthToLoad && monthToLoad === currentMonth) || - (!monthToLoad && monthInView === currentMonth) - ) { - await copyBudgets(previousMonth, currentMonth); - await reloadData({ monthToLoad, isComingFromEmptyState: true }); - return; - } - } - - setIsLoading(false); - }; - - const changeMonthInView = async (month: string) => { - const nextMonth = moment().add(1, 'month').format('YYYY-MM'); - - if (month > nextMonth) { - showNotification('Cannot travel further into the future!', 'error'); - return; - } - - setMonthInView(month); - - await reloadData({ monthToLoad: month }); - }; - - useAsync(async () => { - if (typeof window !== 'undefined') { - const userInfo = getUserInfo(); - setCurrency(userInfo.currency); - setTheme(userInfo.theme || 'light'); - - await initializeDb(); - - await reloadData(); - - const userSession = await getUserSession(); - - const trialDaysLeft = moment(userSession.trialExpirationDate).diff( - moment(), - 'days', - ); - if (userSession.subscriptionStatus !== 'active' && trialDaysLeft < 0) { - showNotification('Your trial has expired!', 'error'); - // Give people some time to logout or export - setTimeout(() => { - router.push('/pricing'); - }, 10000); - } - } - }, []); - - useEffect(() => { - if (theme === 'dark') { - document.getElementsByTagName('html')[0].classList.add('theme-dark'); - document.getElementsByTagName('body')[0].classList.add('theme-dark'); - } - }, [theme]); - - return ( - <Wrapper className="wrapper"> - <Loading isShowing={isLoading} /> - <LeftSide> - <Navigation - changeMonthInView={changeMonthInView} - monthInView={monthInView} - /> - <Wrapper> - <Expenses - monthInView={monthInView} - currency={currency} - budgets={budgets} - expenses={expenses} - reloadData={reloadData} - /> - <Budgets - monthInView={monthInView} - currency={currency} - budgets={budgets} - expenses={expenses} - reloadData={reloadData} - /> - </Wrapper> - </LeftSide> - <AddExpense budgets={budgets} reloadData={reloadData} /> - <Settings - currentCurrency={currency} - updateCurrency={setCurrency} - currentTheme={theme} - updateTheme={setTheme} - setIsLoading={setIsLoading} - reloadData={reloadData} - /> - <LogoutLink /> - </Wrapper> - ); -}; - -export default All; diff --git a/components/Panels/Billing.tsx b/components/Panels/Billing.tsx deleted file mode 100644 index 3c9ac86..0000000 --- a/components/Panels/Billing.tsx +++ /dev/null @@ -1,156 +0,0 @@ -import React, { useCallback } from 'react'; -import Link from 'next/link'; -import styled from 'styled-components'; -import userbase from 'userbase-js'; - -import { Title, Subtitle, Paragraph } from 'components'; -import { Header } from 'components/Layout'; -import Button from 'components/Button'; - -interface BillingProps { - hasValidSession: boolean; - hasValidSubscription: boolean; - isTrialing: boolean; - isSubscriptionCanceled: boolean; - isSubscriptionMonthly: boolean; -} - -const Hero = styled.section` - @media only screen and (min-width: 600px) { - display: flex; - align-items: center; - } -`; - -const HeroText = styled.section` - margin-right: 1em; -`; - -const Billing = ({ - hasValidSession, - hasValidSubscription, - isTrialing, - isSubscriptionCanceled, - isSubscriptionMonthly, -}: BillingProps) => { - const handleSubscriptionCancelClick = useCallback(async () => { - await userbase.cancelSubscription(); - window.location.reload(); - }, []); - - const handleSubscriptionResumeClick = useCallback(async () => { - await userbase.resumeSubscription(); - window.location.reload(); - }, []); - - const handlePaymentDetailsUpdateClick = useCallback(async () => { - await userbase.updatePaymentMethod({ - successUrl: window.location.href, - cancelUrl: window.location.href, - }); - }, []); - - return ( - <> - <Header /> - <Title>Billing</Title> - <Hero> - <HeroText> - <Paragraph>Billing is simple.</Paragraph> - <Paragraph> - Below, you can easily cancel your subscription anytime and email me - to ask for a refund. You can also update your payment details. - </Paragraph> - </HeroText> - </Hero> - {hasValidSession ? ( - hasValidSubscription ? ( - <> - <Subtitle>Thank you so much for your support!</Subtitle> - <Paragraph> - You're currently paying{' '} - <strong> - {isSubscriptionMonthly ? '€2 / month' : '€18 / year'} - </strong> - . - </Paragraph> - <Button - onClick={handlePaymentDetailsUpdateClick} - type="primary" - width="large" - style={{ margin: '2rem auto 1rem' }} - > - Update payment details - </Button> - {!isSubscriptionCanceled ? ( - <> - <Button - onClick={handleSubscriptionCancelClick} - type="delete" - style={{ margin: '5rem auto 1rem' }} - > - Cancel subscription - </Button> - <Paragraph isCentered> - The subscription will be canceled at the end of the current - billing period. - </Paragraph> - </> - ) : null} - {isSubscriptionCanceled ? ( - <> - <Paragraph style={{ marginTop: '5rem' }}> - Your subscription is currently set to be canceled at the end - of the current billing period. - </Paragraph> - <Button - onClick={handleSubscriptionResumeClick} - type="secondary" - width="large" - style={{ margin: '2rem auto 1rem' }} - > - Resume subscription - </Button> - </> - ) : null} - </> - ) : isTrialing ? ( - <> - <Subtitle>Your are on an active trial!</Subtitle> - <Paragraph> - If you're ready to pay, you probably want to check out the{' '} - <Link href="/pricing"> - <a>pricing section</a> - </Link>{' '} - instead. - </Paragraph> - </> - ) : ( - <> - <Subtitle>Your subscription has expired!</Subtitle> - <Paragraph> - You probably want to check out the{' '} - <Link href="/pricing"> - <a>pricing section</a> - </Link>{' '} - instead. - </Paragraph> - </> - ) - ) : ( - <> - <Subtitle>Signup or Login first</Subtitle> - <Paragraph> - Before you can pay, you need to{' '} - <Link href="/"> - <a>Signup or Login</a> - </Link>{' '} - first. - </Paragraph> - </> - )} - </> - ); -}; - -export default Billing; diff --git a/components/Panels/Budgets.tsx b/components/Panels/Budgets.tsx deleted file mode 100644 index 2adee4c..0000000 --- a/components/Panels/Budgets.tsx +++ /dev/null @@ -1,157 +0,0 @@ -import React, { useState } from 'react'; -import styled from 'styled-components'; -import moment from 'moment'; - -import Budget from 'components/Budget'; -import Button from 'components/Button'; -import BudgetModal from 'components/BudgetModal'; -import { sortByMissingBudget, showNotification } from 'lib/utils'; -import { colors, fontSizes } from 'lib/constants'; -import * as T from 'lib/types'; - -interface BudgetsProps extends T.PanelProps {} - -interface BudgetsToShow extends T.Budget { - expensesCost: number; -} - -// user-agent sniffing sucks, but I couldn't figure out why this problem only happens on Safari (macOS and iOS) -const safariFix = - typeof navigator !== 'undefined' && - navigator.userAgent && - navigator.userAgent.includes('Safari') - ? 'max-block-size: 100%;' - : ''; - -const Container = styled.section` - display: flex; - flex-direction: column; - flex: 1; - margin: 20px 10px; - max-height: 80vh; - overflow: auto; - ${safariFix} - width: 90vw; - - @media only screen and (min-width: 800px) { - width: auto; - margin: 0 10px; - } -`; - -const NoBudgetsFoundText = styled.p` - color: ${colors().secondaryText}; - text-align: center; - align-items: center; - flex: 1; - display: flex; - font-size: ${fontSizes.text}px; -`; - -const NoBudgetsFound = () => { - return ( - <NoBudgetsFoundText> - No budgets found for this month.{'\n'}Add one below! - </NoBudgetsFoundText> - ); -}; - -const defaultBudget = { - id: '', - name: '', - month: moment().startOf('month').format('YYYY-MM'), - value: 100, -}; - -const Budgets = ({ - currency, - monthInView, - budgets, - expenses, - reloadData, -}: BudgetsProps) => { - const [isBudgetModalOpen, setIsBudgetModalOpen] = useState(false); - const [chosenBudget, setChosenBudget] = useState({ - ...defaultBudget, - }); - - const openBudgetModal = (budget?: T.Budget) => { - if (budget && budget.id === 'total') { - showNotification("Can't edit the budget Total", 'error'); - return; - } - - setIsBudgetModalOpen(true); - setChosenBudget({ ...(budget || defaultBudget) }); - }; - - const closeBudgetModal = () => { - setIsBudgetModalOpen(false); - setChosenBudget({ ...defaultBudget }); - }; - - let totalCost = 0; - let totalBudget = 0; - - const budgetsToShow: BudgetsToShow[] = [...budgets] - .map((budget) => { - const budgetToShow = { - expensesCost: 0, - ...budget, - }; - - // Calculate expenses cost - expenses.forEach((expense) => { - if (expense.budget === budget.name) { - budgetToShow.expensesCost += expense.cost; - } - }); - - totalCost += budgetToShow.expensesCost; - totalBudget += budgetToShow.value; - - return budgetToShow; - }) - .sort(sortByMissingBudget); - - // Add Total budget - if (budgetsToShow.length > 0) { - budgetsToShow.unshift({ - id: 'total', - name: 'Total', - value: totalBudget, - expensesCost: totalCost, - month: monthInView, - }); - } - - return ( - <Container> - {budgetsToShow.map((budget) => ( - <Budget - key={budget.id} - {...budget} - currency={currency} - onClick={() => openBudgetModal(budget)} - /> - ))} - {budgetsToShow.length === 0 && <NoBudgetsFound />} - <Button - onClick={() => openBudgetModal()} - type="primary" - style={{ margin: '20px 10px' }} - > - Add Budget - </Button> - <BudgetModal - key={chosenBudget.id} - isOpen={isBudgetModalOpen} - onClose={() => closeBudgetModal()} - reloadData={reloadData} - {...chosenBudget} - /> - </Container> - ); -}; - -export default Budgets; diff --git a/components/Panels/EmailPassword.tsx b/components/Panels/EmailPassword.tsx deleted file mode 100644 index 474d0fe..0000000 --- a/components/Panels/EmailPassword.tsx +++ /dev/null @@ -1,161 +0,0 @@ -import React, { useState, useCallback, useEffect } from 'react'; -import Link from 'next/link'; -import styled from 'styled-components'; -import userbase from 'userbase-js'; -import Swal from 'sweetalert2'; - -import { Title, Subtitle, Paragraph } from 'components'; -import { Header } from 'components/Layout'; -import Button from 'components/Button'; -import TextInput from 'components/TextInput'; -import Loading from 'components/Loading'; -import { showNotification } from 'lib/utils'; - -interface EmailPasswordProps { - hasValidSession: boolean; - currentEmail: string; -} - -const Hero = styled.section` - @media only screen and (min-width: 600px) { - display: flex; - align-items: center; - } -`; - -const HeroText = styled.section` - margin-right: 1em; -`; - -const EmailPassword = ({ - hasValidSession, - currentEmail, -}: EmailPasswordProps) => { - const [isSubmitting, setIsSubmitting] = useState(false); - const [email, setEmail] = useState(currentEmail); - const [currentPassword, setCurrentPassword] = useState(''); - const [newPassword, setNewPassword] = useState(''); - - const handleEmailChangeClick = useCallback(async () => { - setIsSubmitting(true); - - try { - await userbase.updateUser({ - username: email, - email, - }); - - window.location.reload(); - } catch (error) { - showNotification(error, 'error'); - } - - setIsSubmitting(false); - }, [email]); - - const handlePasswordChangeClick = useCallback(async () => { - setIsSubmitting(true); - - try { - await userbase.updateUser({ - currentPassword, - newPassword, - }); - - setCurrentPassword(''); - setNewPassword(''); - } catch (error) { - showNotification(error, 'error'); - } - - setIsSubmitting(false); - - Swal.fire( - 'Alright!', - "If your current password matched, it changed successfully and you'll need to login in other devices again.", - 'success', - ); - }, [currentPassword, newPassword]); - - useEffect(() => { - setEmail(currentEmail); - }, [currentEmail]); - - return ( - <> - <Loading isShowing={isSubmitting} /> - <Header /> - <Title>Email and Password</Title> - <Hero> - <HeroText> - <Paragraph>Change your email or password.</Paragraph> - <Paragraph> - When you change either, you'll need to login in other devices again. - </Paragraph> - </HeroText> - </Hero> - {hasValidSession ? ( - <> - <Paragraph>Change your email</Paragraph> - <TextInput - type="email" - label="Email" - name="email" - value={email} - onChange={(event: React.ChangeEvent<HTMLInputElement>) => - setEmail(event.target.value) - } - /> - <Button - onClick={handleEmailChangeClick} - width="large" - type="secondary" - style={{ margin: '5rem auto' }} - > - Change Email - </Button> - <Paragraph>Change your password / encryption key</Paragraph> - <TextInput - type="password" - label="Current Password / Encryption Key" - name="currentPassword" - value={currentPassword} - onChange={(event: React.ChangeEvent<HTMLInputElement>) => - setCurrentPassword(event.target.value) - } - /> - <TextInput - type="password" - label="New Password / Encryption Key" - name="newPassword" - value={newPassword} - onChange={(event: React.ChangeEvent<HTMLInputElement>) => - setNewPassword(event.target.value) - } - /> - <Button - onClick={handlePasswordChangeClick} - width="large" - type="secondary" - style={{ margin: '5rem auto' }} - > - Change Password / Encryption Key - </Button> - </> - ) : ( - <> - <Subtitle>Signup or Login first</Subtitle> - <Paragraph> - Before you can change your email or password, you need to{' '} - <Link href="/"> - <a>Signup or Login</a> - </Link>{' '} - first. - </Paragraph> - </> - )} - </> - ); -}; - -export default EmailPassword; diff --git a/components/Panels/Expenses.tsx b/components/Panels/Expenses.tsx deleted file mode 100644 index cd8e33b..0000000 --- a/components/Panels/Expenses.tsx +++ /dev/null @@ -1,207 +0,0 @@ -import React, { useState } from 'react'; -import styled from 'styled-components'; -import moment from 'moment'; - -import Expense from 'components/Expense'; -import ExpenseModal from 'components/ExpenseModal'; -import FilterBudgetModal from 'components/FilterBudgetModal'; -import IconButton from 'components/IconButton'; -import { colors, fontSizes } from 'lib/constants'; -import * as T from 'lib/types'; - -interface ExpensesProps extends T.PanelProps {} - -// user-agent sniffing sucks, but I couldn't figure out why this problem only happens on Safari (macOS and iOS) -const safariFix = - typeof navigator !== 'undefined' && - navigator.userAgent && - navigator.userAgent.includes('Safari') - ? 'max-block-size: 100%;' - : ''; - -const Container = styled.section` - display: flex; - flex-direction: column; - flex: 1; - margin: 20px 10px; - max-height: 80vh; - overflow: auto; - ${safariFix} - width: 90vw; - - @media only screen and (min-width: 800px) { - width: auto; - margin: 0; - } -`; - -const FiltersContainer = styled.section` - display: flex; - flex-direction: row; - justify-content: space-between; - align-items: center; - margin: 20px auto 40px; -`; - -const SearchInput = styled.input` - color: ${colors().inputField}; - font-size: ${fontSizes.text}px; - font-weight: normal; - text-align: left; - border: 1px solid ${colors().secondaryBackground}; - border-radius: 50px; - padding: 10px 10px 10px 15px; - flex: 1; - min-width: 75%; - outline: none; - &::-webkit-input-placeholder { - color: ${colors().inputPlaceholder}; - } - &:hover, - &:focus, - &:active { - box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.2); - } -`; - -const NoExpensesFoundText = styled.p` - color: ${colors().secondaryText}; - text-align: center; - align-items: center; - flex: 1; - display: flex; - font-size: ${fontSizes.text}px; -`; - -type NoExpensesFoundProps = { - hasFiltersOrSearch: boolean; -}; - -const NoExpensesFound = (props: NoExpensesFoundProps) => { - return ( - <> - {props.hasFiltersOrSearch ? ( - <NoExpensesFoundText> - No expenses found matching those filters.{'\n'}Try changing them! - </NoExpensesFoundText> - ) : ( - <NoExpensesFoundText> - No expenses found for this month.{'\n'}Go add one! - </NoExpensesFoundText> - )} - </> - ); -}; - -const defaultExpense = { - id: '', - cost: 0, - description: '', - budget: '', - date: moment().format('YYYY-MM-DD'), -}; - -const Expenses = ({ - expenses, - budgets, - currency, - reloadData, -}: ExpensesProps) => { - const [filterExpenseDescription, setFilterExpenseDescription] = useState(''); - const [filterBudgets, setFilterBudgets] = useState<Set<string>>(new Set()); - const [isExpenseModalOpen, setIsExpenseModalOpen] = useState(false); - const [isFilterBudgetsModalOpen, setIsFilterBudgetsModalOpen] = - useState(false); - const [chosenExpense, setChosenExpense] = useState({ ...defaultExpense }); - - const openExpenseModal = (expense: T.Expense) => { - setIsExpenseModalOpen(true); - setChosenExpense({ ...expense }); - }; - - const closeExpenseModal = () => { - setIsExpenseModalOpen(false); - setChosenExpense({ ...defaultExpense }); - }; - - let expensesToShow = expenses; - - if (filterExpenseDescription) { - expensesToShow = expensesToShow.filter((expense) => - expense.description - .toLowerCase() - .includes(filterExpenseDescription.toLowerCase()), - ); - } - - if (filterBudgets.size > 0) { - expensesToShow = expensesToShow.filter((expense) => - filterBudgets.has(expense.budget), - ); - } - - return ( - <Container> - <FiltersContainer> - <SearchInput - type="search" - placeholder="Search for an expense" - onChange={(event) => setFilterExpenseDescription(event.target.value)} - value={filterExpenseDescription} - autoComplete="off" - /> - <IconButton - icon="options" - size={32} - color={ - filterBudgets.size > 0 - ? colors().primaryButtonBackground - : colors().secondaryButtonBackground - } - onClick={() => setIsFilterBudgetsModalOpen(true)} - /> - </FiltersContainer> - {expensesToShow.map((expense) => ( - <Expense - key={expense.id} - {...expense} - currency={currency} - onClick={() => openExpenseModal(expense)} - /> - ))} - {expensesToShow.length === 0 && ( - <NoExpensesFound - hasFiltersOrSearch={ - filterExpenseDescription.length > 0 || filterBudgets.size > 0 - } - /> - )} - <ExpenseModal - key={chosenExpense.id} - isOpen={isExpenseModalOpen} - onClose={() => closeExpenseModal()} - budgets={budgets} - reloadData={reloadData} - {...chosenExpense} - /> - <FilterBudgetModal - isOpen={isFilterBudgetsModalOpen} - onClose={() => setIsFilterBudgetsModalOpen(false)} - onFilterBudgetToggle={(budgetName, newValue) => { - const newFilterBudgets = new Set(filterBudgets); - if (newValue) { - newFilterBudgets.add(budgetName); - } else { - newFilterBudgets.delete(budgetName); - } - - setFilterBudgets(newFilterBudgets); - }} - budgets={budgets} - filterBudgets={filterBudgets} - /> - </Container> - ); -}; - -export default Expenses; diff --git a/components/Panels/Login.tsx b/components/Panels/Login.tsx deleted file mode 100644 index dfe60e8..0000000 --- a/components/Panels/Login.tsx +++ /dev/null @@ -1,61 +0,0 @@ -import React from 'react'; -import styled from 'styled-components'; - -import { Title, Subtitle, Paragraph } from 'components'; -import { Header } from 'components/Layout'; -import LoginButton from 'modules/auth/LoginButton'; - -const Hero = styled.section` - @media only screen and (min-width: 600px) { - display: flex; - align-items: center; - } -`; - -const HeroText = styled.section` - margin-right: 1em; -`; - -const Login = () => { - return ( - <> - <Header /> - <Title>Simple + Encrypted Budget Management</Title> - <Hero> - <HeroText> - <Paragraph> - Budget Zen is a simple and <strong>encrypted</strong> budget - management app. You can{' '} - <a href="https://budgetzen.net">learn more about it here</a>, as - this is the app. - </Paragraph> - <Paragraph> - Currently it's available on every device via web browser, and you - can browse its source code. - </Paragraph> - <Paragraph> - You have a <strong>30-day free trial</strong> (no credit card - required), and at the end, you can pay <strong>€18 / year</strong>, - or <strong>€2 / month</strong>, no limits. - </Paragraph> - <LoginButton /> - <Paragraph> - Note that logging in will take up a few seconds. This is - intentional, in order to generate a safer assymetric encryption key. - After logging in, the app should be blazing fast in any device. - </Paragraph> - </HeroText> - </Hero> - <Subtitle>Need help?</Subtitle> - <Paragraph> - If you're having any issues or have any questions,{' '} - <strong> - <a href="mailto:me@brunobernardino.com">please reach out</a> - </strong> - . - </Paragraph> - </> - ); -}; - -export default Login; diff --git a/components/Panels/Navigation.tsx b/components/Panels/Navigation.tsx deleted file mode 100644 index b2a960e..0000000 --- a/components/Panels/Navigation.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import React from 'react'; -import styled from 'styled-components'; - -import MonthNavigation from 'components/MonthNavigation'; - -interface NavigationProps { - changeMonthInView: (month: string) => void; - monthInView: string; -} - -const Container = styled.section` - display: block; - overflow: auto; -`; - -const Navigation = ({ changeMonthInView, monthInView }: NavigationProps) => { - return ( - <Container> - <MonthNavigation - currentMonth={monthInView} - handleChangeMonth={changeMonthInView} - /> - </Container> - ); -}; - -export default Navigation; diff --git a/components/Panels/Pricing.tsx b/components/Panels/Pricing.tsx deleted file mode 100644 index 4c90253..0000000 --- a/components/Panels/Pricing.tsx +++ /dev/null @@ -1,117 +0,0 @@ -import React, { useCallback } from 'react'; -import Link from 'next/link'; -import styled from 'styled-components'; -import userbase from 'userbase-js'; - -import { Title, Subtitle, Paragraph } from 'components'; -import { Header } from 'components/Layout'; -import Button from 'components/Button'; - -interface PricingProps { - hasValidSession: boolean; - hasValidSubscription: boolean; - trialDaysLeft: number; -} - -const Hero = styled.section` - @media only screen and (min-width: 600px) { - display: flex; - align-items: center; - } -`; - -const HeroText = styled.section` - margin-right: 1em; -`; - -const Pricing = ({ - hasValidSession, - hasValidSubscription, - trialDaysLeft, -}: PricingProps) => { - const handleMonthlySubscriptionClick = useCallback(async () => { - await userbase.purchaseSubscription({ - successUrl: window.location.href, - cancelUrl: window.location.href, - priceId: 'budget-zen-v2-monthly', - }); - }, []); - - const handleYearlySubscriptionClick = useCallback(async () => { - await userbase.purchaseSubscription({ - successUrl: window.location.href, - cancelUrl: window.location.href, - priceId: 'budget-zen-v2-annual', - }); - }, []); - - return ( - <> - <Header /> - <Title>Pricing</Title> - <Hero> - <HeroText> - <Paragraph>Pricing is simple.</Paragraph> - <Paragraph> - You have a <strong>30-day free trial</strong> (no credit card - required), and at the end, you can pay <strong>€18 / year</strong>, - or <strong>€2 / month</strong>, no limits. - </Paragraph> - </HeroText> - </Hero> - {hasValidSession ? ( - hasValidSubscription ? ( - <> - <Subtitle>You're already a customer!</Subtitle> - <Paragraph> - You probably want to check out the{' '} - <Link href="/billing"> - <a>billing section</a> - </Link>{' '} - instead. - </Paragraph> - </> - ) : ( - <> - <Paragraph isBold> - Your trial{' '} - {trialDaysLeft > 0 - ? `will expire in ${trialDaysLeft} day${ - trialDaysLeft !== 1 ? 's' : '' - }` - : 'has expired'} - . - </Paragraph> - <Button - onClick={handleMonthlySubscriptionClick} - type="secondary" - style={{ margin: '3rem auto 1.5rem' }} - > - Pay €2 / month - </Button> - <Button - onClick={handleYearlySubscriptionClick} - type="primary" - width="large" - > - Pay €18 / year - </Button> - </> - ) - ) : ( - <> - <Subtitle>Signup or Login first</Subtitle> - <Paragraph> - Before you can pay, you need to{' '} - <Link href="/"> - <a>Signup or Login</a> - </Link>{' '} - first. - </Paragraph> - </> - )} - </> - ); -}; - -export default Pricing; diff --git a/components/Panels/Settings.tsx b/components/Panels/Settings.tsx deleted file mode 100644 index 209c2f0..0000000 --- a/components/Panels/Settings.tsx +++ /dev/null @@ -1,231 +0,0 @@ -import React, { useEffect, useState } from 'react'; -import styled from 'styled-components'; -import Rodal from 'rodal'; -import Link from 'next/link'; - -import SegmentedControl from 'components/SegmentedControl'; -import Button from 'components/Button'; -import IconButton from 'components/IconButton'; -import ImportExportModal from 'components/ImportExportModal'; -import Paragraph from 'components/Paragraph'; -import { colors, fontSizes } from 'lib/constants'; -import { updatePreferences, showNotification } from 'lib/utils'; -import * as T from 'lib/types'; - -import appPackage from '../../package.json'; - -interface SettingsProps { - currentCurrency: T.Currency; - updateCurrency: (currency: T.Currency) => void; - currentTheme: T.Theme; - updateTheme: (theme: T.Theme) => void; - setIsLoading: (isLoading: boolean) => void; - reloadData: () => Promise<void>; -} - -// @ts-ignore manually added -const { build: appBuild, version: appVersion } = appPackage; - -const SettingsButton = styled(IconButton)` - top: 8px; - right: 70px; - position: absolute; -`; - -const Container = styled.section` - display: flex; - flex: 1; - justify-content: center; - align-items: stretch; - flex-direction: column; - background-color: ${colors().background}; -`; - -const Label = styled.span` - color: ${colors().inputLabel}; - font-size: ${fontSizes.inputLabel}px; - font-weight: bold; - text-align: left; - margin-top: 38px; -`; - -const StyledSegmentedControl = styled(SegmentedControl)` - margin: 15px auto 10px; - width: 96%; -`; - -const BottomContainer = styled.section` - display: flex; - flex: 0.5; - flex-direction: column; -`; - -const Version = styled.p` - color: ${colors().secondaryText}; - font-size: ${fontSizes.smallText}px; - font-weight: normal; - text-align: center; - margin-top: 30px; -`; - -const currencyLabels = ['$', '€', '£']; -const currencyValues: T.Currency[] = ['USD', 'EUR', 'GBP']; - -const themeLabels = ['Light', 'Dark']; -const themeValues: T.Theme[] = ['light', 'dark']; - -const Settings = ({ - currentCurrency, - updateCurrency, - currentTheme, - updateTheme, - setIsLoading, - reloadData, -}: SettingsProps) => { - const [isSubmitting, setIsSubmitting] = useState(false); - const [isSettingsModalOpen, setIsSettingsModalOpen] = useState(false); - const [isImportExportModalOpen, setIsImportExportModalOpen] = useState(false); - const [currency, setCurrency] = useState(currentCurrency); - const [theme, setTheme] = useState(currentTheme); - - useEffect(() => { - setCurrency(currentCurrency); - }, [currentCurrency]); - - useEffect(() => { - setTheme(currentTheme); - }, [currentTheme]); - - const saveCurrency = async (newCurrency: T.Currency) => { - if (isSubmitting) { - // Ignore sequential taps - return; - } - - setIsSubmitting(true); - - const success = updatePreferences(newCurrency, currentTheme); - - if (success) { - updateCurrency(newCurrency); - return; - } - - if (success) { - showNotification('Settings saved successfully.'); - } - }; - - const saveTheme = async (newTheme: T.Theme) => { - if (isSubmitting) { - // Ignore sequential taps - return; - } - - setIsSubmitting(true); - - const success = updatePreferences(currentCurrency, newTheme); - - if (success) { - updateTheme(newTheme); - return; - } - - if (success) { - showNotification('Settings saved successfully.'); - } - }; - - const selectedCurrencyIndex = currencyValues.findIndex( - (_currency) => currency === _currency, - ); - - const selectedThemeIndex = themeValues.findIndex( - (_theme) => theme === _theme, - ); - - return ( - <> - <SettingsButton - icon="settings" - size={26} - color={colors().secondaryButtonBackground} - onClick={() => setIsSettingsModalOpen(true)} - /> - <Rodal - visible={isSettingsModalOpen} - onClose={() => setIsSettingsModalOpen(false)} - animation="slideDown" - > - <Container> - <Label>Currency</Label> - <StyledSegmentedControl - values={currencyLabels} - selectedIndex={ - selectedCurrencyIndex === -1 ? 0 : selectedCurrencyIndex - } - onChange={(selectedSegmentIndex: number) => { - setCurrency(currencyValues[selectedSegmentIndex]); - saveCurrency(currencyValues[selectedSegmentIndex]); - }} - /> - <Label>Theme</Label> - <StyledSegmentedControl - values={themeLabels} - selectedIndex={selectedThemeIndex === -1 ? 0 : selectedThemeIndex} - onChange={(selectedSegmentIndex: number) => { - setTheme(themeValues[selectedSegmentIndex]); - saveTheme(themeValues[selectedSegmentIndex]); - }} - /> - <Paragraph isCentered style={{ marginTop: '2rem' }}> - <Link href="/email-password"> - <a>Change your email or password</a> - </Link> - </Paragraph> - <Paragraph isCentered> - <Link href="/billing"> - <a>Manage billing</a> - </Link> - </Paragraph> - <BottomContainer> - <Version> - v{appVersion}-{appBuild} - </Version> - <Button - onClick={() => setIsImportExportModalOpen(true)} - type="secondary" - style={{ - margin: '5px auto 10px', - alignSelf: 'center', - }} - > - Import or Export Data - </Button> - <Button - element="a" - href="mailto:help@budgetzen.net" - type="primary" - style={{ - margin: '0 auto 10px', - alignSelf: 'center', - }} - > - Get Help - </Button> - </BottomContainer> - <ImportExportModal - isOpen={isImportExportModalOpen} - onClose={async () => { - setIsImportExportModalOpen(false); - await reloadData(); - }} - setIsLoading={setIsLoading} - /> - </Container> - </Rodal> - </> - ); -}; - -export default Settings; diff --git a/components/Paragraph.tsx b/components/Paragraph.tsx deleted file mode 100644 index 5f6168f..0000000 --- a/components/Paragraph.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import styled from 'styled-components'; - -type Props = { - isCentered?: boolean; - isBold?: boolean; -}; - -const Paragraph = styled.p.attrs({ - className: 'common__line', -})` - ${(props: Props) => (props.isCentered ? 'text-align: center;' : '')} - ${(props: Props) => (props.isBold ? 'font-weight: bold;' : '')} -`; - -export default Paragraph; diff --git a/components/SegmentedControl.tsx b/components/SegmentedControl.tsx deleted file mode 100644 index d6d45ae..0000000 --- a/components/SegmentedControl.tsx +++ /dev/null @@ -1,70 +0,0 @@ -import React from 'react'; -import styled from 'styled-components'; - -import { colors, fontSizes } from 'lib/constants'; - -interface SegmentedControlProps { - values: string[]; - selectedIndex: number; - onChange: (selectedSegmentIndex: number) => void; - className?: string; -} - -const Container = styled.section` - display: flex; - flex: 1; - flex-direction: row; - justify-content: center; - align-items: center; - color: ${colors().secondaryText}; - background-color: ${colors().secondaryBackground}; - border-radius: 5px; - padding: 3px; -`; - -type SegmentProps = { - selected?: boolean; -}; - -const Segment = styled.button<SegmentProps>` - align-items: center; - border: none; - background-color: ${({ selected }) => - selected ? colors().primaryButtonBackground : 'transparent'}; - padding: 10px; - border-radius: 5px; - min-width: 33%; - color: ${({ selected }) => - selected ? colors().primaryButtonText : 'inherit'}; - font-size: ${fontSizes.button}px; - cursor: pointer; - outline: none; - &:hover, - &:focus, - &:active { - opacity: 0.8; - } -`; - -const SegmentedControl = ({ - values, - selectedIndex, - onChange, - className, -}: SegmentedControlProps) => { - return ( - <Container className={className}> - {values.map((value: string, index: number) => ( - <Segment - key={`segment-${index}`} - selected={selectedIndex === index} - onClick={() => onChange(index)} - > - {value} - </Segment> - ))} - </Container> - ); -}; - -export default SegmentedControl; diff --git a/components/Subtitle.tsx b/components/Subtitle.tsx deleted file mode 100644 index 96b3aed..0000000 --- a/components/Subtitle.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import styled from 'styled-components'; - -const Subtitle = styled.h1.attrs({ - className: 'common__line', -})` - font-size: 2.5em; - font-weight: bold; - text-align: left; - line-height: 1.2em; - color: #666; - margin-top: 2em; - - @media (prefers-color-scheme: dark) { - color: #f0f0f0; - } - - &:after { - display: block; - content: ' '; - width: 1.5em; - height: 2px; - margin-top: 0.15em; - margin-bottom: 1em; - background-color: #666; - - @media (prefers-color-scheme: dark) { - background-color: #f0f0f0; - } - } -`; - -export default Subtitle; diff --git a/components/TextInput/__snapshots__/test.tsx.snap b/components/TextInput/__snapshots__/test.tsx.snap deleted file mode 100644 index be633cb..0000000 --- a/components/TextInput/__snapshots__/test.tsx.snap +++ /dev/null @@ -1,22 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`TextInput renders the input as expected 1`] = ` -<div - className=" TextInput" -> - <label - className="TextInput__label" - htmlFor="name" - > - Name - </label> - <input - className="TextInput__StyledInput-sc-7736i8-0 TextInput__input" - disabled={false} - id="name" - name="name" - type="text" - value="Bruno" - /> -</div> -`; diff --git a/components/TextInput/index.tsx b/components/TextInput/index.tsx deleted file mode 100644 index c02cf14..0000000 --- a/components/TextInput/index.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import React, { forwardRef } from 'react'; -import styled from 'styled-components'; - -import styles from './styles.module.scss'; - -interface TextInputProps { - label?: string; - name: string; - placeholder?: string; - isDisabled?: boolean; - type?: 'text' | 'email' | 'password' | 'url'; - value: any; - onChange?: any; - onKeyDown?: any; - onClick?: any; - className?: string; - ref?: any; - id?: string; - note?: string; - title?: string; -} - -const StyledInput = styled.input``; - -const TextInput: React.FC<TextInputProps> = forwardRef( - (props: TextInputProps, ref: any) => { - const { label, id, name, className, isDisabled, note, ...remainingProps } = - props; - - return ( - <div className={`${className || ''} ${styles.TextInput}`}> - {label ? ( - <label className={styles.TextInput__label} htmlFor={id || name}> - {label} - </label> - ) : null} - <StyledInput - className={styles.TextInput__input} - disabled={isDisabled} - id={id || name} - name={name} - ref={ref} - {...remainingProps} - /> - {note ? <p className={styles.TextInput__note}>{note}</p> : null} - </div> - ); - }, -); - -TextInput.defaultProps = { - isDisabled: false, - type: 'text', -}; - -export default TextInput; diff --git a/components/TextInput/styles.module.scss b/components/TextInput/styles.module.scss deleted file mode 100644 index ec0f10d..0000000 --- a/components/TextInput/styles.module.scss +++ /dev/null @@ -1,52 +0,0 @@ -@import 'styles/__variables'; - -$transition-speed: 140ms; - -.TextInput { - &__label { - color: $color-text; - padding: 0.5rem 1rem 0.5rem 0.7rem; - border-left: 5px solid $color-block-border; - text-transform: uppercase; - font-weight: 500; - display: block; - font-size: 1.3rem; - - @media (prefers-color-scheme: dark) { - color: $color-link-hover; - } - @at-root .theme-dark #{&} { - color: $color-link-hover; - } - } - - &__input { - color: $color-text-gray; - font-size: 1.7rem; - margin: 0.5rem 0 1rem; - display: block; - text-align: left; - padding: 0.7rem 1.5rem; - border-radius: 5px; - font-weight: 500; - background: $color-white; - transition: all $transition-speed ease-in; - border: 1px solid $color-block-border; - width: calc(100% - 3rem); - - &:hover, - &:focus { - border-color: $color-block-border; - outline: none; - box-shadow: 1px 1px 3px $color-block-border; - } - } - - &__note { - color: $color-text-gray; - font-size: 0.8rem; - margin: 1rem 0 0; - display: block; - text-align: left; - } -} diff --git a/components/TextInput/test.tsx b/components/TextInput/test.tsx deleted file mode 100644 index 420f987..0000000 --- a/components/TextInput/test.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import React from 'react'; -import renderer from 'react-test-renderer'; -import { mount } from 'enzyme'; -import expect from 'expect'; -import enzymify from 'expect-enzyme'; - -import TextInput from './index'; - -expect.extend(enzymify()); - -describe('TextInput', () => { - // TODO: enzyme still doesn't work with React 17: https://github.com/enzymejs/enzyme/issues/2429 - it.skip('renders the text input without errors', () => { - const wrapper = mount( - <TextInput label="Name" name="name" value="Bruno" onChange={() => {}} />, - ); - expect(wrapper.find('input').props().value).toBe('Bruno'); - expect(wrapper.find('label').text()).toBe('Name'); - }); - - it('renders the input as expected', () => { - const tree = renderer - .create(<TextInput label="Name" name="name" value="Bruno" />) - .toJSON(); - expect(tree).toMatchSnapshot(); - }); -}); diff --git a/components/Title.tsx b/components/Title.tsx deleted file mode 100644 index 06ec1b7..0000000 --- a/components/Title.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import styled from 'styled-components'; - -const Title = styled.h1.attrs({ - className: 'common__line', -})` - font-size: 3.5em; - font-weight: bold; - text-align: left; - line-height: 1.2em; - color: #666; - margin-top: 1em; - - @media (prefers-color-scheme: dark) { - color: #f0f0f0; - } - - &:after { - display: block; - content: ' '; - width: 2em; - height: 3px; - margin-top: 0.15em; - margin-bottom: 1em; - background-color: #666; - - @media (prefers-color-scheme: dark) { - background-color: #f0f0f0; - } - } -`; - -export default Title; diff --git a/components/footer.ts b/components/footer.ts new file mode 100644 index 0000000..56d3f77 --- /dev/null +++ b/components/footer.ts @@ -0,0 +1,56 @@ +import { html } from '../lib/utils.ts'; + +export default function footer() { + return html` + <footer> + <section class="faq"> + <h3>Frequently asked questions</h3> + <div class="faq-items"> + <article class="faq-item" data-has-invalid-session> + <h4>What is Budget Zen?</h4> + <p> + Simple and encrypted budget management. + <a href="https://budgetzen.net">Read more here</a>. + </p> + </article> + <article class="faq-item hidden" data-has-valid-session> + <h4>How can I import/export data?</h4> + <p> + <a href="/settings">In your settings</a>. + </p> + </article> + <article class="faq-item"> + <h4>Where's the code for this web app?</h4> + <p> + <a href="https://github.com/BrunoBernardino/budgetzen-web">It's in GitHub</a>. + </p> + </article> + <article class="faq-item hidden" data-has-valid-session> + <h4>How can I change my email<br />or password / encryption key?</h4> + <p> + <a href="/settings">In your settings</a>. + </p> + </article> + <article class="faq-item hidden" data-has-valid-session> + <h4>How can I manage my subscription?</h4> + <p> + <a href="/billing">In your billing section</a>. + </p> + </article> + <article class="faq-item" data-has-invalid-session> + <h4>How can I subscribe?</h4> + <p> + <a href="/pricing">In the pricing section</a>. + </p> + </article> + </div> + </section> + <h3 class="links"> + <a href="https://budgetzen.net/blog">Blog</a> | + <a href="https://budgetzen.net/privacy">Privacy Policy</a> | + <a href="mailto:me@brunobernardino.com">Get Help</a> | <span class="by">by</span> + <a href="https://brunobernardino.com">Bruno Bernardino</a> + </h3> + </footer> + `; +} diff --git a/components/header.ts b/components/header.ts new file mode 100644 index 0000000..f986c5b --- /dev/null +++ b/components/header.ts @@ -0,0 +1,31 @@ +import { html } from '../lib/utils.ts'; + +export default function header(currentPath: string) { + return html` + <header> + <section class="wrapper"> + <h1> + <a href="/"> + <img alt="Logo: stack of money notes with a 'B' on them and stylized letters Budget Zen below" src="/public/images/logo.svg" /> + </a> + </h1> + <nav> + <ul> + <li data-has-valid-session class="hidden ${currentPath.includes('/settings') ? 'active' : ''}"> + <a href="/settings">Settings</a> + </li> + <li data-has-valid-session class="hidden ${currentPath.includes('/billing') ? 'active' : ''}"> + <a href="/billing">Billing</a> + </li> + <li class="${currentPath.includes('/pricing') ? 'active' : ''}"> + <a href="/pricing">Pricing</a> + </li> + <li data-has-valid-session class="hidden"> + <a onclick="window.app.doLogout();" style="cursor: pointer;">Logout</a> + </li> + </ul> + </nav> + </section> + </header> + `; +} diff --git a/components/index.ts b/components/index.ts deleted file mode 100644 index d120167..0000000 --- a/components/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -export { default as Loading } from './Loading'; -export { default as Title } from './Title'; -export { default as Subtitle } from './Subtitle'; -export { default as Paragraph } from './Paragraph'; -export { default as Button } from './Button'; -export { default as TextInput } from './TextInput'; diff --git a/components/Loading/index.tsx b/components/loading.ts similarity index 70% rename from components/Loading/index.tsx rename to components/loading.ts index bf48afb..49b59f7 100644 --- a/components/Loading/index.tsx +++ b/components/loading.ts @@ -1,16 +1,8 @@ -import styles from './styles.module.scss'; +import { html } from '../lib/utils.ts'; -interface LoadingProps { - isShowing?: boolean; -} - -const Loading = ({ isShowing = false }: LoadingProps) => { - return ( - <div - className={`${styles.Loading} ${ - isShowing ? styles['Loading--show'] : '' - }`} - > +export default function loading() { + return html` + <div id="loading"> <svg version="1.1" id="loader-1" @@ -24,7 +16,7 @@ const Loading = ({ isShowing = false }: LoadingProps) => { xmlSpace="preserve" > <path - fill="#000" + fill="#f0f0f0" d="M43.935,25.145c0-10.318-8.364-18.683-18.683-18.683c-10.318,0-18.683,8.365-18.683,18.683h4.068c0-8.071,6.543-14.615,14.615-14.615c8.072,0,14.615,6.543,14.615,14.615H43.935z" > <animateTransform @@ -39,7 +31,5 @@ const Loading = ({ isShowing = false }: LoadingProps) => { </path> </svg> </div> - ); -}; - -export default Loading; + `; +} diff --git a/deno.json b/deno.json new file mode 100644 index 0000000..660feee --- /dev/null +++ b/deno.json @@ -0,0 +1,35 @@ +{ + "fmt": { + "options": { + "useTabs": false, + "lineWidth": 120, + "indentWidth": 2, + "singleQuote": true, + "proseWrap": "preserve" + }, + "files": { + "exclude": [ + "public/js/stripe.js", + "public/js/sweetalert.js", + "public/js/userbase.js", + "public/js/userbase.js.map" + ] + } + }, + "lint": { + "rules": { + "exclude": [ + "no-explicit-any", + "no-window-prefix" + ] + }, + "files": { + "exclude": [ + "public/js/stripe.js", + "public/js/sweetalert.js", + "public/js/userbase.js", + "public/js/userbase.js.map" + ] + } + } +} diff --git a/jest.config.js b/jest.config.js deleted file mode 100644 index 3c889fb..0000000 --- a/jest.config.js +++ /dev/null @@ -1,16 +0,0 @@ -const TEST_REGEX = '(/__tests__/.*|(\\.|/)(test|spec))\\.(jsx?|js?|tsx?|ts?)$'; - -module.exports = { - setupFiles: ['<rootDir>/jest.setup.js'], - testRegex: TEST_REGEX, - transform: { - '^.+\\.tsx?$': 'babel-jest', - }, - testPathIgnorePatterns: ['<rootDir>/.next/', '<rootDir>/node_modules/'], - moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'], - collectCoverage: false, - moduleNameMapper: { - '\\.(scss|sass|css)$': 'identity-obj-proxy', - }, - moduleDirectories: ['node_modules', '.'], -}; diff --git a/jest.setup.js b/jest.setup.js deleted file mode 100644 index c07c082..0000000 --- a/jest.setup.js +++ /dev/null @@ -1,4 +0,0 @@ -const Enzyme = require('enzyme'); -const Adapter = require('@wojtekmaj/enzyme-adapter-react-17'); - -Enzyme.configure({ adapter: new Adapter() }); diff --git a/lib/constants.ts b/lib/constants.ts deleted file mode 100644 index fd6527a..0000000 --- a/lib/constants.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { getUserInfo } from 'lib/utils'; - -export const baseUrl = 'https://app.budgetzen.net'; -export const defaultTitle = - 'Budget Zen — Simple and Encrypted Budget Management'; -export const defaultDescription = 'Simple and encryped budget management.'; -export const defaultKeywords = - 'budget, zen, encrypted, e2ee, end-to-end, simple, app, web, android, linux, ios, macos'; - -export const sessionNamespace = 'BudgetZen_v2_appSession'; - -type Theme = 'dark' | 'light'; - -export const colors = (theme: Theme = 'light') => { - const userInfo = getUserInfo(); - - if (typeof window !== 'undefined') { - if ( - typeof window.matchMedia === 'function' && - window.matchMedia('(prefers-color-scheme: dark)').matches - ) { - theme = 'dark'; - } - } - - if ( - typeof document !== 'undefined' && - typeof document.getElementsByTagName === 'function' && - document.getElementsByTagName('body')[0].classList.contains('theme-dark') - ) { - theme = 'dark'; - } - - if (userInfo && userInfo.theme === 'dark') { - theme = 'dark'; - } - - return { - inputLabel: theme === 'dark' ? '#fff' : '#000', - inputField: theme === 'dark' ? '#666' : '#666', - inputPlaceholder: theme === 'dark' ? '#333' : '#ccc', - text: theme === 'dark' ? '#efefef' : '#333', - secondaryText: theme === 'dark' ? '#666' : '#999', - background: theme === 'dark' ? '#222' : '#fff', - secondaryBackground: theme === 'dark' ? '#333' : '#efefef', - alternateBackground: theme === 'dark' ? '#2f2f2f' : '#f9f9f9', - primaryButtonText: theme === 'dark' ? '#000' : '#fff', - primaryButtonBackground: theme === 'dark' ? '#fff' : '#000', - secondaryButtonText: theme === 'dark' ? '#000' : '#fff', - secondaryButtonBackground: theme === 'dark' ? '#999' : '#666', - }; -}; - -export const fontSizes = { - inputLabel: 24, - inputField: 18, - label: 18, - text: 14, - mediumText: 15, - largeText: 18, - smallText: 12, - button: 18, -}; diff --git a/lib/data-utils.ts b/lib/data-utils.ts deleted file mode 100644 index a851d38..0000000 --- a/lib/data-utils.ts +++ /dev/null @@ -1,751 +0,0 @@ -import userbase from 'userbase-js'; -import Swal from 'sweetalert2'; -import moment from 'moment'; - -import { - sortByName, - sortByDate, - splitArrayInChunks, - showNotification, -} from './utils'; -import * as T from './types'; - -const USERBASE_APP_ID = process.env.NEXT_PUBLIC_USERBASE_APP_ID; - -const cachedData: { budgets: T.Budget[]; expenses: T.Expense[] } = { - budgets: [], - expenses: [], -}; - -const hasFinishedLoading = { - budgets: false, - expenses: false, -}; - -const sessionLengthInHours = 90 * 24; - -export const validateLogin = async (email: string, password: string) => { - try { - await userbase.signIn({ - username: email, - password, - sessionLength: sessionLengthInHours, - rememberMe: 'local', - }); - return { success: true }; - } catch (error) { - console.log(error); - return { success: false, error }; - } -}; - -export const createAccount = async (email: string, password: string) => { - try { - await userbase.signUp({ - username: email, - password, - sessionLength: sessionLengthInHours, - rememberMe: 'local', - email, - }); - return { success: true }; - } catch (error) { - console.log(error); - return { success: false, error }; - } -}; - -const getBudgetFromItem = (item: userbase.Item) => { - try { - return { - id: item.itemId, - name: item.item.name, - month: item.item.month, - value: item.item.value, - } as T.Budget; - } catch (error) { - return null; - } -}; - -const getExpenseFromItem = (item: userbase.Item) => { - try { - return { - id: item.itemId, - cost: item.item.cost, - description: item.item.description, - budget: item.item.budget, - date: item.item.date, - } as T.Expense; - } catch (error) { - return null; - } -}; - -const loadItemsAsync = async () => { - await userbase.openDatabase({ - databaseName: 'budgets', - changeHandler: async (items) => { - const budgets = items - .map(getBudgetFromItem) - .filter((budget) => Boolean(budget)); - - hasFinishedLoading.budgets = true; - - cachedData.budgets = budgets; - }, - }); - - await userbase.openDatabase({ - databaseName: 'expenses', - changeHandler: (items) => { - const expenses = items - .map(getExpenseFromItem) - .filter((expense) => Boolean(expense)); - - hasFinishedLoading.expenses = true; - - cachedData.expenses = expenses; - }, - }); -}; - -export const initializeDb = async () => { - try { - await userbase.init({ - appId: USERBASE_APP_ID, - sessionLength: sessionLengthInHours, - }); - - await loadItemsAsync(); - } catch (error) { - console.log(error); - showNotification(error, 'error'); - } -}; - -export const fetchBudgets = async (month?: string) => { - try { - // Very ugly, but... works. - while (!hasFinishedLoading.budgets) { - await new Promise((resolve) => { - setTimeout(resolve, 100); - }); - } - - const budgets = cachedData.budgets - .filter((budget) => { - if (!month) { - return true; - } - - if (budget.month === month) { - return true; - } - - return false; - }) - .sort(sortByName); - - return budgets; - } catch (error) { - Swal.fire({ - title: 'Uh-oh', - text: 'Something went wrong fetching budgets.', - }); - - console.error(error); - } - - return []; -}; - -export const fetchExpenses = async (month?: string) => { - try { - // Very ugly, but... works. - while (!hasFinishedLoading.expenses) { - await new Promise((resolve) => { - setTimeout(resolve, 100); - }); - } - - const expenses = cachedData.expenses - .filter((expense) => { - if (!month) { - return true; - } - - if (expense.date >= `${month}-01` && expense.date <= `${month}-31`) { - return true; - } - - return false; - }) - .sort(sortByDate) - .reverse(); - - return expenses; - } catch (error) { - Swal.fire({ - title: 'Uh-oh', - text: 'Something went wrong fetching expenses.', - }); - - console.error(error); - } - - return []; -}; - -export const saveBudget = async (budget: T.Budget) => { - try { - if (budget.name === 'Total') { - showNotification('Cannot create budget named "Total".', 'error'); - return false; - } - - if (budget.name.trim().length === 0) { - showNotification('The budget needs a valid name.', 'error'); - return false; - } - - if (budget.value <= 0 || Number.isNaN(budget.value)) { - showNotification('The budget needs a valid value.', 'error'); - return false; - } - - if (!moment(budget.month, 'YYYY-MM').isValid()) { - budget.month = moment().format('YYYY-MM'); - } - - // Check if the name is unique for the given month - const existingBudgetsInMonth = await fetchBudgets(budget.month); - const duplicateBudget = existingBudgetsInMonth.find( - (existingBudget) => - existingBudget.name === budget.name && existingBudget.id !== budget.id, - ); - - if (duplicateBudget) { - showNotification( - 'A budget with the same name for the same month already exists.', - 'error', - ); - return false; - } - - if (budget.id === 'newBudget') { - budget.id = `${Date.now().toString()}:${Math.random()}`; - - await userbase.insertItem({ - databaseName: 'budgets', - item: { - name: budget.name, - value: budget.value, - month: budget.month, - } as T.BudgetContent, - itemId: budget.id, - }); - } else { - const existingBudget = cachedData.budgets.find( - (_budget) => _budget.id === budget.id, - ); - const oldName = existingBudget.name; - const newName = budget.name; - - await userbase.updateItem({ - databaseName: 'budgets', - item: { - name: budget.name, - value: budget.value, - month: existingBudget.month, // Don't allow changing a budget's month - } as T.BudgetContent, - itemId: budget.id, - }); - - const cachedBudgetIndex = cachedData.budgets.findIndex( - (_budget) => _budget.id === budget.id, - ); - if (cachedBudgetIndex !== -1) { - cachedData.budgets[cachedBudgetIndex].name = budget.name; - cachedData.budgets[cachedBudgetIndex].value = budget.value; - } - - // Update all expenses with the previous budget name to the new one, if it changed - if (oldName !== newName) { - const matchingExpenses = ( - await fetchExpenses(existingBudget.month) - ).filter((expense) => expense.budget === oldName); - - for (const expense of matchingExpenses) { - const cachedExpenseIndex = cachedData.expenses.findIndex( - (_expense) => _expense.id === expense.id, - ); - if (cachedExpenseIndex !== -1) { - cachedData.expenses[cachedExpenseIndex].budget = newName; - } - } - - const updateChunks: T.Expense[][] = splitArrayInChunks( - matchingExpenses, - 10, - ); - - for (const machingExpensesChunk of updateChunks) { - await userbase.putTransaction({ - databaseName: 'expenses', - operations: machingExpensesChunk.map((expense) => ({ - command: 'Update', - item: { - cost: expense.cost, - description: expense.description, - budget: newName, - date: expense.date, - } as T.ExpenseContent, - itemId: expense.id, - })), - }); - } - } - } - - return true; - } catch (error) { - Swal.fire({ - title: 'Uh-oh', - text: 'Something went wrong saving that budget.', - }); - - console.error(error); - } - - return false; -}; - -export const deleteBudget = async (budgetId: string) => { - try { - const existingBudget = cachedData.budgets.find( - (budget) => budget.id === budgetId, - ); - - // Check if the budget has no expenses, if so, don't delete - const matchingExpenses = (await fetchExpenses(existingBudget.month)).filter( - (expense) => expense.budget === existingBudget.name, - ); - - if (matchingExpenses.length > 0) { - // Check if there are duplicate budgets (can happen on slow sync) - const matchingBudgets = (await fetchBudgets(existingBudget.month)).filter( - (budget) => budget.name === existingBudget.name, - ); - - if (matchingBudgets.length === 1) { - showNotification( - "There are expenses using this budget. You can't delete a budget with expenses", - 'error', - ); - return false; - } - } - - await userbase.deleteItem({ - databaseName: 'budgets', - itemId: budgetId, - }); - - const cachedItemIndex = cachedData.budgets.findIndex( - (budget) => budget.id === budgetId, - ); - if (cachedItemIndex !== -1) { - cachedData.budgets.splice(cachedItemIndex, 1); - } - - return true; - } catch (error) { - Swal.fire({ - title: 'Uh-oh', - text: 'Something went wrong deleting that budget.', - }); - - console.error(error); - } - - return false; -}; - -export const saveExpense = async (expense: T.Expense) => { - try { - if (!expense.cost || typeof expense.cost !== 'number') { - showNotification('Cost missing or invalid', 'error'); - return false; - } - - if (!expense.description || typeof expense.description !== 'string') { - showNotification('Description missing or invalid', 'error'); - return false; - } - - if (!expense.date || typeof expense.date !== 'string') { - expense.date = moment().format('YYYY-MM-DD'); - } - - // Check if there's an existing expense with a better budget - if ( - (!expense.budget || expense.budget === 'Misc') && - expense.id === 'newExpense' - ) { - const matchingExpense = (await fetchExpenses()).find( - (_expense) => _expense.description === expense.description, - ); - - if (matchingExpense && matchingExpense.budget) { - expense.budget = matchingExpense.budget; - } - } - - if (!expense.budget || typeof expense.budget !== 'string') { - expense.budget = 'Misc'; - } - - // Check if the budget exists for the expense in that given month, otherwise create one - const existingBudget = ( - await fetchBudgets(expense.date.substring(0, 7)) - ).find((budget) => budget.name === expense.budget); - - if (!existingBudget) { - const newBudgetId = `${Date.now().toString()}:${Math.random()}`; - - await userbase.insertItem({ - databaseName: 'budgets', - item: { - name: expense.budget, - month: expense.date.substring(0, 7), - value: 100, - } as T.BudgetContent, - itemId: newBudgetId, - }); - } - - if (expense.id === 'newExpense') { - expense.id = `${Date.now().toString()}:${Math.random()}`; - - await userbase.insertItem({ - databaseName: 'expenses', - item: { - cost: expense.cost, - budget: expense.budget, - description: expense.description, - date: expense.date, - } as T.ExpenseContent, - itemId: expense.id, - }); - } else { - await userbase.updateItem({ - databaseName: 'expenses', - item: { - cost: expense.cost, - description: expense.description, - budget: expense.budget, - date: expense.date, - } as T.ExpenseContent, - itemId: expense.id, - }); - - const cachedItemIndex = cachedData.expenses.findIndex( - (_expense) => _expense.id === expense.id, - ); - if (cachedItemIndex !== -1) { - cachedData.expenses[cachedItemIndex].cost = expense.cost; - cachedData.expenses[cachedItemIndex].description = expense.description; - cachedData.expenses[cachedItemIndex].budget = expense.budget; - cachedData.expenses[cachedItemIndex].date = expense.date; - } - } - - return true; - } catch (error) { - Swal.fire({ - title: 'Uh-oh', - text: 'Something went wrong saving that expense.', - }); - - console.error(error); - } - - return false; -}; - -export const deleteExpense = async (expenseId: string) => { - try { - await userbase.deleteItem({ - databaseName: 'expenses', - itemId: expenseId, - }); - - const cachedItemIndex = cachedData.expenses.findIndex( - (expense) => expense.id === expenseId, - ); - if (cachedItemIndex !== -1) { - cachedData.expenses.splice(cachedItemIndex, 1); - } - - return true; - } catch (error) { - Swal.fire({ - title: 'Uh-oh', - text: 'Something went wrong deleting that expense.', - }); - - console.error(error); - } - - return false; -}; - -export const deleteAllData = async () => { - const budgets = await fetchBudgets(); - const expenses = await fetchExpenses(); - - const deleteBudgetChunks: T.Budget[][] = splitArrayInChunks(budgets, 10); - const deleteExpenseChunks: T.Expense[][] = splitArrayInChunks(expenses, 10); - - for (const budgetsToDelete of deleteBudgetChunks) { - await userbase.putTransaction({ - databaseName: 'budgets', - operations: budgetsToDelete.map((budget) => ({ - command: 'Delete', - itemId: budget.id, - })), - }); - - // Wait a second, to avoid hitting rate limits - await new Promise((resolve) => { - setTimeout(resolve, 1000); - }); - } - - for (const expensesToDelete of deleteExpenseChunks) { - await userbase.putTransaction({ - databaseName: 'expenses', - operations: expensesToDelete.map((expense) => ({ - command: 'Delete', - itemId: expense.id, - })), - }); - - // Wait a second, to avoid hitting rate limits - await new Promise((resolve) => { - setTimeout(resolve, 1000); - }); - } - - cachedData.budgets.length = 0; - cachedData.expenses.length = 0; - hasFinishedLoading.budgets = false; - hasFinishedLoading.expenses = false; -}; - -type ExportAllData = () => Promise<{ - budgets?: T.Budget[]; - expenses?: T.Expense[]; -}>; - -export const exportAllData: ExportAllData = async () => { - // Don't import anything until we're done with the first full load - if (!hasFinishedLoading.budgets || !hasFinishedLoading.expenses) { - return {}; - } - - try { - const budgets = (await fetchBudgets()).sort(sortByName); - const expenses = (await fetchExpenses()).sort(sortByDate); - - return { budgets, expenses }; - } catch (error) { - Swal.fire({ - title: 'Uh-oh', - text: 'Something went wrong exporting data.', - }); - - console.error(error); - } - - return {}; -}; - -export const importData = async ( - replaceData: boolean, - budgets: T.Budget[], - expenses: T.Expense[], -) => { - // Don't import anything until we're done with the first full load - if (!hasFinishedLoading.budgets || !hasFinishedLoading.expenses) { - return false; - } - - try { - if (replaceData) { - await deleteAllData(); - - await initializeDb(); - - // Very ugly, but... works. - while (!hasFinishedLoading.budgets || !hasFinishedLoading.expenses) { - await new Promise((resolve) => { - setTimeout(resolve, 100); - }); - } - } - - const finalBudgetsToAdd: T.Budget[] = []; - - for (const budget of budgets) { - const newBudgetId = `${Date.now().toString()}:${Math.random()}`; - const newBudget: T.Budget = { - id: newBudgetId, - name: budget.name, - value: budget.value, - month: budget.month, - }; - - finalBudgetsToAdd.push(newBudget); - } - - const addBudgetChunks: T.Budget[][] = splitArrayInChunks( - finalBudgetsToAdd, - 10, - ); - - for (const budgetsToAdd of addBudgetChunks) { - await userbase.putTransaction({ - databaseName: 'budgets', - operations: budgetsToAdd.map((budget) => ({ - command: 'Insert', - item: { - name: budget.name, - value: budget.value, - month: budget.month, - } as T.BudgetContent, - itemId: budget.id, - })), - }); - - // Wait a second, to avoid hitting rate limits - await new Promise((resolve) => { - setTimeout(resolve, 1000); - }); - } - - const finalExpensesToAdd: T.Expense[] = []; - - for (const expense of expenses) { - const newExpenseId = `${Date.now().toString()}:${Math.random()}`; - const newExpense: T.Expense = { - id: newExpenseId, - cost: expense.cost, - budget: expense.budget, - description: expense.description, - date: expense.date, - }; - - finalExpensesToAdd.push(newExpense); - } - - const addExpenseChunks: T.Expense[][] = splitArrayInChunks( - finalExpensesToAdd, - 10, - ); - - for (const expensesToAdd of addExpenseChunks) { - await userbase.putTransaction({ - databaseName: 'expenses', - operations: expensesToAdd.map((expense) => ({ - command: 'Insert', - item: { - cost: expense.cost, - budget: expense.budget, - description: expense.description, - date: expense.date, - } as T.ExpenseContent, - itemId: expense.id, - })), - }); - - // Wait a second, to avoid hitting rate limits - await new Promise((resolve) => { - setTimeout(resolve, 1000); - }); - } - - return true; - } catch (error) { - Swal.fire({ - title: 'Uh-oh', - text: 'Something went wrong importing data.', - }); - - console.error(error); - } - - return false; -}; - -export const copyBudgets = async ( - originalMonth: string, - destinationMonth: string, -) => { - // Don't copy anything until we're done with the first full load - if (!hasFinishedLoading.budgets || !hasFinishedLoading.expenses) { - return; - } - - const originalBudgets = await fetchBudgets(originalMonth); - const destinationBudgets = originalBudgets.map((budget) => { - const newBudget: T.Budget = { ...budget }; - newBudget.id = `${Date.now().toString()}:${Math.random()}`; - newBudget.month = destinationMonth; - return newBudget; - }); - if (destinationBudgets.length > 0) { - try { - const finalBudgetsToAdd: T.Budget[] = []; - - for (const budget of destinationBudgets) { - const newBudget: T.Budget = { - id: budget.id, - name: budget.name, - value: budget.value, - month: budget.month, - }; - - finalBudgetsToAdd.push(newBudget); - } - - const addBudgetChunks: T.Budget[][] = splitArrayInChunks( - finalBudgetsToAdd, - 10, - ); - - for (const budgetsToAdd of addBudgetChunks) { - await userbase.putTransaction({ - databaseName: 'budgets', - operations: budgetsToAdd.map((budget) => ({ - command: 'Insert', - item: { - name: budget.name, - value: budget.value, - month: budget.month, - } as T.BudgetContent, - itemId: budget.id, - })), - }); - } - } catch (error) { - Swal.fire({ - title: 'Uh-oh', - text: 'Something went wrong copying budgets.', - }); - - console.error(error); - } - } -}; diff --git a/lib/types.ts b/lib/types.ts deleted file mode 100644 index 0c07eca..0000000 --- a/lib/types.ts +++ /dev/null @@ -1,41 +0,0 @@ -export interface PlainObject { - [key: string]: any; -} - -export type Currency = 'USD' | 'EUR' | 'GBP'; - -export type Theme = 'dark' | 'light'; - -export interface AuthToken { - currency: Currency; - theme?: Theme; -} - -export interface ExpenseContent { - cost: number; - description: string; - budget: string; - date: string; -} - -export interface Expense extends ExpenseContent { - id: string; -} - -export interface BudgetContent { - name: string; - month: string; - value: number; -} - -export interface Budget extends BudgetContent { - id: string; -} - -export interface PanelProps { - currency: Currency; - monthInView: string; - budgets: Budget[]; - expenses: Expense[]; - reloadData: () => Promise<void>; -} diff --git a/lib/utils.test.ts b/lib/utils.test.ts deleted file mode 100644 index 624a54b..0000000 --- a/lib/utils.test.ts +++ /dev/null @@ -1,87 +0,0 @@ -import { formatNumber, splitArrayInChunks } from './utils'; - -describe('lib/utils', () => { - it('.formatNumber', () => { - const tests = [ - { currency: 'USD', number: 10000, expected: '$10,000' }, - { currency: 'USD', number: 10000.5, expected: '$10,000.5' }, - { currency: 'EUR', number: 10000, expected: '€10,000' }, - { currency: 'EUR', number: 900.999, expected: '€901' }, - { currency: 'EUR', number: 900.991, expected: '€900.99' }, - { currency: 'USD', number: 50.11, expected: '$50.11' }, - { currency: 'GBP', number: 900.999, expected: '£901' }, - { currency: 'GBP', number: 900.991, expected: '£900.99' }, - { currency: 'GBP', number: 50.11, expected: '£50.11' }, - ]; - - for (const test of tests) { - const result = formatNumber(test.currency, test.number); - expect(result).toEqual(test.expected); - } - }); - - it('.splitArrayInChunks', () => { - const tests = [ - { - input: { - array: [ - { number: 1 }, - { number: 2 }, - { number: 3 }, - { number: 4 }, - { number: 5 }, - { number: 6 }, - ], - chunkLength: 2, - }, - expected: [ - [{ number: 1 }, { number: 2 }], - [{ number: 3 }, { number: 4 }], - [{ number: 5 }, { number: 6 }], - ], - }, - { - input: { - array: [ - { number: 1 }, - { number: 2 }, - { number: 3 }, - { number: 4 }, - { number: 5 }, - ], - chunkLength: 2, - }, - expected: [ - [{ number: 1 }, { number: 2 }], - [{ number: 3 }, { number: 4 }], - [{ number: 5 }], - ], - }, - { - input: { - array: [ - { number: 1 }, - { number: 2 }, - { number: 3 }, - { number: 4 }, - { number: 5 }, - { number: 6 }, - ], - chunkLength: 3, - }, - expected: [ - [{ number: 1 }, { number: 2 }, { number: 3 }], - [{ number: 4 }, { number: 5 }, { number: 6 }], - ], - }, - ]; - - for (const test of tests) { - const result = splitArrayInChunks( - test.input.array, - test.input.chunkLength, - ); - expect(result).toEqual(test.expected); - } - }); -}); diff --git a/lib/utils.ts b/lib/utils.ts index 1e4f3ad..be3da2e 100644 --- a/lib/utils.ts +++ b/lib/utils.ts @@ -1,25 +1,118 @@ -import userbase from 'userbase-js'; -import Swal from 'sweetalert2'; +import 'https://deno.land/std@0.142.0/dotenv/load.ts'; -import { sessionNamespace } from 'lib/constants'; -import { AuthToken, Currency, Theme } from 'lib/types'; +import header from '../components/header.ts'; +import footer from '../components/footer.ts'; +import loading from '../components/loading.ts'; -const USERBASE_APP_ID = process.env.NEXT_PUBLIC_USERBASE_APP_ID; -const sessionLengthInHours = 90 * 24; +// This allows us to have nice html syntax highlighting in template literals +export const html = String.raw; -export const formatNumber = (currency: Currency, number: number) => - new Intl.NumberFormat('en-US', { +const USERBASE_APP_ID = Deno.env.get('USERBASE_APP_ID') || ''; +const sessionLengthInHours = 90 * 24; // 3 months + +export const baseUrl = 'https://app.budgetzen.net'; +export const defaultTitle = 'Budget Zen — Simple and end-to-end encrypted budget and expense manager'; +export const defaultDescription = 'Simple and end-to-end encrypted budget and expense manager.'; + +export interface PageContentResult { + htmlContent: string; + titlePrefix?: string; + description?: string; +} + +interface BasicLayoutOptions { + currentPath: string; + titlePrefix?: string; + description?: string; +} + +function basicLayout(htmlContent: string, { currentPath, titlePrefix, description }: BasicLayoutOptions) { + let title = defaultTitle; + + if (titlePrefix) { + title = `${titlePrefix} - Budget Zen`; + } + + return html` + <!doctype html> + <html lang="en"> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <title>${title}</title> + <meta name="description" content="${description || defaultDescription}"> + <meta name="author" content="Bruno Bernardino"> + <meta property="og:title" content="${title}" /> + <link rel="icon" href="/public/images/favicon.png" type="image/png"> + <link rel="apple-touch-icon" href="/public/images/favicon.png"> + <link rel="stylesheet" href="/public/css/style.css"> + + <link rel="manifest" href="/public/manifest.json" /> + + <link rel="alternate" type="application/rss+xml" href="https://budgetzen.net/rss.xml" /> + <link rel="alternate" type="application/atom+xml" href="https://budgetzen.net/atom.xml" /> + <link rel="alternate" type="application/feed+json" href="https://budgetzen.net/feed.json" /> + </head> + <body> + ${loading()} + ${header(currentPath)} + <section class="wrapper" id="app-root"> + ${htmlContent} + </section> + ${footer()} + <script type="text/javascript"> + window.app = {}; + window.app.userbaseConfig = { + appId: "${USERBASE_APP_ID}", + sessionLength: ${sessionLengthInHours}, + }; + </script> + <script src="/public/js/userbase.js"></script> + <script src="/public/js/script.js"></script> + <script src="/public/js/sweetalert.js" defer></script> + <script src="/public/js/stripe.js" defer></script> + </body> + </html> + `; +} + +export function basicLayoutResponse(htmlContent: string, options: BasicLayoutOptions) { + return new Response(basicLayout(htmlContent, options), { + headers: { + 'content-type': 'text/html; charset=utf-8', + 'content-security-policy': + 'default-src \'self\' https://*.userbase.com wss://*.userbase.com https://*.stripe.com https://stripe.com data: blob:; child-src \'self\' data: blob: https://*.stripe.com; img-src \'self\' data: blob: https://*.stripe.com; style-src \'self\' \'unsafe-inline\' https://*.stripe.com; script-src \'self\' \'unsafe-inline\' \'unsafe-eval\';', + 'x-frame-options': 'DENY', + 'strict-transport-security': 'max-age=31536000; includeSubDomains; preload', + }, + }); +} + +export function isRunningLocally(urlPatternResult: URLPatternResult) { + return urlPatternResult.hostname.input === 'localhost'; +} + +// NOTE: The functions below are used in the frontend, but this copy allows for easier testing and type-checking + +export function escapeHtml(unsafe: string) { + return unsafe.replaceAll('&', '&').replaceAll('<', '<').replaceAll('>', '>').replaceAll('"', '"') + .replaceAll('\'', '''); +} + +export function formatNumber(currency: string, number: number) { + return new Intl.NumberFormat('en-US', { style: 'currency', currency: currency || 'USD', minimumFractionDigits: 0, maximumFractionDigits: 2, }).format(number); +} type SortableByDate = { date: string }; -export const sortByDate = ( +export function sortByDate( objectA: SortableByDate, objectB: SortableByDate, -) => { +) { if (objectA.date < objectB.date) { return -1; } @@ -27,13 +120,27 @@ export const sortByDate = ( return 1; } return 0; -}; +} + +type SortableByCount = { count: number }; +export function sortByCount( + objectA: SortableByCount, + objectB: SortableByCount, +) { + if (objectA.count < objectB.count) { + return 1; + } + if (objectA.count > objectB.count) { + return -1; + } + return 0; +} type SortableByName = { name: string }; -export const sortByName = ( +export function sortByName( objectA: SortableByName, objectB: SortableByName, -) => { +) { const nameA = objectA.name.toUpperCase(); const nameB = objectB.name.toUpperCase(); if (nameA < nameB) { @@ -43,165 +150,64 @@ export const sortByName = ( return 1; } return 0; -}; +} type SortableByMissingBudget = { expensesCost: number; value: number }; -export const sortByMissingBudget = ( +export function sortByMissingBudget( objectA: SortableByMissingBudget, objectB: SortableByMissingBudget, -) => { +) { const valueA = objectA.value - objectA.expensesCost; const valueB = objectB.value - objectB.expensesCost; return valueB - valueA; -}; +} -export const splitArrayInChunks = (array: any[], chunkLength: number) => { +export function splitArrayInChunks(array: any[], chunkLength: number) { const chunks = []; let chunkIndex = 0; const arrayLength = array.length; while (chunkIndex < arrayLength) { - chunks.push(array.slice(chunkIndex, (chunkIndex += chunkLength))); + chunks.push(array.slice(chunkIndex, chunkIndex += chunkLength)); } return chunks; -}; +} -export const uniqBy = ( +export function uniqueBy( array: any[], predicate: string | ((item: any) => any), -) => { - const filter = - typeof predicate === 'function' - ? predicate - : (object: any) => object[predicate]; +) { + const filter = typeof predicate === 'function' ? predicate : (object: any) => object[predicate]; return [ ...array .reduce((map, item) => { const key = item === null || item === undefined ? item : filter(item); - // eslint-disable-next-line map.has(key) || map.set(key, item); return map; }, new Map()) .values(), ]; -}; - -export const showNotification = ( - message: string, - type: 'success' | 'error' = 'success', -) => { - const Toast = Swal.mixin({ - toast: true, - position: 'top-end', - showConfirmButton: false, - timer: type === 'success' ? 2500 : 0, - timerProgressBar: type === 'success', - didOpen: (toast) => { - toast.addEventListener('mouseenter', Swal.stopTimer); - toast.addEventListener('mouseleave', Swal.resumeTimer); - }, - }); - - Toast.fire({ - icon: type, - title: message, - }); -}; - -export const updatePreferences = ( - currency: Currency = 'USD', - theme: Theme = 'light', -) => { - const authToken: AuthToken = { - currency, - theme, - }; +} +export async function recordPageView(pathname: string) { try { - localStorage.setItem( - `${sessionNamespace}:userInfo`, - JSON.stringify(authToken), - ); - return true; - } catch (error) { - Swal.fire( - 'Something went wrong!', - `Uh oh! Something wrong happened: ${error && error.message}`, - 'error', - ); - } - - return false; -}; - -export const doLogout = async () => { - try { - localStorage.removeItem(`${sessionNamespace}:userInfo`); - await userbase.signOut(); - return true; - } catch (error) { - Swal.fire( - 'Something went wrong!', - `Uh oh! Something wrong happened: ${error && error.message}`, - 'error', - ); - } - - return false; -}; - -export const isLoggedIn = async () => { - try { - const session = await userbase.init({ - appId: USERBASE_APP_ID, - sessionLength: sessionLengthInHours, + await fetch('https://stats.onbrn.com/api/event', { + method: 'POST', + headers: { + 'content-type': 'application/json; charset=utf-8', + }, + body: JSON.stringify({ + domain: baseUrl.replace('https://', ''), + name: 'pageview', + url: `${baseUrl}${pathname}`, + }), }); - if (session.user) { - return true; - } } catch (error) { - // Do nothing + console.log('Failed to log pageview'); + console.error(error); } - - return false; -}; - -export const getUserSession = async () => { - try { - const session = await userbase.init({ - appId: USERBASE_APP_ID, - sessionLength: sessionLengthInHours, - }); - return session.user; - } catch (error) { - // Do nothing - } - - return null; -}; - -type GetUserInfo = () => AuthToken; -export const getUserInfo: GetUserInfo = () => { - const defaultAuthToken: AuthToken = { - currency: 'USD', - theme: 'light', - }; - - try { - const userInfo: AuthToken = JSON.parse( - localStorage.getItem(`${sessionNamespace}:userInfo`), - ); - return userInfo || defaultAuthToken; - } catch (error) { - Swal.fire({ - title: 'Uh-oh', - text: 'Something went wrong getting user info.', - }); - } - - return defaultAuthToken; -}; +} diff --git a/lib/utils_test.ts b/lib/utils_test.ts new file mode 100644 index 0000000..c5b2a6b --- /dev/null +++ b/lib/utils_test.ts @@ -0,0 +1,104 @@ +import { assertEquals } from 'https://deno.land/std@0.142.0/testing/asserts.ts'; +import { escapeHtml, formatNumber, splitArrayInChunks } from './utils.ts'; + +Deno.test('that escapeHtml works', () => { + const tests = [ + { + input: '<a href="https://brunobernardino.com">URL</a>', + expected: '<a href="https://brunobernardino.com">URL</a>', + }, + { + input: '"><img onerror=\'alert(1)\' />', + expected: '"><img onerror='alert(1)' />', + }, + ]; + + for (const test of tests) { + const output = escapeHtml(test.input); + assertEquals(output, test.expected); + } +}); + +Deno.test('that formatNumber works', () => { + const tests = [ + { currency: 'USD', number: 10000, expected: '$10,000' }, + { currency: 'USD', number: 10000.5, expected: '$10,000.5' }, + { currency: 'EUR', number: 10000, expected: '€10,000' }, + { currency: 'EUR', number: 900.999, expected: '€901' }, + { currency: 'EUR', number: 900.991, expected: '€900.99' }, + { currency: 'USD', number: 50.11, expected: '$50.11' }, + { currency: 'GBP', number: 900.999, expected: '£901' }, + { currency: 'GBP', number: 900.991, expected: '£900.99' }, + { currency: 'GBP', number: 50.11, expected: '£50.11' }, + ]; + + for (const test of tests) { + const result = formatNumber(test.currency, test.number); + assertEquals(result, test.expected); + } +}); + +Deno.test('that splitArrayInChunks works', () => { + const tests = [ + { + input: { + array: [ + { number: 1 }, + { number: 2 }, + { number: 3 }, + { number: 4 }, + { number: 5 }, + { number: 6 }, + ], + chunkLength: 2, + }, + expected: [ + [{ number: 1 }, { number: 2 }], + [{ number: 3 }, { number: 4 }], + [{ number: 5 }, { number: 6 }], + ], + }, + { + input: { + array: [ + { number: 1 }, + { number: 2 }, + { number: 3 }, + { number: 4 }, + { number: 5 }, + ], + chunkLength: 2, + }, + expected: [ + [{ number: 1 }, { number: 2 }], + [{ number: 3 }, { number: 4 }], + [{ number: 5 }], + ], + }, + { + input: { + array: [ + { number: 1 }, + { number: 2 }, + { number: 3 }, + { number: 4 }, + { number: 5 }, + { number: 6 }, + ], + chunkLength: 3, + }, + expected: [ + [{ number: 1 }, { number: 2 }, { number: 3 }], + [{ number: 4 }, { number: 5 }, { number: 6 }], + ], + }, + ]; + + for (const test of tests) { + const output = splitArrayInChunks( + test.input.array, + test.input.chunkLength, + ); + assertEquals(output, test.expected); + } +}); diff --git a/main.ts b/main.ts new file mode 100644 index 0000000..a54c91e --- /dev/null +++ b/main.ts @@ -0,0 +1,25 @@ +import { serve } from 'https://deno.land/std@0.142.0/http/server.ts'; +import routes, { Route } from './routes.ts'; + +function handler(request: Request) { + const routeKeys = Object.keys(routes); + + for (const routeKey of routeKeys) { + const route: Route = routes[routeKey]; + const match = route.pattern.exec(request.url); + + if (match) { + return route.handler(request, match); + } + } + + return new Response('Not found', { + status: 404, + }); +} + +export const abortController = new AbortController(); + +const PORT = Deno.env.get('PORT') || 8000; + +serve(handler, { port: PORT as number, signal: abortController.signal }); diff --git a/main_test.ts b/main_test.ts new file mode 100644 index 0000000..69338aa --- /dev/null +++ b/main_test.ts @@ -0,0 +1,25 @@ +import { assertEquals } from 'https://deno.land/std@0.142.0/testing/asserts.ts'; +import { abortController } from './main.ts'; + +const baseUrl = 'http://localhost:8000'; + +Deno.test({ + name: 'HTTP Server', + fn: async () => { + let response = await fetch(`${baseUrl}/`); + assertEquals(response.status, 200); + + let responseText = await response.text(); + assertEquals(responseText.includes('Budget Zen'), true); + + response = await fetch(`${baseUrl}/blah`); + assertEquals(response.status, 404); + + responseText = await response.text(); + assertEquals(responseText, 'Not found'); + + abortController.abort('Test finished'); + }, + sanitizeResources: false, + sanitizeOps: false, +}); diff --git a/modules/auth/LoginButton.tsx b/modules/auth/LoginButton.tsx deleted file mode 100644 index 3c1fcf6..0000000 --- a/modules/auth/LoginButton.tsx +++ /dev/null @@ -1,124 +0,0 @@ -import { useCallback, useState } from 'react'; -import Swal from 'sweetalert2'; - -import Loading from 'components/Loading'; -import Button from 'components/Button'; -import TextInput from 'components/TextInput'; -import Paragraph from 'components/Paragraph'; -import { validateLogin, createAccount } from 'lib/data-utils'; -import { showNotification, updatePreferences } from 'lib/utils'; - -const LoginButton = () => { - const [isSubmitting, setIsSubmitting] = useState(false); - const [email, setEmail] = useState(''); - const [password, setPassword] = useState(''); - const handleLogin = useCallback(async () => { - if (!email || !password) { - return; - } - - setIsSubmitting(true); - - const { success, error } = await validateLogin(email, password); - - if (success) { - Swal.fire( - 'Alright!', - "That looks alright. Let's get on with it!", - 'success', - ); - - updatePreferences(); - - window.location.reload(); - } else { - if (error) { - showNotification(error, 'error'); - } - - setIsSubmitting(false); - } - }, [isSubmitting, email, password]); - - const handleSignup = useCallback(async () => { - if (!email || !password) { - return; - } - - setIsSubmitting(true); - - const { success, error } = await createAccount(email, password); - - if (success) { - Swal.fire( - 'Alright!', - "That looks alright. Let's get on with it!", - 'success', - ); - - window.location.reload(); - } else { - if (error) { - showNotification(error, 'error'); - } - - setIsSubmitting(false); - } - }, [isSubmitting, email, password]); - - return ( - <> - <Loading isShowing={isSubmitting} /> - <TextInput - type="email" - label="Email" - name="email" - value={email} - onChange={(event: React.ChangeEvent<HTMLInputElement>) => - setEmail(event.target.value) - } - onKeyDown={(event: React.KeyboardEvent<HTMLInputElement>) => { - if (event.key === 'Enter') { - handleLogin(); - } - }} - data-automation="login-email" - /> - <TextInput - type="password" - label="Password / Encryption Key" - name="password" - value={password} - onChange={(event: React.ChangeEvent<HTMLInputElement>) => - setPassword(event.target.value) - } - onKeyDown={(event: React.KeyboardEvent<HTMLInputElement>) => { - if (event.key === 'Enter') { - handleLogin(); - } - }} - data-automation="login-password" - /> - <Button - onClick={handleLogin} - width="large" - type="primary" - style={{ margin: '20px auto' }} - data-automation="login-button" - > - Login - </Button> - <Paragraph style={{ textAlign: 'center' }}>or</Paragraph> - <Button - onClick={handleSignup} - width="large" - type="secondary" - style={{ margin: '20px auto' }} - > - Signup - </Button> - </> - ); -}; - -export default LoginButton; diff --git a/modules/auth/LogoutLink.tsx b/modules/auth/LogoutLink.tsx deleted file mode 100644 index 4b5eb35..0000000 --- a/modules/auth/LogoutLink.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import { useCallback, useState } from 'react'; -import Swal from 'sweetalert2'; -import styled from 'styled-components'; - -import Loading from 'components/Loading'; -import Button from 'components/Button'; -import { doLogout } from 'lib/utils'; - -const Container = styled.div` - top: 8px; - right: 8px; - position: absolute; -`; - -const LogoutLink = () => { - const [isSubmitting, setIsSubmitting] = useState(false); - const handleLogout = useCallback(async () => { - setIsSubmitting(true); - - doLogout(); - - Swal.fire('Alright!', 'No idea who you are right now.', 'success'); - - window.location.reload(); - }, [isSubmitting]); - - return ( - <Container> - <Loading isShowing={isSubmitting} /> - <Button element="a" onClick={handleLogout} width="tiny"> - Logout - </Button> - </Container> - ); -}; - -export default LogoutLink; diff --git a/next-env.d.ts b/next-env.d.ts deleted file mode 100644 index 4f11a03..0000000 --- a/next-env.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -/// <reference types="next" /> -/// <reference types="next/image-types/global" /> - -// NOTE: This file should not be edited -// see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/next.config.js b/next.config.js deleted file mode 100644 index 703597e..0000000 --- a/next.config.js +++ /dev/null @@ -1,53 +0,0 @@ -const path = require('path'); -const withPWA = require('next-pwa'); - -const securityHeaders = [ - { - key: 'X-Frame-Options', - value: 'DENY', - }, - { - key: 'Content-Security-Policy', - value: - "default-src 'self' https://*.userbase.com wss://*.userbase.com https://*.stripe.com data: blob:; child-src 'self' data: blob: https://*.stripe.com; img-src 'self' data: blob: https://*.stripe.com; style-src 'self' 'unsafe-inline' https://*.stripe.com; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://*.stripe.com", - }, - { - key: 'Strict-Transport-Security', - value: 'max-age=31536000; includeSubDomains; preload', - }, -]; - -module.exports = withPWA({ - pwa: { - dest: 'public', - register: true, - skipWaiting: true, - }, - target: 'serverless', - sassLoaderOptions: { - includePaths: [ - path.join(__dirname, 'styles'), - path.join(__dirname, 'node_modules'), - ], - }, - webpack(config) { - config.resolve.alias.pages = path.join(__dirname, 'pages'); - config.resolve.alias.components = path.join(__dirname, 'components'); - config.resolve.alias.modules = path.join(__dirname, 'modules'); - config.resolve.alias.lib = path.join(__dirname, 'lib'); - config.resolve.alias.styles = path.join(__dirname, 'styles'); - return config; - }, - async headers() { - return [ - { - source: '/', - headers: securityHeaders, - }, - { - source: '/:path*', - headers: securityHeaders, - }, - ]; - }, -}); diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index b9f12b6..0000000 --- a/package-lock.json +++ /dev/null @@ -1,24762 +0,0 @@ -{ - "name": "budgetzen-app", - "version": "2.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "budgetzen-app", - "version": "2.0.0", - "license": "UNLICENSED", - "dependencies": { - "@types/node": "17.0.6", - "@types/react": "17.0.38", - "@types/react-dom": "17.0.11", - "@types/styled-components": "5.1.19", - "axios": "0.27.2", - "ky": "0.28.7", - "moment": "2.29.1", - "next": "12.0.7", - "next-pwa": "5.4.4", - "react": "17.0.2", - "react-dom": "17.0.2", - "react-helmet": "6.1.0", - "react-svg-ionicons": "0.2.3", - "react-toggle-switch": "3.0.4", - "react-use": "17.3.2", - "rodal": "1.8.1", - "sass": "1.45.2", - "styled-components": "5.3.3", - "sweetalert2": "11.3.3", - "typescript": "4.5.4", - "userbase-js": "2.8.0" - }, - "devDependencies": { - "@types/enzyme": "3.10.11", - "@types/jest": "27.4.0", - "@types/react-helmet": "6.1.5", - "@typescript-eslint/eslint-plugin": "5.8.1", - "@typescript-eslint/parser": "5.8.1", - "@wojtekmaj/enzyme-adapter-react-17": "0.6.6", - "babel-core": "6.26.3", - "babel-eslint": "10.1.0", - "babel-jest": "27.4.5", - "babel-plugin-styled-components": "2.0.2", - "enzyme": "3.11.0", - "enzyme-adapter-react-16": "1.15.6", - "eslint": "8.6.0", - "eslint-config-airbnb": "19.0.4", - "eslint-config-prettier": "8.3.0", - "eslint-plugin-babel": "5.3.1", - "eslint-plugin-import": "2.25.3", - "eslint-plugin-jsx-a11y": "6.5.1", - "eslint-plugin-react": "7.28.0", - "expect": "27.4.2", - "expect-enzyme": "1.3.0", - "identity-obj-proxy": "3.0.0", - "jest": "27.4.5", - "prettier": "2.5.1", - "react-addons-test-utils": "15.6.2", - "react-test-renderer": "17.0.2", - "webpack": "5.65.0" - }, - "engines": { - "node": "16.13.1", - "npm": "8.2.0" - } - }, - "node_modules/@apideck/better-ajv-errors": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.2.tgz", - "integrity": "sha512-JdEazx7qiVqTBzzBl5rolRwl5cmhihjfIcpqRzIZjtT6b18liVmDn/VlWpqW4C/qP2hrFFMLRV1wlex8ZVBPTg==", - "dependencies": { - "json-schema": "^0.4.0", - "jsonpointer": "^5.0.0", - "leven": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "ajv": ">=8" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", - "dependencies": { - "@babel/highlight": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.16.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.4.tgz", - "integrity": "sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.7.tgz", - "integrity": "sha512-aeLaqcqThRNZYmbMqtulsetOQZ/5gbR/dWruUCJcpas4Qoyy+QeagfDsPdMrqwsPRDNxJvBlRiZxxX7THO7qtA==", - "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.16.7", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helpers": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.7.tgz", - "integrity": "sha512-/ST3Sg8MLGY5HVYmrjOgL60ENux/HfO/CsUh7y4MalThufhE/Ff/6EibFDHi4jiDCaWfJKoqbE6oTh21c5hrRg==", - "dependencies": { - "@babel/types": "^7.16.7", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", - "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz", - "integrity": "sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==", - "dependencies": { - "@babel/helper-explode-assignable-expression": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", - "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==", - "dependencies": { - "@babel/compat-data": "^7.16.4", - "@babel/helper-validator-option": "^7.16.7", - "browserslist": "^4.17.5", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.7.tgz", - "integrity": "sha512-kIFozAvVfK05DM4EVQYKK+zteWvY85BFdGBRQBytRyY3y+6PX0DkDOn/CZ3lEuczCfrCxEzwt0YtP/87YPTWSw==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-member-expression-to-functions": "^7.16.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.7.tgz", - "integrity": "sha512-fk5A6ymfp+O5+p2yCkXAu5Kyj6v0xh0RBeNcAkYUMDvvAAoxvSKXn+Jb37t/yWFiQVDFK1ELpUTD8/aLhCPu+g==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "regexpu-core": "^4.7.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.0.tgz", - "integrity": "sha512-7hfT8lUljl/tM3h+izTX/pO3W3frz2ok6Pk+gzys8iJqDfZrZy2pXjRTZAvG2YmfHun1X4q8/UZRLatMfqc5Tg==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.13.0", - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/traverse": "^7.13.0", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0-0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", - "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-explode-assignable-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz", - "integrity": "sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", - "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", - "dependencies": { - "@babel/helper-get-function-arity": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-get-function-arity": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", - "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", - "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz", - "integrity": "sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q==", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", - "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", - "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==", - "dependencies": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", - "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.7.tgz", - "integrity": "sha512-C3o117GnP/j/N2OWo+oepeWbFEKRfNaay+F1Eo5Mj3A1SRjyx+qaFhm23nlipub7Cjv2azdUUiDH+VlpdwUFRg==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-wrap-function": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz", - "integrity": "sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==", - "dependencies": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-member-expression-to-functions": "^7.16.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", - "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", - "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", - "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.7.tgz", - "integrity": "sha512-7a9sABeVwcunnztZZ7WTgSw6jVYLzM1wua0Z4HIXm9S3/HC96WKQTkFgGEaj5W06SHHihPJ6Le6HzS5cGOQMNw==", - "dependencies": { - "@babel/helper-function-name": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.7.tgz", - "integrity": "sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw==", - "dependencies": { - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.7.tgz", - "integrity": "sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.7.tgz", - "integrity": "sha512-sR4eaSrnM7BV7QPzGfEX5paG/6wrZM3I0HDzfIAK06ESvo9oy3xBuVBxE3MbQaKNhvg8g/ixjMWo2CGpzpHsDA==", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz", - "integrity": "sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz", - "integrity": "sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", - "@babel/plugin-proposal-optional-chaining": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.7.tgz", - "integrity": "sha512-TTXBT3A5c11eqRzaC6beO6rlFT3Mo9C2e8eB44tTr52ESXSK2CIc2fOp1ynpAwQA8HhBMho+WXhMHWlAe3xkpw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-remap-async-to-generator": "^7.16.7", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz", - "integrity": "sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.7.tgz", - "integrity": "sha512-dgqJJrcZoG/4CkMopzhPJjGxsIe9A8RlkQLnL/Vhhx8AA9ZuaRwGSlscSh42hazc7WSrya/IK7mTeoF0DP9tEw==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz", - "integrity": "sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz", - "integrity": "sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz", - "integrity": "sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz", - "integrity": "sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz", - "integrity": "sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz", - "integrity": "sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.7.tgz", - "integrity": "sha512-3O0Y4+dw94HA86qSg9IHfyPktgR7q3gpNVAeiKQd+8jBKFaU5NQS1Yatgo4wY+UFNuLjvxcSmzcsHqrhgTyBUA==", - "dependencies": { - "@babel/compat-data": "^7.16.4", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz", - "integrity": "sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz", - "integrity": "sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.7.tgz", - "integrity": "sha512-7twV3pzhrRxSwHeIvFE6coPgvo+exNDOiGUMg39o2LiLo1Y+4aKpfkcLGcg1UHonzorCt7SNXnoMyCnnIOA8Sw==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz", - "integrity": "sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-create-class-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz", - "integrity": "sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.14.5.tgz", - "integrity": "sha512-ohuFIsOMXJnbOMRfX7/w7LocdR6R7whhuRD4ax8IipLcLPlZGJKkBxgHp++U4N/vKyU16/YDQr2f5seajD3jIw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz", - "integrity": "sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz", - "integrity": "sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.7.tgz", - "integrity": "sha512-pFEfjnK4DfXCfAlA5I98BYdDJD8NltMzx19gt6DAmfE+2lXRfPUoa0/5SUjT4+TDE1W/rcxU/1lgN55vpAjjdg==", - "dependencies": { - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-remap-async-to-generator": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz", - "integrity": "sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz", - "integrity": "sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz", - "integrity": "sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz", - "integrity": "sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.7.tgz", - "integrity": "sha512-VqAwhTHBnu5xBVDCvrvqJbtLUa++qZaWC0Fgr2mqokBlulZARGyIvZDoqbPlPaKImQ9dKAcCzbv+ul//uqu70A==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz", - "integrity": "sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz", - "integrity": "sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz", - "integrity": "sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==", - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz", - "integrity": "sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz", - "integrity": "sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz", - "integrity": "sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz", - "integrity": "sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz", - "integrity": "sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g==", - "dependencies": { - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.7.tgz", - "integrity": "sha512-h2RP2kE7He1ZWKyAlanMZrAbdv+Acw1pA8dQZhE025WJZE2z0xzFADAinXA9fxd5bn7JnM+SdOGcndGx1ARs9w==", - "dependencies": { - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-simple-access": "^7.16.7", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.7.tgz", - "integrity": "sha512-DuK5E3k+QQmnOqBR9UkusByy5WZWGRxfzV529s9nPra1GE7olmxfqO2FHobEOYSPIjPBTr4p66YDcjQnt8cBmw==", - "dependencies": { - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz", - "integrity": "sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ==", - "dependencies": { - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.7.tgz", - "integrity": "sha512-kFy35VwmwIQwCjwrAQhl3+c/kr292i4KdLPKp5lPH03Ltc51qnFlIADoyPxc/6Naz3ok3WdYKg+KK6AH+D4utg==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz", - "integrity": "sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz", - "integrity": "sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz", - "integrity": "sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz", - "integrity": "sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz", - "integrity": "sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q==", - "dependencies": { - "regenerator-transform": "^0.14.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz", - "integrity": "sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz", - "integrity": "sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz", - "integrity": "sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz", - "integrity": "sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz", - "integrity": "sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz", - "integrity": "sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz", - "integrity": "sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz", - "integrity": "sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.7.tgz", - "integrity": "sha512-urX3Cee4aOZbRWOSa3mKPk0aqDikfILuo+C7qq7HY0InylGNZ1fekq9jmlr3pLWwZHF4yD7heQooc2Pow2KMyQ==", - "dependencies": { - "@babel/compat-data": "^7.16.4", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-validator-option": "^7.16.7", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.7", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.7", - "@babel/plugin-proposal-async-generator-functions": "^7.16.7", - "@babel/plugin-proposal-class-properties": "^7.16.7", - "@babel/plugin-proposal-class-static-block": "^7.16.7", - "@babel/plugin-proposal-dynamic-import": "^7.16.7", - "@babel/plugin-proposal-export-namespace-from": "^7.16.7", - "@babel/plugin-proposal-json-strings": "^7.16.7", - "@babel/plugin-proposal-logical-assignment-operators": "^7.16.7", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.7", - "@babel/plugin-proposal-numeric-separator": "^7.16.7", - "@babel/plugin-proposal-object-rest-spread": "^7.16.7", - "@babel/plugin-proposal-optional-catch-binding": "^7.16.7", - "@babel/plugin-proposal-optional-chaining": "^7.16.7", - "@babel/plugin-proposal-private-methods": "^7.16.7", - "@babel/plugin-proposal-private-property-in-object": "^7.16.7", - "@babel/plugin-proposal-unicode-property-regex": "^7.16.7", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.16.7", - "@babel/plugin-transform-async-to-generator": "^7.16.7", - "@babel/plugin-transform-block-scoped-functions": "^7.16.7", - "@babel/plugin-transform-block-scoping": "^7.16.7", - "@babel/plugin-transform-classes": "^7.16.7", - "@babel/plugin-transform-computed-properties": "^7.16.7", - "@babel/plugin-transform-destructuring": "^7.16.7", - "@babel/plugin-transform-dotall-regex": "^7.16.7", - "@babel/plugin-transform-duplicate-keys": "^7.16.7", - "@babel/plugin-transform-exponentiation-operator": "^7.16.7", - "@babel/plugin-transform-for-of": "^7.16.7", - "@babel/plugin-transform-function-name": "^7.16.7", - "@babel/plugin-transform-literals": "^7.16.7", - "@babel/plugin-transform-member-expression-literals": "^7.16.7", - "@babel/plugin-transform-modules-amd": "^7.16.7", - "@babel/plugin-transform-modules-commonjs": "^7.16.7", - "@babel/plugin-transform-modules-systemjs": "^7.16.7", - "@babel/plugin-transform-modules-umd": "^7.16.7", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.16.7", - "@babel/plugin-transform-new-target": "^7.16.7", - "@babel/plugin-transform-object-super": "^7.16.7", - "@babel/plugin-transform-parameters": "^7.16.7", - "@babel/plugin-transform-property-literals": "^7.16.7", - "@babel/plugin-transform-regenerator": "^7.16.7", - "@babel/plugin-transform-reserved-words": "^7.16.7", - "@babel/plugin-transform-shorthand-properties": "^7.16.7", - "@babel/plugin-transform-spread": "^7.16.7", - "@babel/plugin-transform-sticky-regex": "^7.16.7", - "@babel/plugin-transform-template-literals": "^7.16.7", - "@babel/plugin-transform-typeof-symbol": "^7.16.7", - "@babel/plugin-transform-unicode-escapes": "^7.16.7", - "@babel/plugin-transform-unicode-regex": "^7.16.7", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.16.7", - "babel-plugin-polyfill-corejs2": "^0.3.0", - "babel-plugin-polyfill-corejs3": "^0.4.0", - "babel-plugin-polyfill-regenerator": "^0.3.0", - "core-js-compat": "^3.19.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.7.tgz", - "integrity": "sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ==", - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/runtime-corejs3": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.16.7.tgz", - "integrity": "sha512-MiYR1yk8+TW/CpOD0CyX7ve9ffWTKqLk/L6pk8TPl0R8pNi+1pFY8fH9yET55KlvukQ4PAWfXsGr2YHVjcI4Pw==", - "dev": true, - "dependencies": { - "core-js-pure": "^3.19.0", - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/runtime-corejs3/node_modules/regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", - "dev": true - }, - "node_modules/@babel/runtime/node_modules/regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" - }, - "node_modules/@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", - "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.7.tgz", - "integrity": "sha512-8KWJPIb8c2VvY8AJrydh6+fVRo2ODx1wYBU2398xJVq0JomuLBZmVQzLPBblJgHIGYG4znCpUZUZ0Pt2vdmVYQ==", - "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.16.7", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.7.tgz", - "integrity": "sha512-E8HuV7FO9qLpx6OtoGfUQ2cjIYnbFwvZWYBS+87EwtdMvmUPJSwykpovFB+8insbpF0uJcpr8KMUi64XZntZcg==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "node_modules/@emotion/is-prop-valid": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", - "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==", - "dependencies": { - "@emotion/memoize": "0.7.4" - } - }, - "node_modules/@emotion/memoize": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", - "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==" - }, - "node_modules/@emotion/stylis": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz", - "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==" - }, - "node_modules/@emotion/unitless": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", - "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" - }, - "node_modules/@eslint/eslintrc": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", - "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.2.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", - "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/@eslint/eslintrc/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@hapi/accept": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@hapi/accept/-/accept-5.0.2.tgz", - "integrity": "sha512-CmzBx/bXUR8451fnZRuZAJRlzgm0Jgu5dltTX/bszmR2lheb9BpyN47Q1RbaGTsvFzn0PXAEs+lXDKfshccYZw==", - "dependencies": { - "@hapi/boom": "9.x.x", - "@hapi/hoek": "9.x.x" - } - }, - "node_modules/@hapi/boom": { - "version": "9.1.4", - "resolved": "https://registry.npmjs.org/@hapi/boom/-/boom-9.1.4.tgz", - "integrity": "sha512-Ls1oH8jaN1vNsqcaHVYJrKmgMcKsC1wcp8bujvXrHaAqD2iDYq3HoOwsxwo09Cuda5R5nC0o0IxlrlTuvPuzSw==", - "dependencies": { - "@hapi/hoek": "9.x.x" - } - }, - "node_modules/@hapi/hoek": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.1.tgz", - "integrity": "sha512-gfta+H8aziZsm8pZa0vj04KO6biEiisppNgA1kbJvFrrWu9Vm7eaUEy76DIxsuTaWvti5fkJVhllWc6ZTE+Mdw==" - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.2.tgz", - "integrity": "sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console": { - "version": "27.4.2", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.4.2.tgz", - "integrity": "sha512-xknHThRsPB/To1FUbi6pCe43y58qFC03zfb6R7fDb/FfC7k2R3i1l+izRBJf8DI46KhYGRaF14Eo9A3qbBoixg==", - "dev": true, - "dependencies": { - "@jest/types": "^27.4.2", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^27.4.2", - "jest-util": "^27.4.2", - "slash": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/console/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/console/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/console/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/console/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/console/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/core": { - "version": "27.4.5", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.4.5.tgz", - "integrity": "sha512-3tm/Pevmi8bDsgvo73nX8p/WPng6KWlCyScW10FPEoN1HU4pwI83tJ3TsFvi1FfzsjwUlMNEPowgb/rPau/LTQ==", - "dev": true, - "dependencies": { - "@jest/console": "^27.4.2", - "@jest/reporters": "^27.4.5", - "@jest/test-result": "^27.4.2", - "@jest/transform": "^27.4.5", - "@jest/types": "^27.4.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-changed-files": "^27.4.2", - "jest-config": "^27.4.5", - "jest-haste-map": "^27.4.5", - "jest-message-util": "^27.4.2", - "jest-regex-util": "^27.4.0", - "jest-resolve": "^27.4.5", - "jest-resolve-dependencies": "^27.4.5", - "jest-runner": "^27.4.5", - "jest-runtime": "^27.4.5", - "jest-snapshot": "^27.4.5", - "jest-util": "^27.4.2", - "jest-validate": "^27.4.2", - "jest-watcher": "^27.4.2", - "micromatch": "^4.0.4", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/core/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/core/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/core/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/core/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/core/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/core/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/core/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/core/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/environment": { - "version": "27.4.4", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.4.4.tgz", - "integrity": "sha512-q+niMx7cJgt/t/b6dzLOh4W8Ef/8VyKG7hxASK39jakijJzbFBGpptx3RXz13FFV7OishQ9lTbv+dQ5K3EhfDQ==", - "dev": true, - "dependencies": { - "@jest/fake-timers": "^27.4.2", - "@jest/types": "^27.4.2", - "@types/node": "*", - "jest-mock": "^27.4.2" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/fake-timers": { - "version": "27.4.2", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.4.2.tgz", - "integrity": "sha512-f/Xpzn5YQk5adtqBgvw1V6bF8Nx3hY0OIRRpCvWcfPl0EAjdqWPdhH3t/3XpiWZqtjIEHDyMKP9ajpva1l4Zmg==", - "dev": true, - "dependencies": { - "@jest/types": "^27.4.2", - "@sinonjs/fake-timers": "^8.0.1", - "@types/node": "*", - "jest-message-util": "^27.4.2", - "jest-mock": "^27.4.2", - "jest-util": "^27.4.2" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/globals": { - "version": "27.4.4", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.4.4.tgz", - "integrity": "sha512-bqpqQhW30BOreXM8bA8t8JbOQzsq/WnPTnBl+It3UxAD9J8yxEAaBEylHx1dtBapAr/UBk8GidXbzmqnee8tYQ==", - "dev": true, - "dependencies": { - "@jest/environment": "^27.4.4", - "@jest/types": "^27.4.2", - "expect": "^27.4.2" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/reporters": { - "version": "27.4.5", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.4.5.tgz", - "integrity": "sha512-3orsG4vi8zXuBqEoy2LbnC1kuvkg1KQUgqNxmxpQgIOQEPeV0onvZu+qDQnEoX8qTQErtqn/xzcnbpeTuOLSiA==", - "dev": true, - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.4.2", - "@jest/test-result": "^27.4.2", - "@jest/transform": "^27.4.5", - "@jest/types": "^27.4.2", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.4", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^4.0.3", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "jest-haste-map": "^27.4.5", - "jest-resolve": "^27.4.5", - "jest-util": "^27.4.2", - "jest-worker": "^27.4.5", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^8.1.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/reporters/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/reporters/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/reporters/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/reporters/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/reporters/node_modules/istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/reporters/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@jest/reporters/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/reporters/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@jest/reporters/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/source-map": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.4.0.tgz", - "integrity": "sha512-Ntjx9jzP26Bvhbm93z/AKcPRj/9wrkI88/gK60glXDx1q+IeI0rf7Lw2c89Ch6ofonB0On/iRDreQuQ6te9pgQ==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.4", - "source-map": "^0.6.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/source-map/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@jest/test-result": { - "version": "27.4.2", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.4.2.tgz", - "integrity": "sha512-kr+bCrra9jfTgxHXHa2UwoQjxvQk3Am6QbpAiJ5x/50LW8llOYrxILkqY0lZRW/hu8FXesnudbql263+EW9iNA==", - "dev": true, - "dependencies": { - "@jest/console": "^27.4.2", - "@jest/types": "^27.4.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "27.4.5", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.4.5.tgz", - "integrity": "sha512-n5woIn/1v+FT+9hniymHPARA9upYUmfi5Pw9ewVwXCDlK4F5/Gkees9v8vdjGdAIJ2MPHLHodiajLpZZanWzEQ==", - "dev": true, - "dependencies": { - "@jest/test-result": "^27.4.2", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.4.5", - "jest-runtime": "^27.4.5" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/transform": { - "version": "27.4.5", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.4.5.tgz", - "integrity": "sha512-PuMet2UlZtlGzwc6L+aZmR3I7CEBpqadO03pU40l2RNY2fFJ191b9/ITB44LNOhVtsyykx0OZvj0PCyuLm7Eew==", - "dev": true, - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.4.2", - "babel-plugin-istanbul": "^6.0.0", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.4.5", - "jest-regex-util": "^27.4.0", - "jest-util": "^27.4.2", - "micromatch": "^4.0.4", - "pirates": "^4.0.1", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/transform/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/transform/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/transform/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/transform/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/transform/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/transform/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@jest/transform/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/types": { - "version": "27.4.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.4.2.tgz", - "integrity": "sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/types/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/types/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/types/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/types/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/types/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jsbits/get-package-version": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@jsbits/get-package-version/-/get-package-version-1.0.3.tgz", - "integrity": "sha512-IJy1jRL01x7p6UEpgKa1lVLstMUx8EiIR8pPoS5sBfsHEoeLkzYiNpAfxPx8zLDUJyS1yBbChJjcWdPqyH285w==", - "engines": { - "node": ">=4.2" - } - }, - "node_modules/@napi-rs/triples": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@napi-rs/triples/-/triples-1.0.3.tgz", - "integrity": "sha512-jDJTpta+P4p1NZTFVLHJ/TLFVYVcOqv6l8xwOeBKNPMgY/zDYH/YH7SJbvrr/h1RcS9GzbPcLKGzpuK9cV56UA==" - }, - "node_modules/@next/env": { - "version": "12.0.7", - "resolved": "https://registry.npmjs.org/@next/env/-/env-12.0.7.tgz", - "integrity": "sha512-TNDqBV37wd95SiNdZsSUq8gnnrTwr+aN9wqy4Zxrxw4bC/jCHNsbK94DxjkG99VL30VCRXXDBTA1/Wa2jIpF9Q==" - }, - "node_modules/@next/polyfill-module": { - "version": "12.0.7", - "resolved": "https://registry.npmjs.org/@next/polyfill-module/-/polyfill-module-12.0.7.tgz", - "integrity": "sha512-sA8LAMMlmcspIZw/jeQuJTyA3uGrqOhTBaQE+G9u6DPohqrBFRkaz7RzzJeqXkUXw600occsIBknSjyVd1R67A==" - }, - "node_modules/@next/react-dev-overlay": { - "version": "12.0.7", - "resolved": "https://registry.npmjs.org/@next/react-dev-overlay/-/react-dev-overlay-12.0.7.tgz", - "integrity": "sha512-dSQLgpZ5uzyittFtIHlJCLAbc0LlMFbRBSYuGsIlrtGyjYN+WMcnz8lK48VLxNPFGuB/hEzkWV4TW5Zu75+Fzg==", - "dependencies": { - "@babel/code-frame": "7.12.11", - "anser": "1.4.9", - "chalk": "4.0.0", - "classnames": "2.2.6", - "css.escape": "1.5.1", - "data-uri-to-buffer": "3.0.1", - "platform": "1.3.6", - "shell-quote": "1.7.3", - "source-map": "0.8.0-beta.0", - "stacktrace-parser": "0.1.10", - "strip-ansi": "6.0.1" - }, - "peerDependencies": { - "react": "^17.0.2", - "react-dom": "^17.0.2", - "webpack": "^4 || ^5" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - } - } - }, - "node_modules/@next/react-dev-overlay/node_modules/@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, - "node_modules/@next/react-dev-overlay/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@next/react-dev-overlay/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@next/react-dev-overlay/node_modules/chalk": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.0.0.tgz", - "integrity": "sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@next/react-dev-overlay/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@next/react-dev-overlay/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/@next/react-dev-overlay/node_modules/source-map": { - "version": "0.8.0-beta.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", - "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", - "dependencies": { - "whatwg-url": "^7.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@next/react-dev-overlay/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@next/react-dev-overlay/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@next/react-dev-overlay/node_modules/tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/@next/react-dev-overlay/node_modules/webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" - }, - "node_modules/@next/react-dev-overlay/node_modules/whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "dependencies": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, - "node_modules/@next/react-refresh-utils": { - "version": "12.0.7", - "resolved": "https://registry.npmjs.org/@next/react-refresh-utils/-/react-refresh-utils-12.0.7.tgz", - "integrity": "sha512-Pglj1t+7RxH0txEqVcD8ZxrJgqLDmKvQDqxKq3ZPRWxMv7LTl7FVT2Pnb36QFeBwCvMVl67jxsADKsW0idz8sA==", - "peerDependencies": { - "react-refresh": "0.8.3", - "webpack": "^4 || ^5" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - } - } - }, - "node_modules/@next/swc-android-arm64": { - "version": "12.0.7", - "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.0.7.tgz", - "integrity": "sha512-yViT7EEc7JqxncRT+ZTeTsrAYXLlcefo0Y0eAfYmmalGD2605L4FWAVrJi4WnrSLji7l+veczw1WBmNeHICKKA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-darwin-arm64": { - "version": "12.0.7", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.0.7.tgz", - "integrity": "sha512-vhAyW2rDEUcQesRVaj0z1hSoz7QhDzzGd0V1/5/5i9YJOfOtyrPsVJ82tlf7BfXl6/Ep+eKNfWVIb5/Jv89EKg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-darwin-x64": { - "version": "12.0.7", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.0.7.tgz", - "integrity": "sha512-km+6Rx6TvbraoQ1f0MXa69ol/x0RxzucFGa2OgZaYJERas0spy0iwW8hpASsGcf597D8VRW1x+R2C7ZdjVBSTw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm-gnueabihf": { - "version": "12.0.7", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.0.7.tgz", - "integrity": "sha512-d0zWr877YqZ2cf/DQy6obouaR39r0FPebcXj2nws9AC99m68CO2xVpWv9jT7mFvpY+T40HJisLH80jSZ2iQ9sA==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-gnu": { - "version": "12.0.7", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.0.7.tgz", - "integrity": "sha512-fdobh5u6gG13Gd5LkHhJ+W8tF9hbaFolRW99FhzArMe5/nMKlLdBymOxvitE3K4gSFQxbXJA6TbU0Vv0e59Kww==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-musl": { - "version": "12.0.7", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.0.7.tgz", - "integrity": "sha512-vx0c5Q3oIScFNT/4jI9rCe0yPzKuCqWOkiO/OOV0ixSI2gLhbrwDIcdkm79fKVn3i8JOJunxE4zDoFeR/g8xqQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-gnu": { - "version": "12.0.7", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.0.7.tgz", - "integrity": "sha512-9ITyp6s6uGVKNx3C/GP7GrYycbcwTADG7TdIXzXUxOOZORrdB1GNg3w/EL3Am4VMPPEpO6v1RfKo2IKZpVKfTA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-musl": { - "version": "12.0.7", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.0.7.tgz", - "integrity": "sha512-C+k+cygbIZXYfc+Hx2fNPUBEg7jzio+mniP5ywZevuTXW14zodIfQ3ZMoMJR8EpOVvYpjWFk2uAjiwqgx8vo/g==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-arm64-msvc": { - "version": "12.0.7", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.0.7.tgz", - "integrity": "sha512-7jTRjOKkDVnb5s7VoHT7eX+eyT/5BQJ/ljP2G56riAgKGqPL63/V7FXemLhhLT67D+OjoP8DRA2E2ne6IPHk4w==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-ia32-msvc": { - "version": "12.0.7", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.0.7.tgz", - "integrity": "sha512-2u5pGDsk7H6gGxob2ATIojzlwKzgYsrijo7RRpXOiPePVqwPWg6/pmhaJzLdpfjaBgRg1NFmwSp/7Ump9X8Ijg==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-x64-msvc": { - "version": "12.0.7", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.0.7.tgz", - "integrity": "sha512-frEWtbf+q8Oz4e2UqKJrNssk6DZ6/NLCQXn5/ORWE9dPAfe9XS6aK5FRZ6DuEPmmKd5gOoRkKJFFz5nYd+TeyQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@rollup/plugin-babel": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.0.tgz", - "integrity": "sha512-9uIC8HZOnVLrLHxayq/PTzw+uS25E14KPUBh5ktF+18Mjo5yK0ToMMx6epY0uEgkjwJw0aBW4x2horYXh8juWw==", - "dependencies": { - "@babel/helper-module-imports": "^7.10.4", - "@rollup/pluginutils": "^3.1.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "@types/babel__core": "^7.1.9", - "rollup": "^1.20.0||^2.0.0" - }, - "peerDependenciesMeta": { - "@types/babel__core": { - "optional": true - } - } - }, - "node_modules/@rollup/plugin-node-resolve": { - "version": "11.2.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", - "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", - "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "@types/resolve": "1.17.1", - "builtin-modules": "^3.1.0", - "deepmerge": "^4.2.2", - "is-module": "^1.0.0", - "resolve": "^1.19.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" - } - }, - "node_modules/@rollup/plugin-replace": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", - "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", - "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "magic-string": "^0.25.7" - }, - "peerDependencies": { - "rollup": "^1.20.0 || ^2.0.0" - } - }, - "node_modules/@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", - "dependencies": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" - } - }, - "node_modules/@sinonjs/commons": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", - "dev": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/commons/node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", - "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^1.7.0" - } - }, - "node_modules/@surma/rollup-plugin-off-main-thread": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", - "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", - "dependencies": { - "ejs": "^3.1.6", - "json5": "^2.2.0", - "magic-string": "^0.25.0", - "string.prototype.matchall": "^4.0.6" - } - }, - "node_modules/@surma/rollup-plugin-off-main-thread/node_modules/json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@types/babel__core": { - "version": "7.1.18", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.18.tgz", - "integrity": "sha512-S7unDjm/C7z2A2R9NzfKCK1I+BAALDtxEmsJBwlB3EzNfb929ykjL++1CK9LO++EIp2fQrC8O+BwjKvz6UeDyQ==", - "devOptional": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", - "devOptional": true, - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "devOptional": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", - "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", - "devOptional": true, - "dependencies": { - "@babel/types": "^7.3.0" - } - }, - "node_modules/@types/cheerio": { - "version": "0.22.30", - "resolved": "https://registry.npmjs.org/@types/cheerio/-/cheerio-0.22.30.tgz", - "integrity": "sha512-t7ZVArWZlq3dFa9Yt33qFBQIK4CQd1Q3UJp0V+UhP6vgLWLM6Qug7vZuRSGXg45zXeB1Fm5X2vmBkEX58LV2Tw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/enzyme": { - "version": "3.10.11", - "resolved": "https://registry.npmjs.org/@types/enzyme/-/enzyme-3.10.11.tgz", - "integrity": "sha512-LEtC7zXsQlbGXWGcnnmOI7rTyP+i1QzQv4Va91RKXDEukLDaNyxu0rXlfMiGEhJwfgTPCTb0R+Pnlj//oM9e/w==", - "dev": true, - "dependencies": { - "@types/cheerio": "*", - "@types/react": "*" - } - }, - "node_modules/@types/eslint": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.2.1.tgz", - "integrity": "sha512-UP9rzNn/XyGwb5RQ2fok+DzcIRIYwc16qTXse5+Smsy8MOIccCChT15KAwnsgQx4PzJkaMq4myFyZ4CL5TjhIQ==", - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.2.tgz", - "integrity": "sha512-TzgYCWoPiTeRg6RQYgtuW7iODtVoKu3RVL72k3WohqhjfaOLK5Mg2T4Tg1o2bSfu0vPkoI48wdQFv5b/Xe04wQ==", - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==" - }, - "node_modules/@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", - "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", - "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/hoist-non-react-statics": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", - "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", - "dependencies": { - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/jest": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.4.0.tgz", - "integrity": "sha512-gHl8XuC1RZ8H2j5sHv/JqsaxXkDDM9iDOgu0Wp8sjs4u/snb2PVehyWXJPr+ORA0RPpgw231mnutWI1+0hgjIQ==", - "dev": true, - "dependencies": { - "jest-diff": "^27.0.0", - "pretty-format": "^27.0.0" - } - }, - "node_modules/@types/js-cookie": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/@types/js-cookie/-/js-cookie-2.2.7.tgz", - "integrity": "sha512-aLkWa0C0vO5b4Sr798E26QgOkss68Un0bLjs7u9qxzPT5CG+8DuNTffWES58YzJs3hrVAOs1wonycqEBqNJubA==" - }, - "node_modules/@types/json-schema": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", - "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==" - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", - "dev": true - }, - "node_modules/@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==" - }, - "node_modules/@types/node": { - "version": "17.0.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.6.tgz", - "integrity": "sha512-+XBAjfZmmivILUzO0HwBJoYkAyyySSLg5KCGBDFLomJo0sV6szvVLAf4ANZZ0pfWzgEds5KmGLG9D5hfEqOhaA==" - }, - "node_modules/@types/prettier": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.2.tgz", - "integrity": "sha512-ekoj4qOQYp7CvjX8ZDBgN86w3MqQhLE1hczEJbEIjgFEumDy+na/4AJAbLXfgEWFNB2pKadM5rPFtuSGMWK7xA==", - "dev": true - }, - "node_modules/@types/prop-types": { - "version": "15.7.4", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.4.tgz", - "integrity": "sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==" - }, - "node_modules/@types/react": { - "version": "17.0.38", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.38.tgz", - "integrity": "sha512-SI92X1IA+FMnP3qM5m4QReluXzhcmovhZnLNm3pyeQlooi02qI7sLiepEYqT678uNiyc25XfCqxREFpy3W7YhQ==", - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-dom": { - "version": "17.0.11", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.11.tgz", - "integrity": "sha512-f96K3k+24RaLGVu/Y2Ng3e1EbZ8/cVJvypZWd7cy0ofCBaf2lcM46xNhycMZ2xGwbBjRql7hOlZ+e2WlJ5MH3Q==", - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/react-helmet": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/@types/react-helmet/-/react-helmet-6.1.5.tgz", - "integrity": "sha512-/ICuy7OHZxR0YCAZLNg9r7I9aijWUWvxaPR6uTuyxe8tAj5RL4Sw1+R6NhXUtOsarkGYPmaHdBDvuXh2DIN/uA==", - "dev": true, - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/resolve": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", - "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" - }, - "node_modules/@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true - }, - "node_modules/@types/styled-components": { - "version": "5.1.19", - "resolved": "https://registry.npmjs.org/@types/styled-components/-/styled-components-5.1.19.tgz", - "integrity": "sha512-hNj14Oamk7Jhb/fMMQG7TUkd3e8uMMgxsCTH+ueJNGdFo/PuhlGDQTPChqyilpZP0WttgBHkc2YyT5UG+yc6Yw==", - "dependencies": { - "@types/hoist-non-react-statics": "*", - "@types/react": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/trusted-types": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.2.tgz", - "integrity": "sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==" - }, - "node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "20.2.1", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", - "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", - "dev": true - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.8.1.tgz", - "integrity": "sha512-wTZ5oEKrKj/8/366qTM366zqhIKAp6NCMweoRONtfuC07OAU9nVI2GZZdqQ1qD30WAAtcPdkH+npDwtRFdp4Rw==", - "dev": true, - "dependencies": { - "@typescript-eslint/experimental-utils": "5.8.1", - "@typescript-eslint/scope-manager": "5.8.1", - "debug": "^4.3.2", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", - "regexpp": "^3.2.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "5.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.8.1.tgz", - "integrity": "sha512-fbodVnjIDU4JpeXWRDsG5IfIjYBxEvs8EBO8W1+YVdtrc2B9ppfof5sZhVEDOtgTfFHnYQJDI8+qdqLYO4ceww==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.8.1", - "@typescript-eslint/types": "5.8.1", - "@typescript-eslint/typescript-estree": "5.8.1", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "5.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.8.1.tgz", - "integrity": "sha512-K1giKHAjHuyB421SoXMXFHHVI4NdNY603uKw92++D3qyxSeYvC10CBJ/GE5Thpo4WTUvu1mmJI2/FFkz38F2Gw==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "5.8.1", - "@typescript-eslint/types": "5.8.1", - "@typescript-eslint/typescript-estree": "5.8.1", - "debug": "^4.3.2" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.8.1.tgz", - "integrity": "sha512-DGxJkNyYruFH3NIZc3PwrzwOQAg7vvgsHsHCILOLvUpupgkwDZdNq/cXU3BjF4LNrCsVg0qxEyWasys5AiJ85Q==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.8.1", - "@typescript-eslint/visitor-keys": "5.8.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "5.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.8.1.tgz", - "integrity": "sha512-L/FlWCCgnjKOLefdok90/pqInkomLnAcF9UAzNr+DSqMC3IffzumHTQTrINXhP1gVp9zlHiYYjvozVZDPleLcA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.8.1.tgz", - "integrity": "sha512-26lQ8l8tTbG7ri7xEcCFT9ijU5Fk+sx/KRRyyzCv7MQ+rZZlqiDPtMKWLC8P7o+dtCnby4c+OlxuX1tp8WfafQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.8.1", - "@typescript-eslint/visitor-keys": "5.8.1", - "debug": "^4.3.2", - "globby": "^11.0.4", - "is-glob": "^4.0.3", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.8.1.tgz", - "integrity": "sha512-SWgiWIwocK6NralrJarPZlWdr0hZnj5GXHIgfdm8hNkyKvpeQuFyLP6YjSIe9kf3YBIfU6OHSZLYkQ+smZwtNg==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.8.1", - "eslint-visitor-keys": "^3.0.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==" - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==" - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@wojtekmaj/enzyme-adapter-react-17": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/@wojtekmaj/enzyme-adapter-react-17/-/enzyme-adapter-react-17-0.6.6.tgz", - "integrity": "sha512-gSfhg8CiL0Vwc2UgUblGVZIy7M0KyXaZsd8+QwzV8TSVRLkGyzdLtYEcs9wRWyQTsdmOd+oRGqbVgUX7AVJxug==", - "dev": true, - "dependencies": { - "@wojtekmaj/enzyme-adapter-utils": "^0.1.2", - "enzyme-shallow-equal": "^1.0.0", - "has": "^1.0.0", - "prop-types": "^15.7.0", - "react-is": "^17.0.0", - "react-test-renderer": "^17.0.0" - }, - "peerDependencies": { - "enzyme": "^3.0.0", - "react": "^17.0.0-0", - "react-dom": "^17.0.0-0" - } - }, - "node_modules/@wojtekmaj/enzyme-adapter-react-17/node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true - }, - "node_modules/@wojtekmaj/enzyme-adapter-utils": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@wojtekmaj/enzyme-adapter-utils/-/enzyme-adapter-utils-0.1.2.tgz", - "integrity": "sha512-MM/DqDqvxNVlWLqSVQiUbRN9MuDLJfefmPbJ8ZKdmdf5ID8G+i42XhFpoQh5bAZUCdwzRae3+WSZl2lXcFOrhw==", - "dev": true, - "dependencies": { - "function.prototype.name": "^1.1.0", - "has": "^1.0.0", - "object.fromentries": "^2.0.0", - "prop-types": "^15.7.0" - }, - "peerDependencies": { - "react": "^17.0.0-0" - } - }, - "node_modules/@xobotyi/scrollbar-width": { - "version": "1.9.5", - "resolved": "https://registry.npmjs.org/@xobotyi/scrollbar-width/-/scrollbar-width-1.9.5.tgz", - "integrity": "sha512-N8tkAACJx2ww8vFMneJmaAgmjAG1tnVBZJRLRcx061tmsLRZHSEZSLuGWnwPtunsSLvSqXQ2wfp7Mgqg1I+2dQ==" - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" - }, - "node_modules/abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", - "dev": true - }, - "node_modules/acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dev": true, - "dependencies": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - } - }, - "node_modules/acorn-globals/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "peerDependencies": { - "acorn": "^8" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/airbnb-prop-types": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/airbnb-prop-types/-/airbnb-prop-types-2.16.0.tgz", - "integrity": "sha512-7WHOFolP/6cS96PhKNrslCLMYAI8yB1Pp6u6XmxozQOiZbsI5ycglZr5cHhBFfuRcQQjzCMith5ZPZdYiJCxUg==", - "dev": true, - "dependencies": { - "array.prototype.find": "^2.1.1", - "function.prototype.name": "^1.1.2", - "is-regex": "^1.1.0", - "object-is": "^1.1.2", - "object.assign": "^4.1.0", - "object.entries": "^1.1.2", - "prop-types": "^15.7.2", - "prop-types-exact": "^1.2.0", - "react-is": "^16.13.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - }, - "peerDependencies": { - "react": "^0.14 || ^15.0.0 || ^16.0.0-alpha" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/anser": { - "version": "1.4.9", - "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.9.tgz", - "integrity": "sha512-AI+BjTeGt2+WFk4eWcqbQ7snZpDBt8SaLlj0RT2h5xfdWaiy51OjYvqwMrNzJLGy8iOAL6nKDITWO+rd4MkYEA==" - }, - "node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/aria-query": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.10.2", - "@babel/runtime-corejs3": "^7.10.2" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/array-includes": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", - "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array.prototype.filter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array.prototype.filter/-/array.prototype.filter-1.0.1.tgz", - "integrity": "sha512-Dk3Ty7N42Odk7PjU/Ci3zT4pLj20YvuVnneG/58ICM6bt4Ij5kZaJTVQ9TSaWaIECX2sFyz4KItkVZqHNnciqw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.find": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.1.2.tgz", - "integrity": "sha512-00S1O4ewO95OmmJW7EesWfQlrCrLEL8kZ40w3+GkLX2yTt0m2ggcePPa2uHPJ9KUmJvwRq+lCV9bD8Yim23x/Q==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", - "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.5.tgz", - "integrity": "sha512-08u6rVyi1Lj7oqWbS9nUxliETrtIROT4XGTA4D/LWGten6E3ocm7cy9SIrmNHOL5XVbVuckUp3X6Xyg8/zpvHA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "dependencies": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/asn1.js/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/assert": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", - "integrity": "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==", - "dependencies": { - "es6-object-assign": "^1.1.0", - "is-nan": "^1.2.1", - "object-is": "^1.0.1", - "util": "^0.12.0" - } - }, - "node_modules/ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=", - "dev": true - }, - "node_modules/async": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", - "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/axe-core": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.3.5.tgz", - "integrity": "sha512-WKTW1+xAzhMS5dJsxWkliixlO/PqC4VhmO9T4juNYcaTg9jzWiJsou6m5pxWYGfigWbwzJWeFY6z47a+4neRXA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/axios": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", - "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", - "dependencies": { - "follow-redirects": "^1.14.9", - "form-data": "^4.0.0" - } - }, - "node_modules/axios/node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/axobject-query": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", - "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", - "dev": true - }, - "node_modules/babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "dependencies": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - } - }, - "node_modules/babel-core": { - "version": "6.26.3", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", - "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", - "dev": true, - "dependencies": { - "babel-code-frame": "^6.26.0", - "babel-generator": "^6.26.0", - "babel-helpers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-register": "^6.26.0", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "convert-source-map": "^1.5.1", - "debug": "^2.6.9", - "json5": "^0.5.1", - "lodash": "^4.17.4", - "minimatch": "^3.0.4", - "path-is-absolute": "^1.0.1", - "private": "^0.1.8", - "slash": "^1.0.0", - "source-map": "^0.5.7" - } - }, - "node_modules/babel-core/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/babel-core/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/babel-eslint": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", - "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", - "deprecated": "babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.0", - "@babel/traverse": "^7.7.0", - "@babel/types": "^7.7.0", - "eslint-visitor-keys": "^1.0.0", - "resolve": "^1.12.0" - }, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "eslint": ">= 4.12.1" - } - }, - "node_modules/babel-eslint/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/babel-generator": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", - "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", - "dev": true, - "dependencies": { - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "detect-indent": "^4.0.0", - "jsesc": "^1.3.0", - "lodash": "^4.17.4", - "source-map": "^0.5.7", - "trim-right": "^1.0.1" - } - }, - "node_modules/babel-generator/node_modules/jsesc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", - "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/babel-helpers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", - "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", - "dev": true, - "dependencies": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "node_modules/babel-jest": { - "version": "27.4.5", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.4.5.tgz", - "integrity": "sha512-3uuUTjXbgtODmSv/DXO9nZfD52IyC2OYTFaXGRzL0kpykzroaquCrD5+lZNafTvZlnNqZHt5pb0M08qVBZnsnA==", - "dev": true, - "dependencies": { - "@jest/transform": "^27.4.5", - "@jest/types": "^27.4.2", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^27.4.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "slash": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" - } - }, - "node_modules/babel-jest/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/babel-jest/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/babel-jest/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/babel-jest/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/babel-jest/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-jest/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-loader": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.3.tgz", - "integrity": "sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw==", - "dependencies": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^1.4.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "engines": { - "node": ">= 8.9" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "webpack": ">=2" - } - }, - "node_modules/babel-messages": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", - "dev": true, - "dependencies": { - "babel-runtime": "^6.22.0" - } - }, - "node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dependencies": { - "object.assign": "^4.1.0" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.4.0.tgz", - "integrity": "sha512-Jcu7qS4OX5kTWBc45Hz7BMmgXuJqRnhatqpUhnzGC3OBYpOmf2tv6jFNwZpwM7wU7MUuv2r9IPS/ZlYOuburVw==", - "dev": true, - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.0.tgz", - "integrity": "sha512-wMDoBJ6uG4u4PNFh72Ty6t3EgfA91puCuAwKIazbQlci+ENb/UU9A3xG5lutjUIiXCIn1CY5L15r9LimiJyrSA==", - "dependencies": { - "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.3.0", - "semver": "^6.1.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.4.0.tgz", - "integrity": "sha512-YxFreYwUfglYKdLUGvIF2nJEsGwj+RhWSX/ije3D2vQPOXuyMLMtg/cCGMDpOA7Nd+MwlNdnGODbd2EwUZPlsw==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.0", - "core-js-compat": "^3.18.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.0.tgz", - "integrity": "sha512-dhAPTDLGoMW5/84wkgwiLRwMnio2i1fUe53EuvtKMv0pn2p3S8OCoV1xAzfJPl0KOX7IB89s2ib85vbYiea3jg==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-styled-components": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-2.0.2.tgz", - "integrity": "sha512-7eG5NE8rChnNTDxa6LQfynwgHTVOYYaHJbUYSlOhk8QBXIQiMBKq4gyfHBBKPrxUcVBXVJL61ihduCpCQbuNbw==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.0", - "@babel/helper-module-imports": "^7.16.0", - "babel-plugin-syntax-jsx": "^6.18.0", - "lodash": "^4.17.11" - }, - "peerDependencies": { - "styled-components": ">= 2" - } - }, - "node_modules/babel-plugin-syntax-jsx": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", - "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=" - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-jest": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.4.0.tgz", - "integrity": "sha512-NK4jGYpnBvNxcGo7/ZpZJr51jCGT+3bwwpVIDY2oNfTxJJldRtB4VAcYdgp1loDE50ODuTu+yBjpMAswv5tlpg==", - "dev": true, - "dependencies": { - "babel-plugin-jest-hoist": "^27.4.0", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-register": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", - "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", - "dev": true, - "dependencies": { - "babel-core": "^6.26.0", - "babel-runtime": "^6.26.0", - "core-js": "^2.5.0", - "home-or-tmp": "^2.0.0", - "lodash": "^4.17.4", - "mkdirp": "^0.5.1", - "source-map-support": "^0.4.15" - } - }, - "node_modules/babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, - "dependencies": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - } - }, - "node_modules/babel-template": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", - "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", - "dev": true, - "dependencies": { - "babel-runtime": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "lodash": "^4.17.4" - } - }, - "node_modules/babel-traverse": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", - "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", - "dev": true, - "dependencies": { - "babel-code-frame": "^6.26.0", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "debug": "^2.6.8", - "globals": "^9.18.0", - "invariant": "^2.2.2", - "lodash": "^4.17.4" - } - }, - "node_modules/babel-traverse/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/babel-traverse/node_modules/globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babel-traverse/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "dev": true, - "dependencies": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" - } - }, - "node_modules/babel-types/node_modules/to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true, - "bin": { - "babylon": "bin/babylon.js" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/base64-arraybuffer": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.2.0.tgz", - "integrity": "sha512-7emyCsu1/xiBXgQZrscw/8KPRT44I4Yq9Pe6EGs3aPRTsWuggML1/1DTuZUuIaJPIm1FTDUVXl4x/yW8s0kQDQ==", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/bn.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" - }, - "node_modules/browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, - "node_modules/browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dependencies": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dependencies": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "node_modules/browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dependencies": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/browserify-rsa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", - "dependencies": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - } - }, - "node_modules/browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", - "dependencies": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "node_modules/browserify-sign/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dependencies": { - "pako": "~1.0.5" - } - }, - "node_modules/browserslist": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", - "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", - "dependencies": { - "caniuse-lite": "^1.0.30001286", - "electron-to-chromium": "^1.4.17", - "escalade": "^3.1.1", - "node-releases": "^2.0.1", - "picocolors": "^1.0.0" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", - "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", - "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "node_modules/buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" - }, - "node_modules/builtin-modules": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", - "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" - }, - "node_modules/bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelize": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz", - "integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs=" - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001294", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001294.tgz", - "integrity": "sha512-LiMlrs1nSKZ8qkNhpUf5KD0Al1KCBE3zaT7OLOwEkagXMEDij98SiOovn9wxVGQpklk9vVC/pUSqgYmkmKOS8g==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/cheerio": { - "version": "1.0.0-rc.10", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz", - "integrity": "sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==", - "dev": true, - "dependencies": { - "cheerio-select": "^1.5.0", - "dom-serializer": "^1.3.2", - "domhandler": "^4.2.0", - "htmlparser2": "^6.1.0", - "parse5": "^6.0.1", - "parse5-htmlparser2-tree-adapter": "^6.0.1", - "tslib": "^2.2.0" - }, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/cheeriojs/cheerio?sponsor=1" - } - }, - "node_modules/cheerio-select": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.5.0.tgz", - "integrity": "sha512-qocaHPv5ypefh6YNxvnbABM07KMxExbtbfuJoIie3iZXX1ERwYmJcIiRrr9H05ucQP1k28dav8rpdDgjQd8drg==", - "dev": true, - "dependencies": { - "css-select": "^4.1.3", - "css-what": "^5.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0", - "domutils": "^2.7.0" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/chokidar": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", - "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", - "dependencies": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.1" - } - }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "engines": { - "node": ">=6.0" - } - }, - "node_modules/ci-info": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", - "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", - "dev": true - }, - "node_modules/cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/cjs-module-lexer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", - "dev": true - }, - "node_modules/classnames": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz", - "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==" - }, - "node_modules/clean-webpack-plugin": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-4.0.0.tgz", - "integrity": "sha512-WuWE1nyTNAyW5T7oNyys2EN0cfP2fdRxhxnIQWiAp0bMabPdHhoGxM8A6YL2GhqwgrPnnaemVE7nv5XJ2Fhh2w==", - "dependencies": { - "del": "^4.1.1" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "webpack": ">=4.0.0 <6.0.0" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true, - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "node_modules/colorette": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", - "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "node_modules/common-tags": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", - "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "node_modules/confusing-browser-globals": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", - "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", - "dev": true - }, - "node_modules/constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" - }, - "node_modules/convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/copy-to-clipboard": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz", - "integrity": "sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw==", - "dependencies": { - "toggle-selection": "^1.0.6" - } - }, - "node_modules/core-js": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", - "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", - "deprecated": "core-js@<3.4 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js.", - "dev": true, - "hasInstallScript": true - }, - "node_modules/core-js-compat": { - "version": "3.20.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.20.1.tgz", - "integrity": "sha512-AVhKZNpqMV3Jz8hU0YEXXE06qoxtQGsAqU0u1neUngz5IusDJRX/ZJ6t3i7mS7QxNyEONbCo14GprkBrxPlTZA==", - "dependencies": { - "browserslist": "^4.19.1", - "semver": "7.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat/node_modules/semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/core-js-pure": { - "version": "3.20.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.20.1.tgz", - "integrity": "sha512-yeNNr3L9cEBwNy6vhhIJ0nko7fE7uFO6PgawcacGt2VWep4WqQx0RiqlkgSP7kqUMC1IKdfO9qPeWXcUheHLVQ==", - "dev": true, - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "dependencies": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - } - }, - "node_modules/create-ecdh/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dependencies": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - }, - "engines": { - "node": "*" - } - }, - "node_modules/crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/css-color-keywords": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", - "integrity": "sha1-/qJhbcZ2spYmhrOvjb2+GAskTgU=", - "engines": { - "node": ">=4" - } - }, - "node_modules/css-in-js-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/css-in-js-utils/-/css-in-js-utils-2.0.1.tgz", - "integrity": "sha512-PJF0SpJT+WdbVVt0AOYp9C8GnuruRlL/UFW7932nLWmFLQTaWEzTBQEx7/hn4BuV+WON75iAViSUJLiU3PKbpA==", - "dependencies": { - "hyphenate-style-name": "^1.0.2", - "isobject": "^3.0.1" - } - }, - "node_modules/css-select": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.1.tgz", - "integrity": "sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^5.1.0", - "domhandler": "^4.3.0", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-to-react-native": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.0.0.tgz", - "integrity": "sha512-Ro1yETZA813eoyUp2GDBhG2j+YggidUmzO1/v9eYBKR2EHVEniE2MI/NqpTQ954BMpTPZFsGNPm46qFB9dpaPQ==", - "dependencies": { - "camelize": "^1.0.0", - "css-color-keywords": "^1.0.0", - "postcss-value-parser": "^4.0.2" - } - }, - "node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/css-tree/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/css-what": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", - "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", - "dev": true, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css.escape": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", - "integrity": "sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s=" - }, - "node_modules/cssnano-preset-simple": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssnano-preset-simple/-/cssnano-preset-simple-3.0.0.tgz", - "integrity": "sha512-vxQPeoMRqUT3c/9f0vWeVa2nKQIHFpogtoBvFdW4GQ3IvEJ6uauCP6p3Y5zQDLFcI7/+40FTgX12o7XUL0Ko+w==", - "dependencies": { - "caniuse-lite": "^1.0.30001202" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-simple": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssnano-simple/-/cssnano-simple-3.0.0.tgz", - "integrity": "sha512-oU3ueli5Dtwgh0DyeohcIEE00QVfbPR3HzyXdAl89SfnQG3y0/qcpfLVW+jPIh3/rgMZGwuW96rejZGaYE9eUg==", - "dependencies": { - "cssnano-preset-simple": "^3.0.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - } - } - }, - "node_modules/cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true - }, - "node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dev": true, - "dependencies": { - "cssom": "~0.3.6" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - }, - "node_modules/csstype": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.10.tgz", - "integrity": "sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA==" - }, - "node_modules/damerau-levenshtein": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.7.tgz", - "integrity": "sha512-VvdQIPGdWP0SqFXghj79Wf/5LArmreyMsGLa6FG6iC4t3j7j5s71TrwWmT/4akbDQIqjfACkLZmjXhA7g2oUZw==", - "dev": true - }, - "node_modules/data-uri-to-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz", - "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "dev": true, - "dependencies": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decimal.js": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", - "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", - "dev": true - }, - "node_modules/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", - "dev": true - }, - "node_modules/deep-eql": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-2.0.2.tgz", - "integrity": "sha1-sbrAblbwp2d3aG1Qyf63XC7XZ5o=", - "dev": true, - "dependencies": { - "type-detect": "^3.0.0" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dependencies": { - "object-keys": "^1.0.12" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/del": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", - "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", - "dependencies": { - "@types/glob": "^7.1.1", - "globby": "^6.1.0", - "is-path-cwd": "^2.0.0", - "is-path-in-cwd": "^2.0.0", - "p-map": "^2.0.0", - "pify": "^4.0.1", - "rimraf": "^2.6.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/del/node_modules/array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dependencies": { - "array-uniq": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/del/node_modules/globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "dependencies": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/del/node_modules/globby/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/del/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "dependencies": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/detect-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", - "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", - "dev": true, - "dependencies": { - "repeating": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/diff-sequences": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.4.0.tgz", - "integrity": "sha512-YqiQzkrsmHMH5uuh8OdQFU9/ZpADnwzml8z0O5HvRNda+5UZsaX/xN+AAxfR2hWq1Y7HZnAzO9J5lJXOuDz2Ww==", - "dev": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dependencies": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "node_modules/diffie-hellman/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/discontinuous-range": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz", - "integrity": "sha1-44Mx8IRLukm5qctxx3FYWqsbxlo=", - "dev": true - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dom-serializer": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", - "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", - "dev": true, - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domain-browser": { - "version": "4.19.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-4.19.0.tgz", - "integrity": "sha512-fRA+BaAWOR/yr/t7T9E9GJztHPeFjj8U35ajyAjCDtAAnTn1Rc1f6W6VGPJrO1tkQv9zWu+JRof7z6oQtiYVFQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://bevry.me/fund" - } - }, - "node_modules/domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "dev": true, - "dependencies": { - "webidl-conversions": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/domexception/node_modules/webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/domhandler": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", - "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", - "dev": true, - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dev": true, - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/ejs": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.6.tgz", - "integrity": "sha512-9lt9Zse4hPucPkoP7FHDF0LQAlGyF9JVpnClFLFH3aSSbxmyoqINRpp/9wePWJTUl4KOQwRL72Iw3InHPDkoGw==", - "dependencies": { - "jake": "^10.6.1" - }, - "bin": { - "ejs": "bin/cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.4.31", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.31.tgz", - "integrity": "sha512-t3XVQtk+Frkv6aTD4RRk0OqosU+VLe1dQFW83MDer78ZD6a52frgXuYOIsLYTQiH2Lm+JB2OKYcn7zrX+YGAiQ==" - }, - "node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/emittery": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", - "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz", - "integrity": "sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA==", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "dependencies": { - "ansi-colors": "^4.1.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/enzyme": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/enzyme/-/enzyme-3.11.0.tgz", - "integrity": "sha512-Dw8/Gs4vRjxY6/6i9wU0V+utmQO9kvh9XLnz3LIudviOnVYDEe2ec+0k+NQoMamn1VrjKgCUOWj5jG/5M5M0Qw==", - "dev": true, - "dependencies": { - "array.prototype.flat": "^1.2.3", - "cheerio": "^1.0.0-rc.3", - "enzyme-shallow-equal": "^1.0.1", - "function.prototype.name": "^1.1.2", - "has": "^1.0.3", - "html-element-map": "^1.2.0", - "is-boolean-object": "^1.0.1", - "is-callable": "^1.1.5", - "is-number-object": "^1.0.4", - "is-regex": "^1.0.5", - "is-string": "^1.0.5", - "is-subset": "^0.1.1", - "lodash.escape": "^4.0.1", - "lodash.isequal": "^4.5.0", - "object-inspect": "^1.7.0", - "object-is": "^1.0.2", - "object.assign": "^4.1.0", - "object.entries": "^1.1.1", - "object.values": "^1.1.1", - "raf": "^3.4.1", - "rst-selector-parser": "^2.2.3", - "string.prototype.trim": "^1.2.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/enzyme-adapter-react-16": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.15.6.tgz", - "integrity": "sha512-yFlVJCXh8T+mcQo8M6my9sPgeGzj85HSHi6Apgf1Cvq/7EL/J9+1JoJmJsRxZgyTvPMAqOEpRSu/Ii/ZpyOk0g==", - "dev": true, - "dependencies": { - "enzyme-adapter-utils": "^1.14.0", - "enzyme-shallow-equal": "^1.0.4", - "has": "^1.0.3", - "object.assign": "^4.1.2", - "object.values": "^1.1.2", - "prop-types": "^15.7.2", - "react-is": "^16.13.1", - "react-test-renderer": "^16.0.0-0", - "semver": "^5.7.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - }, - "peerDependencies": { - "enzyme": "^3.0.0", - "react": "^16.0.0-0", - "react-dom": "^16.0.0-0" - } - }, - "node_modules/enzyme-adapter-react-16/node_modules/react-test-renderer": { - "version": "16.14.0", - "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.14.0.tgz", - "integrity": "sha512-L8yPjqPE5CZO6rKsKXRO/rVPiaCOy0tQQJbC+UjPNlobl5mad59lvPjwFsQHTvL03caVDIVr9x9/OSgDe6I5Eg==", - "dev": true, - "dependencies": { - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "react-is": "^16.8.6", - "scheduler": "^0.19.1" - }, - "peerDependencies": { - "react": "^16.14.0" - } - }, - "node_modules/enzyme-adapter-react-16/node_modules/scheduler": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", - "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", - "dev": true, - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "node_modules/enzyme-adapter-react-16/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/enzyme-adapter-utils": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/enzyme-adapter-utils/-/enzyme-adapter-utils-1.14.0.tgz", - "integrity": "sha512-F/z/7SeLt+reKFcb7597IThpDp0bmzcH1E9Oabqv+o01cID2/YInlqHbFl7HzWBl4h3OdZYedtwNDOmSKkk0bg==", - "dev": true, - "dependencies": { - "airbnb-prop-types": "^2.16.0", - "function.prototype.name": "^1.1.3", - "has": "^1.0.3", - "object.assign": "^4.1.2", - "object.fromentries": "^2.0.3", - "prop-types": "^15.7.2", - "semver": "^5.7.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - }, - "peerDependencies": { - "react": "0.13.x || 0.14.x || ^15.0.0-0 || ^16.0.0-0" - } - }, - "node_modules/enzyme-adapter-utils/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/enzyme-shallow-equal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.4.tgz", - "integrity": "sha512-MttIwB8kKxypwHvRynuC3ahyNc+cFbR8mjVIltnmzQ0uKGqmsfO4bfBuLxb0beLNPhjblUEYvEbsg+VSygvF1Q==", - "dev": true, - "dependencies": { - "has": "^1.0.3", - "object-is": "^1.1.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/error-stack-parser": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.6.tgz", - "integrity": "sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==", - "dependencies": { - "stackframe": "^1.1.1" - } - }, - "node_modules/es-abstract": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", - "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.1", - "is-string": "^1.0.7", - "is-weakref": "^1.0.1", - "object-inspect": "^1.11.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", - "dev": true - }, - "node_modules/es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es6-object-assign": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", - "integrity": "sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw=" - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", - "dev": true, - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/escodegen/node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/escodegen/node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.6.0.tgz", - "integrity": "sha512-UvxdOJ7mXFlw7iuHZA4jmzPaUqIw54mZrv+XPYKNbKdLR0et4rf60lIZUU9kiNtnzzMzGWxMV+tQ7uG7JG8DPw==", - "dev": true, - "dependencies": { - "@eslint/eslintrc": "^1.0.5", - "@humanwhocodes/config-array": "^0.9.2", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.0", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.1.0", - "espree": "^9.3.0", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.2.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-airbnb": { - "version": "19.0.4", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-19.0.4.tgz", - "integrity": "sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew==", - "dev": true, - "dependencies": { - "eslint-config-airbnb-base": "^15.0.0", - "object.assign": "^4.1.2", - "object.entries": "^1.1.5" - }, - "engines": { - "node": "^10.12.0 || ^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^7.32.0 || ^8.2.0", - "eslint-plugin-import": "^2.25.3", - "eslint-plugin-jsx-a11y": "^6.5.1", - "eslint-plugin-react": "^7.28.0", - "eslint-plugin-react-hooks": "^4.3.0" - } - }, - "node_modules/eslint-config-airbnb-base": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", - "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", - "dev": true, - "dependencies": { - "confusing-browser-globals": "^1.0.10", - "object.assign": "^4.1.2", - "object.entries": "^1.1.5", - "semver": "^6.3.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "peerDependencies": { - "eslint": "^7.32.0 || ^8.2.0", - "eslint-plugin-import": "^2.25.2" - } - }, - "node_modules/eslint-config-airbnb-base/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-config-prettier": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", - "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", - "dev": true, - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", - "dev": true, - "dependencies": { - "debug": "^3.2.7", - "resolve": "^1.20.0" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-module-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.1.tgz", - "integrity": "sha512-fjoetBXQZq2tSTWZ9yWVl2KuFrTZZH3V+9iD1V1RfpDgxzJR+mPd/KZmMiA8gbPqdBzpNiEHOuT7IYEWxrH0zQ==", - "dev": true, - "dependencies": { - "debug": "^3.2.7", - "find-up": "^2.1.0", - "pkg-dir": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-module-utils/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-plugin-babel": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-babel/-/eslint-plugin-babel-5.3.1.tgz", - "integrity": "sha512-VsQEr6NH3dj664+EyxJwO4FCYm/00JhYb3Sk3ft8o+fpKuIfQ9TaW6uVUfvwMXHcf/lsnRIoyFPsLMyiWCSL/g==", - "dev": true, - "dependencies": { - "eslint-rule-composer": "^0.3.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": ">=4.0.0" - } - }, - "node_modules/eslint-plugin-import": { - "version": "2.25.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.3.tgz", - "integrity": "sha512-RzAVbby+72IB3iOEL8clzPLzL3wpDrlwjsTBAQXgyp5SeTqqY+0bFubwuo+y/HLhNZcXV4XqTBO4LGsfyHIDXg==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.1", - "has": "^1.0.3", - "is-core-module": "^2.8.0", - "is-glob": "^4.0.3", - "minimatch": "^3.0.4", - "object.values": "^1.1.5", - "resolve": "^1.20.0", - "tsconfig-paths": "^3.11.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.5.1.tgz", - "integrity": "sha512-sVCFKX9fllURnXT2JwLN5Qgo24Ug5NF6dxhkmxsMEUZhXRcGg+X3e1JbJ84YePQKBl5E0ZjAH5Q4rkdcGY99+g==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.16.3", - "aria-query": "^4.2.2", - "array-includes": "^3.1.4", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.3.5", - "axobject-query": "^2.2.0", - "damerau-levenshtein": "^1.0.7", - "emoji-regex": "^9.2.2", - "has": "^1.0.3", - "jsx-ast-utils": "^3.2.1", - "language-tags": "^1.0.5", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=4.0" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, - "node_modules/eslint-plugin-react": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.28.0.tgz", - "integrity": "sha512-IOlFIRHzWfEQQKcAD4iyYDndHwTQiCMcJVJjxempf203jnNLUnW34AXLrV33+nEXoifJE2ZEGmcjKPL8957eSw==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.4", - "array.prototype.flatmap": "^1.2.5", - "doctrine": "^2.1.0", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.0.4", - "object.entries": "^1.1.5", - "object.fromentries": "^2.0.5", - "object.hasown": "^1.1.0", - "object.values": "^1.1.5", - "prop-types": "^15.7.2", - "resolve": "^2.0.0-next.3", - "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.6" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.3", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", - "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", - "dev": true, - "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-rule-composer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz", - "integrity": "sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==", - "dev": true, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-scope/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz", - "integrity": "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/eslint/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/eslint/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", - "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", - "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/eslint/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/eslint/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/espree": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.0.tgz", - "integrity": "sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==", - "dev": true, - "dependencies": { - "acorn": "^8.7.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^3.1.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==" - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expect": { - "version": "27.4.2", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.4.2.tgz", - "integrity": "sha512-BjAXIDC6ZOW+WBFNg96J22D27Nq5ohn+oGcuP2rtOtcjuxNoV9McpQ60PcQWhdFOSBIQdR72e+4HdnbZTFSTyg==", - "dev": true, - "dependencies": { - "@jest/types": "^27.4.2", - "ansi-styles": "^5.0.0", - "jest-get-type": "^27.4.0", - "jest-matcher-utils": "^27.4.2", - "jest-message-util": "^27.4.2", - "jest-regex-util": "^27.4.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/expect-enzyme": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/expect-enzyme/-/expect-enzyme-1.3.0.tgz", - "integrity": "sha512-bV+xqYOC4Hm4LfFJDLKcs8fIH5jb4UZJCUXP2t2bixHuOXPJPwVw4I67u6YvlZUDiLmCSi7rVo1x/fjLLfUDAw==", - "dev": true, - "dependencies": { - "deep-eql": "^2.0.2", - "react-display-name": "^0.2.0", - "stringify-object": "^3.2.0" - }, - "peerDependencies": { - "enzyme": "2.x.x - 3.x.x", - "expect": "1.x.x", - "react": "13.0.0 - 16.x.x", - "react-dom": "13.0.0 - 16.x.x" - } - }, - "node_modules/expect/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "node_modules/fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "node_modules/fast-shallow-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-shallow-equal/-/fast-shallow-equal-1.0.0.tgz", - "integrity": "sha512-HPtaa38cPgWvaCFmRNhlc6NG7pv6NUHqjPgVAkWGoB9mQMwYB27/K0CvOM5Czy+qpT3e8XJ6Q4aPAnzpNpzNaw==" - }, - "node_modules/fastest-stable-stringify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fastest-stable-stringify/-/fastest-stable-stringify-2.0.2.tgz", - "integrity": "sha512-bijHueCGd0LqqNK9b5oCMHc0MluJAx0cwqASgbWMvkO01lCYgIhacVRLcaDz3QnyYIRNJRDwMb41VuT6pHJ91Q==" - }, - "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", - "dev": true, - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/filelist": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.2.tgz", - "integrity": "sha512-z7O0IS8Plc39rTCq6i6iHxk43duYOn8uFJiWSewIq0Bww1RNybVHSCjahmcC87ZqAm4OTvFzlzeGu3XAzG1ctQ==", - "dependencies": { - "minimatch": "^3.0.4" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", - "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "node_modules/find-cache-dir/node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", - "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", - "dev": true - }, - "node_modules/follow-redirects": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", - "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" - }, - "node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fs-extra/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "node_modules/functions-have-names": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.2.tgz", - "integrity": "sha512-bLgc3asbWdwPbx2mNk2S49kmJCuQeu0nfmaOgbs8WIyzzkw3r4htszdIi9Q9EMezDPTYuJx2wvjZ/EwgAthpnA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-orientation": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-orientation/-/get-orientation-1.1.2.tgz", - "integrity": "sha512-/pViTfifW+gBbh/RnlFYHINvELT9Znt+SYyDKAUL6uV6By019AK/s+i9XP4jSwq7lwP38Fd8HVeTxym3+hkwmQ==", - "dependencies": { - "stream-parser": "^0.3.1" - } - }, - "node_modules/get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" - }, - "node_modules/harmony-reflect": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", - "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==", - "dev": true - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hash-base/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "bin": { - "he": "bin/he" - } - }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "dependencies": { - "react-is": "^16.7.0" - } - }, - "node_modules/home-or-tmp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", - "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", - "dev": true, - "dependencies": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/html-element-map": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/html-element-map/-/html-element-map-1.3.1.tgz", - "integrity": "sha512-6XMlxrAFX4UEEGxctfFnmrFaaZFNf9i5fNuV5wZ3WWQ4FVaNP1aX1LkX9j2mfEx1NpjeE/rL3nmgEn23GdFmrg==", - "dev": true, - "dependencies": { - "array.prototype.filter": "^1.0.0", - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", - "dev": true, - "dependencies": { - "whatwg-encoding": "^1.0.5" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "node_modules/htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "dev": true, - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "node_modules/http-errors": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", - "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" - }, - "node_modules/https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/hyphenate-style-name": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz", - "integrity": "sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==" - }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/idb": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/idb/-/idb-6.1.5.tgz", - "integrity": "sha512-IJtugpKkiVXQn5Y+LteyBCNk1N8xpGV3wWZk9EVtZWH8DYkjBn0bX1XnGP9RkyZF0sAcywa6unHqSWKe7q4LGw==" - }, - "node_modules/identity-obj-proxy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", - "integrity": "sha1-lNK9qWCERT7zb7xarsN+D3nx/BQ=", - "dev": true, - "dependencies": { - "harmony-reflect": "^1.4.6" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/image-size": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.0.tgz", - "integrity": "sha512-JLJ6OwBfO1KcA+TvJT+v8gbE6iWbj24LyDNFgFEN0lzegn6cC6a/p3NIDaepMsJjQjlUWqIC7wJv8lBFxPNjcw==", - "dependencies": { - "queue": "6.0.2" - }, - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/immutable": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.0.0.tgz", - "integrity": "sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==" - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/import-local": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.3.tgz", - "integrity": "sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA==", - "dev": true, - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/import-local/node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/inline-style-prefixer": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/inline-style-prefixer/-/inline-style-prefixer-6.0.1.tgz", - "integrity": "sha512-AsqazZ8KcRzJ9YPN1wMH2aNM7lkWQ8tSPrW5uDk1ziYwiAPWSZnUsC7lfZq+BDqLqz0B4Pho5wscWcJzVvRzDQ==", - "dependencies": { - "css-in-js-utils": "^2.0.0" - } - }, - "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", - "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-finite": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", - "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", - "dev": true, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=" - }, - "node_modules/is-nan": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", - "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", - "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-path-in-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", - "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", - "dependencies": { - "is-path-inside": "^2.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-path-inside": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", - "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", - "dependencies": { - "path-is-inside": "^1.0.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", - "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-subset": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz", - "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=", - "dev": true - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.8.tgz", - "integrity": "sha512-HqH41TNZq2fgtGT8WHVFVJhBVGuY3AnP3Q36K8JKXUxSxRgk/d+7NjmwG2vo2mYmXK8UYZKu0qH8bVP5gEisjA==", - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.18.5", - "foreach": "^2.0.5", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz", - "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==", - "dev": true, - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.3.tgz", - "integrity": "sha512-x9LtDVtfm/t1GFiLl3NffC7hz+I1ragvgX1P/Lg1NlIagifZDKUkuuaAxH/qpwj2IuEfD8G2Bs/UKp+sZ/pKkg==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jake": { - "version": "10.8.2", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.2.tgz", - "integrity": "sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A==", - "dependencies": { - "async": "0.9.x", - "chalk": "^2.4.2", - "filelist": "^1.0.1", - "minimatch": "^3.0.4" - }, - "bin": { - "jake": "bin/cli.js" - }, - "engines": { - "node": "*" - } - }, - "node_modules/jake/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jake/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jake/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "engines": { - "node": ">=4" - } - }, - "node_modules/jake/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jest": { - "version": "27.4.5", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.4.5.tgz", - "integrity": "sha512-uT5MiVN3Jppt314kidCk47MYIRilJjA/l2mxwiuzzxGUeJIvA8/pDaJOAX5KWvjAo7SCydcW0/4WEtgbLMiJkg==", - "dev": true, - "dependencies": { - "@jest/core": "^27.4.5", - "import-local": "^3.0.2", - "jest-cli": "^27.4.5" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-changed-files": { - "version": "27.4.2", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.4.2.tgz", - "integrity": "sha512-/9x8MjekuzUQoPjDHbBiXbNEBauhrPU2ct7m8TfCg69ywt1y/N+yYwGh3gCpnqUS3klYWDU/lSNgv+JhoD2k1A==", - "dev": true, - "dependencies": { - "@jest/types": "^27.4.2", - "execa": "^5.0.0", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-circus": { - "version": "27.4.5", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.4.5.tgz", - "integrity": "sha512-eTNWa9wsvBwPykhMMShheafbwyakcdHZaEYh5iRrQ0PFJxkDP/e3U/FvzGuKWu2WpwUA3C3hPlfpuzvOdTVqnw==", - "dev": true, - "dependencies": { - "@jest/environment": "^27.4.4", - "@jest/test-result": "^27.4.2", - "@jest/types": "^27.4.2", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "expect": "^27.4.2", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.4.2", - "jest-matcher-utils": "^27.4.2", - "jest-message-util": "^27.4.2", - "jest-runtime": "^27.4.5", - "jest-snapshot": "^27.4.5", - "jest-util": "^27.4.2", - "pretty-format": "^27.4.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.3", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-circus/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-circus/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-circus/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-circus/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-circus/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-circus/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-cli": { - "version": "27.4.5", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.4.5.tgz", - "integrity": "sha512-hrky3DSgE0u7sQxaCL7bdebEPHx5QzYmrGuUjaPLmPE8jx5adtvGuOlRspvMoVLTTDOHRnZDoRLYJuA+VCI7Hg==", - "dev": true, - "dependencies": { - "@jest/core": "^27.4.5", - "@jest/test-result": "^27.4.2", - "@jest/types": "^27.4.2", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "import-local": "^3.0.2", - "jest-config": "^27.4.5", - "jest-util": "^27.4.2", - "jest-validate": "^27.4.2", - "prompts": "^2.0.1", - "yargs": "^16.2.0" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-cli/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-cli/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-cli/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-cli/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-cli/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-config": { - "version": "27.4.5", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.4.5.tgz", - "integrity": "sha512-t+STVJtPt+fpqQ8GBw850NtSQbnDOw/UzdPfzDaHQ48/AylQlW7LHj3dH+ndxhC1UxJ0Q3qkq7IH+nM1skwTwA==", - "dev": true, - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^27.4.5", - "@jest/types": "^27.4.2", - "babel-jest": "^27.4.5", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.4", - "jest-circus": "^27.4.5", - "jest-environment-jsdom": "^27.4.4", - "jest-environment-node": "^27.4.4", - "jest-get-type": "^27.4.0", - "jest-jasmine2": "^27.4.5", - "jest-regex-util": "^27.4.0", - "jest-resolve": "^27.4.5", - "jest-runner": "^27.4.5", - "jest-util": "^27.4.2", - "jest-validate": "^27.4.2", - "micromatch": "^4.0.4", - "pretty-format": "^27.4.2", - "slash": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-config/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-config/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-config/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-config/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-config/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-config/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-diff": { - "version": "27.4.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.4.2.tgz", - "integrity": "sha512-ujc9ToyUZDh9KcqvQDkk/gkbf6zSaeEg9AiBxtttXW59H/AcqEYp1ciXAtJp+jXWva5nAf/ePtSsgWwE5mqp4Q==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^27.4.0", - "jest-get-type": "^27.4.0", - "pretty-format": "^27.4.2" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-diff/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-diff/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-diff/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-diff/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-diff/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-docblock": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.4.0.tgz", - "integrity": "sha512-7TBazUdCKGV7svZ+gh7C8esAnweJoG+SvcF6Cjqj4l17zA2q1cMwx2JObSioubk317H+cjcHgP+7fTs60paulg==", - "dev": true, - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-each": { - "version": "27.4.2", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.4.2.tgz", - "integrity": "sha512-53V2MNyW28CTruB3lXaHNk6PkiIFuzdOC9gR3C6j8YE/ACfrPnz+slB0s17AgU1TtxNzLuHyvNlLJ+8QYw9nBg==", - "dev": true, - "dependencies": { - "@jest/types": "^27.4.2", - "chalk": "^4.0.0", - "jest-get-type": "^27.4.0", - "jest-util": "^27.4.2", - "pretty-format": "^27.4.2" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-each/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-each/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-each/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-each/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-each/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-environment-jsdom": { - "version": "27.4.4", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.4.4.tgz", - "integrity": "sha512-cYR3ndNfHBqQgFvS1RL7dNqSvD//K56j/q1s2ygNHcfTCAp12zfIromO1w3COmXrxS8hWAh7+CmZmGCIoqGcGA==", - "dev": true, - "dependencies": { - "@jest/environment": "^27.4.4", - "@jest/fake-timers": "^27.4.2", - "@jest/types": "^27.4.2", - "@types/node": "*", - "jest-mock": "^27.4.2", - "jest-util": "^27.4.2", - "jsdom": "^16.6.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-environment-node": { - "version": "27.4.4", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.4.4.tgz", - "integrity": "sha512-D+v3lbJ2GjQTQR23TK0kY3vFVmSeea05giInI41HHOaJnAwOnmUHTZgUaZL+VxUB43pIzoa7PMwWtCVlIUoVoA==", - "dev": true, - "dependencies": { - "@jest/environment": "^27.4.4", - "@jest/fake-timers": "^27.4.2", - "@jest/types": "^27.4.2", - "@types/node": "*", - "jest-mock": "^27.4.2", - "jest-util": "^27.4.2" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-get-type": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.4.0.tgz", - "integrity": "sha512-tk9o+ld5TWq41DkK14L4wox4s2D9MtTpKaAVzXfr5CUKm5ZK2ExcaFE0qls2W71zE/6R2TxxrK9w2r6svAFDBQ==", - "dev": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-haste-map": { - "version": "27.4.5", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.4.5.tgz", - "integrity": "sha512-oJm1b5qhhPs78K24EDGifWS0dELYxnoBiDhatT/FThgB9yxqUm5F6li3Pv+Q+apMBmmPNzOBnZ7ZxWMB1Leq1Q==", - "dev": true, - "dependencies": { - "@jest/types": "^27.4.2", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-regex-util": "^27.4.0", - "jest-serializer": "^27.4.0", - "jest-util": "^27.4.2", - "jest-worker": "^27.4.5", - "micromatch": "^4.0.4", - "walker": "^1.0.7" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/jest-jasmine2": { - "version": "27.4.5", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.4.5.tgz", - "integrity": "sha512-oUnvwhJDj2LhOiUB1kdnJjkx8C5PwgUZQb9urF77mELH9DGR4e2GqpWQKBOYXWs5+uTN9BGDqRz3Aeg5Wts7aw==", - "dev": true, - "dependencies": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^27.4.4", - "@jest/source-map": "^27.4.0", - "@jest/test-result": "^27.4.2", - "@jest/types": "^27.4.2", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^27.4.2", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.4.2", - "jest-matcher-utils": "^27.4.2", - "jest-message-util": "^27.4.2", - "jest-runtime": "^27.4.5", - "jest-snapshot": "^27.4.5", - "jest-util": "^27.4.2", - "pretty-format": "^27.4.2", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-jasmine2/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-jasmine2/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-jasmine2/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-jasmine2/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-jasmine2/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-leak-detector": { - "version": "27.4.2", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.4.2.tgz", - "integrity": "sha512-ml0KvFYZllzPBJWDei3mDzUhyp/M4ubKebX++fPaudpe8OsxUE+m+P6ciVLboQsrzOCWDjE20/eXew9QMx/VGw==", - "dev": true, - "dependencies": { - "jest-get-type": "^27.4.0", - "pretty-format": "^27.4.2" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-matcher-utils": { - "version": "27.4.2", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.4.2.tgz", - "integrity": "sha512-jyP28er3RRtMv+fmYC/PKG8wvAmfGcSNproVTW2Y0P/OY7/hWUOmsPfxN1jOhM+0u2xU984u2yEagGivz9OBGQ==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^27.4.2", - "jest-get-type": "^27.4.0", - "pretty-format": "^27.4.2" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-matcher-utils/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-matcher-utils/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-matcher-utils/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-matcher-utils/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-matcher-utils/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-message-util": { - "version": "27.4.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.4.2.tgz", - "integrity": "sha512-OMRqRNd9E0DkBLZpFtZkAGYOXl6ZpoMtQJWTAREJKDOFa0M6ptB7L67tp+cszMBkvSgKOhNtQp2Vbcz3ZZKo/w==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.4.2", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.4", - "pretty-format": "^27.4.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-message-util/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-message-util/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-message-util/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-message-util/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-message-util/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-message-util/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-mock": { - "version": "27.4.2", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.4.2.tgz", - "integrity": "sha512-PDDPuyhoukk20JrQKeofK12hqtSka7mWH0QQuxSNgrdiPsrnYYLS6wbzu/HDlxZRzji5ylLRULeuI/vmZZDrYA==", - "dev": true, - "dependencies": { - "@jest/types": "^27.4.2", - "@types/node": "*" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", - "dev": true, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.4.0.tgz", - "integrity": "sha512-WeCpMpNnqJYMQoOjm1nTtsgbR4XHAk1u00qDoNBQoykM280+/TmgA5Qh5giC1ecy6a5d4hbSsHzpBtu5yvlbEg==", - "dev": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-resolve": { - "version": "27.4.5", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.4.5.tgz", - "integrity": "sha512-xU3z1BuOz/hUhVUL+918KqUgK+skqOuUsAi7A+iwoUldK6/+PW+utK8l8cxIWT9AW7IAhGNXjSAh1UYmjULZZw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.4.2", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.4.5", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.4.2", - "jest-validate": "^27.4.2", - "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "27.4.5", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.4.5.tgz", - "integrity": "sha512-elEVvkvRK51y037NshtEkEnukMBWvlPzZHiL847OrIljJ8yIsujD2GXRPqDXC4rEVKbcdsy7W0FxoZb4WmEs7w==", - "dev": true, - "dependencies": { - "@jest/types": "^27.4.2", - "jest-regex-util": "^27.4.0", - "jest-snapshot": "^27.4.5" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-resolve/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-resolve/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-resolve/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-resolve/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-resolve/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-resolve/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runner": { - "version": "27.4.5", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.4.5.tgz", - "integrity": "sha512-/irauncTfmY1WkTaRQGRWcyQLzK1g98GYG/8QvIPviHgO1Fqz1JYeEIsSfF+9mc/UTA6S+IIHFgKyvUrtiBIZg==", - "dev": true, - "dependencies": { - "@jest/console": "^27.4.2", - "@jest/environment": "^27.4.4", - "@jest/test-result": "^27.4.2", - "@jest/transform": "^27.4.5", - "@jest/types": "^27.4.2", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-docblock": "^27.4.0", - "jest-environment-jsdom": "^27.4.4", - "jest-environment-node": "^27.4.4", - "jest-haste-map": "^27.4.5", - "jest-leak-detector": "^27.4.2", - "jest-message-util": "^27.4.2", - "jest-resolve": "^27.4.5", - "jest-runtime": "^27.4.5", - "jest-util": "^27.4.2", - "jest-worker": "^27.4.5", - "source-map-support": "^0.5.6", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-runner/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-runner/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-runner/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-runner/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-runner/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jest-runner/node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/jest-runner/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime": { - "version": "27.4.5", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.4.5.tgz", - "integrity": "sha512-CIYqwuJQXHQtPd/idgrx4zgJ6iCb6uBjQq1RSAGQrw2S8XifDmoM1Ot8NRd80ooAm+ZNdHVwsktIMGlA1F1FAQ==", - "dev": true, - "dependencies": { - "@jest/console": "^27.4.2", - "@jest/environment": "^27.4.4", - "@jest/globals": "^27.4.4", - "@jest/source-map": "^27.4.0", - "@jest/test-result": "^27.4.2", - "@jest/transform": "^27.4.5", - "@jest/types": "^27.4.2", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.4.5", - "jest-message-util": "^27.4.2", - "jest-mock": "^27.4.2", - "jest-regex-util": "^27.4.0", - "jest-resolve": "^27.4.5", - "jest-snapshot": "^27.4.5", - "jest-util": "^27.4.2", - "jest-validate": "^27.4.2", - "slash": "^3.0.0", - "strip-bom": "^4.0.0", - "yargs": "^16.2.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-runtime/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-runtime/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-runtime/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-runtime/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-runtime/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-serializer": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.4.0.tgz", - "integrity": "sha512-RDhpcn5f1JYTX2pvJAGDcnsNTnsV9bjYPU8xcV+xPwOXnUPOQwf4ZEuiU6G9H1UztH+OapMgu/ckEVwO87PwnQ==", - "dev": true, - "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.4" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-snapshot": { - "version": "27.4.5", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.4.5.tgz", - "integrity": "sha512-eCi/iM1YJFrJWiT9de4+RpWWWBqsHiYxFG9V9o/n0WXs6GpW4lUt4FAHAgFPTLPqCUVzrMQmSmTZSgQzwqR7IQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.7.2", - "@babel/generator": "^7.7.2", - "@babel/parser": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.0.0", - "@jest/transform": "^27.4.5", - "@jest/types": "^27.4.2", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^27.4.2", - "graceful-fs": "^4.2.4", - "jest-diff": "^27.4.2", - "jest-get-type": "^27.4.0", - "jest-haste-map": "^27.4.5", - "jest-matcher-utils": "^27.4.2", - "jest-message-util": "^27.4.2", - "jest-resolve": "^27.4.5", - "jest-util": "^27.4.2", - "natural-compare": "^1.4.0", - "pretty-format": "^27.4.2", - "semver": "^7.3.2" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-snapshot/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-snapshot/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-snapshot/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-util": { - "version": "27.4.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.4.2.tgz", - "integrity": "sha512-YuxxpXU6nlMan9qyLuxHaMMOzXAl5aGZWCSzben5DhLHemYQxCc4YK+4L3ZrCutT8GPQ+ui9k5D8rUJoDioMnA==", - "dev": true, - "dependencies": { - "@jest/types": "^27.4.2", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.4", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-util/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-util/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-util/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-util/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-util/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-validate": { - "version": "27.4.2", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.4.2.tgz", - "integrity": "sha512-hWYsSUej+Fs8ZhOm5vhWzwSLmVaPAxRy+Mr+z5MzeaHm9AxUpXdoVMEW4R86y5gOobVfBsMFLk4Rb+QkiEpx1A==", - "dev": true, - "dependencies": { - "@jest/types": "^27.4.2", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^27.4.0", - "leven": "^3.1.0", - "pretty-format": "^27.4.2" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-validate/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.1.tgz", - "integrity": "sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-validate/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-validate/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-validate/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-validate/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watcher": { - "version": "27.4.2", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.4.2.tgz", - "integrity": "sha512-NJvMVyyBeXfDezhWzUOCOYZrUmkSCiatpjpm+nFUid74OZEHk6aMLrZAukIiFDwdbqp6mTM6Ui1w4oc+8EobQg==", - "dev": true, - "dependencies": { - "@jest/test-result": "^27.4.2", - "@jest/types": "^27.4.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^27.4.2", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-watcher/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-watcher/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-watcher/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-watcher/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-watcher/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-worker": { - "version": "27.4.5", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.5.tgz", - "integrity": "sha512-f2s8kEdy15cv9r7q4KkzGXvlY0JTcmCbMHZBfSQDwW77REr45IDWwd0lksDFeVHH2jJ5pqb90T77XscrjeGzzg==", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/js-cookie": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz", - "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==" - }, - "node_modules/js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", - "dev": true, - "dependencies": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" - }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "node_modules/json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonfile/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/jsonpointer": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.0.tgz", - "integrity": "sha512-PNYZIdMjVIvVgDSYKTT63Y+KZ6IZvGRNNWcxwD+GNnUz1MKPfv30J8ueCjdwcN0nDx2SlshgyB7Oy0epAzVRRg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jsx-ast-utils": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz", - "integrity": "sha512-uP5vu8xfy2F9A6LGC22KO7e2/vGTS1MhP+18f++ZNlf0Ohaxbc9nIEwHAsejlJKyzfZzU5UIhe5ItYkitcZnZA==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.3", - "object.assign": "^4.1.2" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ky": { - "version": "0.28.7", - "resolved": "https://registry.npmjs.org/ky/-/ky-0.28.7.tgz", - "integrity": "sha512-a23i6qSr/ep15vdtw/zyEQIDLoUaKDg9Jf04CYl/0ns/wXNYna26zJpI+MeIFaPeDvkrjLPrKtKOiiI3IE53RQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/ky?sponsor=1" - } - }, - "node_modules/language-subtag-registry": { - "version": "0.3.21", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz", - "integrity": "sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg==", - "dev": true - }, - "node_modules/language-tags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", - "integrity": "sha1-0yHbxNowuovzAk4ED6XBRmH5GTo=", - "dev": true, - "dependencies": { - "language-subtag-registry": "~0.3.2" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/loader-runner": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", - "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/loader-utils/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" - }, - "node_modules/lodash.escape": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz", - "integrity": "sha1-yQRGkMIeBClL6qUXcS/e0fqI3pg=", - "dev": true - }, - "node_modules/lodash.flattendeep": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", - "dev": true - }, - "node_modules/lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", - "dev": true - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/magic-string": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", - "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", - "dependencies": { - "sourcemap-codec": "^1.4.4" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "dependencies": { - "tmpl": "1.0.5" - } - }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dependencies": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "bin": { - "miller-rabin": "bin/miller-rabin" - } - }, - "node_modules/miller-rabin/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/mime-db": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.34", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", - "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", - "dependencies": { - "mime-db": "1.51.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" - }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/moment": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", - "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", - "engines": { - "node": "*" - } - }, - "node_modules/moo": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.1.tgz", - "integrity": "sha512-I1mnb5xn4fO80BH9BLcF0yLypy2UKl+Cb01Fu0hJRkJjlCRtxZMWkTdAtDd5ZqCOxtCkhmRwyI57vWT+1iZ67w==", - "dev": true - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/nano-css": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/nano-css/-/nano-css-5.3.4.tgz", - "integrity": "sha512-wfcviJB6NOxDIDfr7RFn/GlaN7I/Bhe4d39ZRCJ3xvZX60LVe2qZ+rDqM49nm4YT81gAjzS+ZklhKP/Gnfnubg==", - "dependencies": { - "css-tree": "^1.1.2", - "csstype": "^3.0.6", - "fastest-stable-stringify": "^2.0.2", - "inline-style-prefixer": "^6.0.0", - "rtl-css-js": "^1.14.0", - "sourcemap-codec": "^1.4.8", - "stacktrace-js": "^2.0.2", - "stylis": "^4.0.6" - }, - "peerDependencies": { - "react": "*", - "react-dom": "*" - } - }, - "node_modules/nanoid": { - "version": "3.1.30", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.30.tgz", - "integrity": "sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ==", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "node_modules/nearley": { - "version": "2.20.1", - "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.20.1.tgz", - "integrity": "sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ==", - "dev": true, - "dependencies": { - "commander": "^2.19.0", - "moo": "^0.5.0", - "railroad-diagrams": "^1.0.0", - "randexp": "0.4.6" - }, - "bin": { - "nearley-railroad": "bin/nearley-railroad.js", - "nearley-test": "bin/nearley-test.js", - "nearley-unparse": "bin/nearley-unparse.js", - "nearleyc": "bin/nearleyc.js" - }, - "funding": { - "type": "individual", - "url": "https://nearley.js.org/#give-to-nearley" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" - }, - "node_modules/next": { - "version": "12.0.7", - "resolved": "https://registry.npmjs.org/next/-/next-12.0.7.tgz", - "integrity": "sha512-sKO8GJJYfuk9c+q+zHSNumvff+wP7ufmOlwT6BuzwiYfFJ61VTTkfTcDLSJ+95ErQJiC54uS4Yg5JEE8H6jXRA==", - "dependencies": { - "@babel/runtime": "7.15.4", - "@hapi/accept": "5.0.2", - "@napi-rs/triples": "1.0.3", - "@next/env": "12.0.7", - "@next/polyfill-module": "12.0.7", - "@next/react-dev-overlay": "12.0.7", - "@next/react-refresh-utils": "12.0.7", - "acorn": "8.5.0", - "assert": "2.0.0", - "browserify-zlib": "0.2.0", - "browserslist": "4.16.6", - "buffer": "5.6.0", - "caniuse-lite": "^1.0.30001228", - "chalk": "2.4.2", - "chokidar": "3.5.1", - "constants-browserify": "1.0.0", - "crypto-browserify": "3.12.0", - "cssnano-simple": "3.0.0", - "domain-browser": "4.19.0", - "encoding": "0.1.13", - "etag": "1.8.1", - "events": "3.3.0", - "find-cache-dir": "3.3.1", - "get-orientation": "1.1.2", - "https-browserify": "1.0.0", - "image-size": "1.0.0", - "jest-worker": "27.0.0-next.5", - "node-fetch": "2.6.1", - "node-html-parser": "1.4.9", - "os-browserify": "0.3.0", - "p-limit": "3.1.0", - "path-browserify": "1.0.1", - "postcss": "8.2.15", - "process": "0.11.10", - "querystring-es3": "0.2.1", - "raw-body": "2.4.1", - "react-is": "17.0.2", - "react-refresh": "0.8.3", - "regenerator-runtime": "0.13.4", - "stream-browserify": "3.0.0", - "stream-http": "3.1.1", - "string_decoder": "1.3.0", - "styled-jsx": "5.0.0-beta.3", - "timers-browserify": "2.0.12", - "tty-browserify": "0.0.1", - "use-subscription": "1.5.1", - "util": "0.12.4", - "vm-browserify": "1.1.2", - "watchpack": "2.3.0" - }, - "bin": { - "next": "dist/bin/next" - }, - "engines": { - "node": ">=12.22.0" - }, - "optionalDependencies": { - "@next/swc-android-arm64": "12.0.7", - "@next/swc-darwin-arm64": "12.0.7", - "@next/swc-darwin-x64": "12.0.7", - "@next/swc-linux-arm-gnueabihf": "12.0.7", - "@next/swc-linux-arm64-gnu": "12.0.7", - "@next/swc-linux-arm64-musl": "12.0.7", - "@next/swc-linux-x64-gnu": "12.0.7", - "@next/swc-linux-x64-musl": "12.0.7", - "@next/swc-win32-arm64-msvc": "12.0.7", - "@next/swc-win32-ia32-msvc": "12.0.7", - "@next/swc-win32-x64-msvc": "12.0.7" - }, - "peerDependencies": { - "fibers": ">= 3.1.0", - "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0", - "react": "^17.0.2 || ^18.0.0-0", - "react-dom": "^17.0.2 || ^18.0.0-0", - "sass": "^1.3.0" - }, - "peerDependenciesMeta": { - "fibers": { - "optional": true - }, - "node-sass": { - "optional": true - }, - "sass": { - "optional": true - } - } - }, - "node_modules/next-pwa": { - "version": "5.4.4", - "resolved": "https://registry.npmjs.org/next-pwa/-/next-pwa-5.4.4.tgz", - "integrity": "sha512-Wo7DctXO9ZZzMCuRK/q2U3x5k49LBRv7p31woJIUfiR6tJChSMoojHUvvgeCY72gSo4mtovS5KRm6iHIs/kxeg==", - "dependencies": { - "babel-loader": "^8.2.3", - "clean-webpack-plugin": "^4.0.0", - "globby": "^11.0.4", - "terser-webpack-plugin": "^5.2.5", - "workbox-webpack-plugin": "^6.4.2", - "workbox-window": "^6.4.2" - }, - "peerDependencies": { - "next": ">=9.0.0" - } - }, - "node_modules/next/node_modules/@babel/runtime": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz", - "integrity": "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==", - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/next/node_modules/acorn": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", - "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/next/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/next/node_modules/browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", - "dependencies": { - "caniuse-lite": "^1.0.30001219", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", - "escalade": "^3.1.1", - "node-releases": "^1.1.71" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/next/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/next/node_modules/jest-worker": { - "version": "27.0.0-next.5", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.0-next.5.tgz", - "integrity": "sha512-mk0umAQ5lT+CaOJ+Qp01N6kz48sJG2kr2n1rX0koqKf6FIygQV0qLOdN9SCYID4IVeSigDOcPeGLozdMLYfb5g==", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/next/node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/next/node_modules/node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", - "engines": { - "node": "4.x || >=6.0.0" - } - }, - "node_modules/next/node_modules/node-releases": { - "version": "1.1.77", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.77.tgz", - "integrity": "sha512-rB1DUFUNAN4Gn9keO2K1efO35IDK7yKHCdCaIMvFO7yUYmmZYeDjnGKle26G4rwj+LKRQpjyUUvMkPglwGCYNQ==" - }, - "node_modules/next/node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" - }, - "node_modules/next/node_modules/regenerator-runtime": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.4.tgz", - "integrity": "sha512-plpwicqEzfEyTQohIKktWigcLzmNStMGwbOUbykx51/29Z3JOGYldaaNGK7ngNXV+UcoqvIMmloZ48Sr74sd+g==" - }, - "node_modules/next/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/next/node_modules/supports-color/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "engines": { - "node": ">=4" - } - }, - "node_modules/node-html-parser": { - "version": "1.4.9", - "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-1.4.9.tgz", - "integrity": "sha512-UVcirFD1Bn0O+TSmloHeHqZZCxHjvtIeGdVdGMhyZ8/PWlEiZaZ5iJzR189yKZr8p0FXN58BUeC7RHRkf/KYGw==", - "dependencies": { - "he": "1.2.0" - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", - "dev": true - }, - "node_modules/node-releases": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", - "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==" - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nth-check": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", - "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", - "dev": true - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", - "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.entries": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", - "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", - "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.hasown": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.0.tgz", - "integrity": "sha512-MhjYRfj3GBlhSkDHo6QmvgjRLXQ2zndabdf3nX0yTyZK9rPfxb6uRpAac8HXNLy1GpqWtZ81Qh4v3uOls2sRAg==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.values": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", - "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" - }, - "node_modules/os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-locate/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate/node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", - "dependencies": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", - "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", - "dev": true, - "dependencies": { - "parse5": "^6.0.1" - } - }, - "node_modules/path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "node_modules/picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "engines": { - "node": ">=6" - } - }, - "node_modules/pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dependencies": { - "pinkie": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pirates": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.4.tgz", - "integrity": "sha512-ZIrVPH+A52Dw84R0L3/VS9Op04PuQ2SEoJL6bkshmiTic/HldyW9Tf7oH5mhJZBK7NmDx27vSMrYEXPXclpDKw==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", - "dev": true, - "dependencies": { - "find-up": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-dir/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/platform": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz", - "integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==" - }, - "node_modules/postcss": { - "version": "8.2.15", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.15.tgz", - "integrity": "sha512-2zO3b26eJD/8rb106Qu2o7Qgg52ND5HPjcyQiK2B98O388h43A448LCslC0dI2P97wCAQRJsFvwTRcXxTKds+Q==", - "dependencies": { - "colorette": "^1.2.2", - "nanoid": "^3.1.23", - "source-map": "^0.6.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" - }, - "node_modules/postcss/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", - "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pretty-format": { - "version": "27.4.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.4.2.tgz", - "integrity": "sha512-p0wNtJ9oLuvgOQDEIZ9zQjZffK7KtyR6Si0jnXULIDwrlNF8Cuir3AZP0hHv0jmKuNN/edOnbMjnzd4uTcmWiw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.4.2", - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/pretty-format/node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true - }, - "node_modules/private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prop-types": { - "version": "15.8.0", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.0.tgz", - "integrity": "sha512-fDGekdaHh65eI3lMi5OnErU6a8Ighg2KjcjQxO7m8VHyWjcPyj5kiOgV1LQDOOOgVy3+5FgjXvdSSX7B8/5/4g==", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/prop-types-exact": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/prop-types-exact/-/prop-types-exact-1.2.0.tgz", - "integrity": "sha512-K+Tk3Kd9V0odiXFP9fwDHUYRyvK3Nun3GVyPapSIs5OBkITAm15W0CPFD/YKTkMUAbc0b9CUwRQp2ybiBIq+eA==", - "dev": true, - "dependencies": { - "has": "^1.0.3", - "object.assign": "^4.1.0", - "reflect.ownkeys": "^0.2.0" - } - }, - "node_modules/psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true - }, - "node_modules/public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dependencies": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/public-encrypt/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/queue": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", - "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", - "dependencies": { - "inherits": "~2.0.3" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/raf": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", - "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", - "dev": true, - "dependencies": { - "performance-now": "^2.1.0" - } - }, - "node_modules/railroad-diagrams": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz", - "integrity": "sha1-635iZ1SN3t+4mcG5Dlc3RVnN234=", - "dev": true - }, - "node_modules/randexp": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz", - "integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==", - "dev": true, - "dependencies": { - "discontinuous-range": "1.0.0", - "ret": "~0.1.10" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dependencies": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "node_modules/raw-body": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz", - "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==", - "dependencies": { - "bytes": "3.1.0", - "http-errors": "1.7.3", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", - "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-addons-test-utils": { - "version": "15.6.2", - "resolved": "https://registry.npmjs.org/react-addons-test-utils/-/react-addons-test-utils-15.6.2.tgz", - "integrity": "sha1-wStu/cIkfBDae4dw0YUICnsEcVY=", - "dev": true, - "peerDependencies": { - "react-dom": "^15.4.2" - } - }, - "node_modules/react-display-name": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/react-display-name/-/react-display-name-0.2.5.tgz", - "integrity": "sha512-I+vcaK9t4+kypiSgaiVWAipqHRXYmZIuAiS8vzFvXHHXVigg/sMKwlRgLy6LH2i3rmP+0Vzfl5lFsFRwF1r3pg==", - "dev": true - }, - "node_modules/react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" - }, - "peerDependencies": { - "react": "17.0.2" - } - }, - "node_modules/react-fast-compare": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz", - "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==" - }, - "node_modules/react-helmet": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/react-helmet/-/react-helmet-6.1.0.tgz", - "integrity": "sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw==", - "dependencies": { - "object-assign": "^4.1.1", - "prop-types": "^15.7.2", - "react-fast-compare": "^3.1.1", - "react-side-effect": "^2.1.0" - }, - "peerDependencies": { - "react": ">=16.3.0" - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/react-refresh": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.8.3.tgz", - "integrity": "sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-shallow-renderer": { - "version": "16.14.1", - "resolved": "https://registry.npmjs.org/react-shallow-renderer/-/react-shallow-renderer-16.14.1.tgz", - "integrity": "sha512-rkIMcQi01/+kxiTE9D3fdS959U1g7gs+/rborw++42m1O9FAQiNI/UNRZExVUoAOprn4umcXf+pFRou8i4zuBg==", - "dev": true, - "dependencies": { - "object-assign": "^4.1.1", - "react-is": "^16.12.0 || ^17.0.0" - }, - "peerDependencies": { - "react": "^16.0.0 || ^17.0.0" - } - }, - "node_modules/react-side-effect": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/react-side-effect/-/react-side-effect-2.1.1.tgz", - "integrity": "sha512-2FoTQzRNTncBVtnzxFOk2mCpcfxQpenBMbk5kSVBg5UcPqV9fRbgY2zhb7GTWWOlpFmAxhClBDlIq8Rsubz1yQ==", - "peerDependencies": { - "react": "^16.3.0 || ^17.0.0" - } - }, - "node_modules/react-svg-ionicons": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/react-svg-ionicons/-/react-svg-ionicons-0.2.3.tgz", - "integrity": "sha512-/o8YFlMvKaO1EzYTYEEmvdDUt02eeGJhMD1Gmreq9gn9tVe1BRL2H6Rpfn1OBWH2X2Q+aZfaRNSTuiRk8L1iag==", - "dependencies": { - "@jsbits/get-package-version": "^1.0.3", - "invariant": "^2.0.0", - "prop-types": "^15.0.0" - }, - "peerDependencies": { - "react": ">=16.3" - } - }, - "node_modules/react-test-renderer": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-17.0.2.tgz", - "integrity": "sha512-yaQ9cB89c17PUb0x6UfWRs7kQCorVdHlutU1boVPEsB8IDZH6n9tHxMacc3y0JoXOJUsZb/t/Mb8FUWMKaM7iQ==", - "dev": true, - "dependencies": { - "object-assign": "^4.1.1", - "react-is": "^17.0.2", - "react-shallow-renderer": "^16.13.1", - "scheduler": "^0.20.2" - }, - "peerDependencies": { - "react": "17.0.2" - } - }, - "node_modules/react-test-renderer/node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true - }, - "node_modules/react-toggle-switch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-toggle-switch/-/react-toggle-switch-3.0.4.tgz", - "integrity": "sha512-eM2Izl0qNrdFZlmRwpXPpUjaYVISHVy8dxCN9l6eRZ7KpmrDsIGInDpoSRU2QPs596+Al+udOArdXX5wCRg0Gg==", - "deprecated": "This package is no longer maintained. Please try something like react-switch instead.", - "peerDependencies": { - "prop-types": "^15.5.10", - "react": ">=0.13.3" - } - }, - "node_modules/react-universal-interface": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/react-universal-interface/-/react-universal-interface-0.6.2.tgz", - "integrity": "sha512-dg8yXdcQmvgR13RIlZbTRQOoUrDciFVoSBZILwjE2LFISxZZ8loVJKAkuzswl5js8BHda79bIb2b84ehU8IjXw==", - "peerDependencies": { - "react": "*", - "tslib": "*" - } - }, - "node_modules/react-use": { - "version": "17.3.2", - "resolved": "https://registry.npmjs.org/react-use/-/react-use-17.3.2.tgz", - "integrity": "sha512-bj7OD0/1wL03KyWmzFXAFe425zziuTf7q8olwCYBfOeFHY1qfO1FAMjROQLsLZYwG4Rx63xAfb7XAbBrJsZmEw==", - "dependencies": { - "@types/js-cookie": "^2.2.6", - "@xobotyi/scrollbar-width": "^1.9.5", - "copy-to-clipboard": "^3.3.1", - "fast-deep-equal": "^3.1.3", - "fast-shallow-equal": "^1.0.0", - "js-cookie": "^2.2.1", - "nano-css": "^5.3.1", - "react-universal-interface": "^0.6.2", - "resize-observer-polyfill": "^1.5.1", - "screenfull": "^5.1.0", - "set-harmonic-interval": "^1.0.1", - "throttle-debounce": "^3.0.1", - "ts-easing": "^0.2.0", - "tslib": "^2.1.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0", - "react-dom": "^16.8.0 || ^17.0.0" - } - }, - "node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/reflect.ownkeys": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/reflect.ownkeys/-/reflect.ownkeys-0.2.0.tgz", - "integrity": "sha1-dJrO7H8/34tj+SegSAnpDFwLNGA=", - "dev": true - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" - }, - "node_modules/regenerate-unicode-properties": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz", - "integrity": "sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA==", - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", - "dev": true - }, - "node_modules/regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", - "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/regexpu-core": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.8.0.tgz", - "integrity": "sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg==", - "dependencies": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^9.0.0", - "regjsgen": "^0.5.2", - "regjsparser": "^0.7.0", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsgen": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==" - }, - "node_modules/regjsparser": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.7.0.tgz", - "integrity": "sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ==", - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "dependencies": { - "is-finite": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resize-observer-polyfill": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", - "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" - }, - "node_modules/resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve.exports": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", - "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "node_modules/rodal": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/rodal/-/rodal-1.8.1.tgz", - "integrity": "sha512-3BpwZrLpaWSDHu8Atzz/S83MkpqpnXL9uGjNPZy1N6V7p4eWWsBSP8er5t+1xV+fZmbGEjLTNo01pUzYHqc7vg==", - "dependencies": { - "classnames": "^2.2.6" - }, - "peerDependencies": { - "prop-types": "^15.6.0", - "react": "^16.0.0" - } - }, - "node_modules/rollup": { - "version": "2.62.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.62.0.tgz", - "integrity": "sha512-cJEQq2gwB0GWMD3rYImefQTSjrPYaC6s4J9pYqnstVLJ1CHa/aZNVkD4Epuvg4iLeMA4KRiq7UM7awKK6j7jcw==", - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=10.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/rollup-plugin-terser": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", - "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", - "dependencies": { - "@babel/code-frame": "^7.10.4", - "jest-worker": "^26.2.1", - "serialize-javascript": "^4.0.0", - "terser": "^5.0.0" - }, - "peerDependencies": { - "rollup": "^2.0.0" - } - }, - "node_modules/rollup-plugin-terser/node_modules/jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/rollup-plugin-terser/node_modules/serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/rollup-plugin-terser/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/rst-selector-parser": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz", - "integrity": "sha1-gbIw6i/MYGbInjRy3nlChdmwPZE=", - "dev": true, - "dependencies": { - "lodash.flattendeep": "^4.4.0", - "nearley": "^2.7.10" - } - }, - "node_modules/rtl-css-js": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/rtl-css-js/-/rtl-css-js-1.15.0.tgz", - "integrity": "sha512-99Cu4wNNIhrI10xxUaABHsdDqzalrSRTie4GeCmbGVuehm4oj+fIy8fTzB+16pmKe8Bv9rl+hxIBez6KxExTew==", - "dependencies": { - "@babel/runtime": "^7.1.2" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/sass": { - "version": "1.45.2", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.45.2.tgz", - "integrity": "sha512-cKfs+F9AMPAFlbbTXNsbGvg3y58nV0mXA3E94jqaySKcC8Kq3/8983zVKQ0TLMUrHw7hF9Tnd3Bz9z5Xgtrl9g==", - "dependencies": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dev": true, - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "node_modules/schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dependencies": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/screenfull": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/screenfull/-/screenfull-5.2.0.tgz", - "integrity": "sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA==", - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/scrypt-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" - }, - "node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/set-harmonic-interval": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-harmonic-interval/-/set-harmonic-interval-1.0.1.tgz", - "integrity": "sha512-AhICkFV84tBP1aWqPwLZqFvAwqEoVA9kxNMniGEUvzOlm4vLmOFLiTT3UZ6bziJTy4bOVpzWGTfSCbmaayGx8g==", - "engines": { - "node": ">=6.9" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" - }, - "node_modules/setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" - }, - "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, - "node_modules/shallowequal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", - "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/shell-quote": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", - "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==" - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", - "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", - "dev": true - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "node_modules/slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sorted-array": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/sorted-array/-/sorted-array-2.0.4.tgz", - "integrity": "sha512-58INzrX0rL6ttCfsGoFmOuQY5AjR6A5E/MmGKJ5JvWHOey6gOEOC6vO8K6C0Y2bQR6KJ8o8aFwHjp/mJ/HcYsQ==" - }, - "node_modules/source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" - }, - "node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.1.tgz", - "integrity": "sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", - "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", - "dev": true, - "dependencies": { - "source-map": "^0.5.6" - } - }, - "node_modules/source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==" - }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "node_modules/stack-generator": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.5.tgz", - "integrity": "sha512-/t1ebrbHkrLrDuNMdeAcsvynWgoH/i4o8EGGfX7dEYDoTXOYVAkEpFdtshlvabzc6JlJ8Kf9YdFEoz7JkzGN9Q==", - "dependencies": { - "stackframe": "^1.1.1" - } - }, - "node_modules/stack-utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", - "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/stackframe": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.0.tgz", - "integrity": "sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA==" - }, - "node_modules/stacktrace-gps": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/stacktrace-gps/-/stacktrace-gps-3.0.4.tgz", - "integrity": "sha512-qIr8x41yZVSldqdqe6jciXEaSCKw1U8XTXpjDuy0ki/apyTn/r3w9hDAAQOhZdxvsC93H+WwwEu5cq5VemzYeg==", - "dependencies": { - "source-map": "0.5.6", - "stackframe": "^1.1.1" - } - }, - "node_modules/stacktrace-gps/node_modules/source-map": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", - "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stacktrace-js": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stacktrace-js/-/stacktrace-js-2.0.2.tgz", - "integrity": "sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg==", - "dependencies": { - "error-stack-parser": "^2.0.6", - "stack-generator": "^2.0.5", - "stacktrace-gps": "^3.0.4" - } - }, - "node_modules/stacktrace-parser": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", - "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", - "dependencies": { - "type-fest": "^0.7.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/stacktrace-parser/node_modules/type-fest": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", - "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/stream-browserify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", - "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", - "dependencies": { - "inherits": "~2.0.4", - "readable-stream": "^3.5.0" - } - }, - "node_modules/stream-http": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.1.1.tgz", - "integrity": "sha512-S7OqaYu0EkFpgeGFb/NPOoPLxFko7TPqtEeFg5DXPB4v/KETHG0Ln6fRFrNezoelpaDKmycEmmZ81cC9DAwgYg==", - "dependencies": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "xtend": "^4.0.2" - } - }, - "node_modules/stream-parser": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz", - "integrity": "sha1-FhhUhpRCACGhGC/wrxkRwSl2F3M=", - "dependencies": { - "debug": "2" - } - }, - "node_modules/stream-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/stream-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/string-hash": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", - "integrity": "sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=" - }, - "node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-length/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-length/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.6.tgz", - "integrity": "sha512-6WgDX8HmQqvEd7J+G6VtAahhsQIssiZ8zl7zKh1VDMFyL3hRTJP4FTNA3RbIp2TOQ9AYNDcc7e3fH0Qbup+DBg==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", - "get-intrinsic": "^1.1.1", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.3.1", - "side-channel": "^1.0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trim": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.5.tgz", - "integrity": "sha512-Lnh17webJVsD6ECeovpVN17RlAKjmz4rF9S+8Y45CkMc/ufVpTkU3vZIyIC7sllQ1FCvObZnnCdNs/HXTUOTlg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "dependencies": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", - "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", - "engines": { - "node": ">=10" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/styled-components": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.3.3.tgz", - "integrity": "sha512-++4iHwBM7ZN+x6DtPPWkCI4vdtwumQ+inA/DdAsqYd4SVgUKJie5vXyzotA00ttcFdQkCng7zc6grwlfIfw+lw==", - "dependencies": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/traverse": "^7.4.5", - "@emotion/is-prop-valid": "^0.8.8", - "@emotion/stylis": "^0.8.4", - "@emotion/unitless": "^0.7.4", - "babel-plugin-styled-components": ">= 1.12.0", - "css-to-react-native": "^3.0.0", - "hoist-non-react-statics": "^3.0.0", - "shallowequal": "^1.1.0", - "supports-color": "^5.5.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/styled-components" - }, - "peerDependencies": { - "react": ">= 16.8.0", - "react-dom": ">= 16.8.0", - "react-is": ">= 16.8.0" - } - }, - "node_modules/styled-components/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "engines": { - "node": ">=4" - } - }, - "node_modules/styled-components/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/styled-jsx": { - "version": "5.0.0-beta.3", - "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.0-beta.3.tgz", - "integrity": "sha512-HtDDGSFPvmjHIqWf9n8Oo54tAoY/DTplvlyOH2+YOtD80Sp31Ap8ffSmxhgk5EkUoJ7xepdXMGT650mSffWuRA==", - "dependencies": { - "@babel/plugin-syntax-jsx": "7.14.5", - "@babel/types": "7.15.0", - "convert-source-map": "1.7.0", - "loader-utils": "1.2.3", - "source-map": "0.7.3", - "string-hash": "1.1.3", - "stylis": "3.5.4", - "stylis-rule-sheet": "0.0.10" - }, - "engines": { - "node": ">= 12.0.0" - }, - "peerDependencies": { - "react": ">= 16.8.0 || 17.x.x || 18.x.x" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - } - } - }, - "node_modules/styled-jsx/node_modules/@babel/types": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.0.tgz", - "integrity": "sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.9", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/styled-jsx/node_modules/convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/styled-jsx/node_modules/emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/styled-jsx/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/styled-jsx/node_modules/loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/styled-jsx/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/styled-jsx/node_modules/stylis": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-3.5.4.tgz", - "integrity": "sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q==" - }, - "node_modules/stylis": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.0.13.tgz", - "integrity": "sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag==" - }, - "node_modules/stylis-rule-sheet": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz", - "integrity": "sha512-nTbZoaqoBnmK+ptANthb10ZRZOGC+EmTLLUxeYIuHNkEKcmKgXX1XWKkUBT2Ac4es3NybooPe0SmvKdhKJZAuw==", - "peerDependencies": { - "stylis": "^3.5.0" - } - }, - "node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/sweetalert2": { - "version": "11.3.3", - "resolved": "https://registry.npmjs.org/sweetalert2/-/sweetalert2-11.3.3.tgz", - "integrity": "sha512-10Keqbmjng/+XpkpSOQ6dttpztl7XNohjnpC6bX6XFgm0WpRXM81YE0wmonGYOP6uyzd76vpfnZS04PdVvO31Q==", - "funding": { - "url": "https://sweetalert2.github.io/#donations" - } - }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/temp-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", - "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/tempy": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", - "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", - "dependencies": { - "is-stream": "^2.0.0", - "temp-dir": "^2.0.0", - "type-fest": "^0.16.0", - "unique-string": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tempy/node_modules/type-fest": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", - "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terser": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz", - "integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==", - "dependencies": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "acorn": "^8.5.0" - }, - "peerDependenciesMeta": { - "acorn": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.0.tgz", - "integrity": "sha512-LPIisi3Ol4chwAaPP8toUJ3L4qCM1G0wao7L3qNv57Drezxj6+VEyySpPw4B1HSO2Eg/hDY/MNF5XihCAoqnsQ==", - "dependencies": { - "jest-worker": "^27.4.1", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1", - "terser": "^5.7.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/terser-webpack-plugin/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/terser/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/terser/node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/terser/node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "node_modules/throat": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", - "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", - "dev": true - }, - "node_modules/throttle-debounce": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-3.0.1.tgz", - "integrity": "sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==", - "engines": { - "node": ">=10" - } - }, - "node_modules/timers-browserify": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", - "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", - "dependencies": { - "setimmediate": "^1.0.4" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toggle-selection": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", - "integrity": "sha1-bkWxJj8gF/oKzH2J14sVuL932jI=" - }, - "node_modules/toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tough-cookie": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", - "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", - "dev": true, - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.1.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dev": true, - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/trim-right": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ts-easing": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/ts-easing/-/ts-easing-0.2.0.tgz", - "integrity": "sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ==" - }, - "node_modules/tsconfig-paths": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", - "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==", - "dev": true, - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.0", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/tsconfig-paths/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/tty-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", - "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-3.0.0.tgz", - "integrity": "sha1-RtDMhVOrt7E6NSsNbeov1Y8tm1U=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz", - "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", - "dependencies": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", - "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", - "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dependencies": { - "crypto-random-string": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "engines": { - "node": ">=4", - "yarn": "*" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/use-subscription": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/use-subscription/-/use-subscription-1.5.1.tgz", - "integrity": "sha512-Xv2a1P/yReAjAbhylMfFplFKj9GssgTwN7RlcTxBujFQcloStWNDQdc4g4NRWH9xS4i/FDk04vQBptAXoF3VcA==", - "dependencies": { - "object-assign": "^4.1.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0" - } - }, - "node_modules/userbase-js": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/userbase-js/-/userbase-js-2.8.0.tgz", - "integrity": "sha512-fjGgfpI018T+HY3k9XW1bkUyppHDa1bLzfJJ+Virq+58YzzcN74c5AF8W/cww76syyyscndbCvzLduvwiVKlwA==", - "dependencies": { - "@babel/runtime": "^7.9.2", - "base64-arraybuffer": "^0.2.0", - "diffie-hellman": "^5.0.3", - "scrypt-js": "^3.0.0", - "sorted-array": "^2.0.4", - "uuid": "^3.4.0" - } - }, - "node_modules/util": { - "version": "0.12.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", - "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "safe-buffer": "^5.1.2", - "which-typed-array": "^1.1.2" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "node_modules/v8-to-istanbul": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz", - "integrity": "sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/v8-to-istanbul/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" - }, - "node_modules/w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "dev": true, - "dependencies": { - "browser-process-hrtime": "^1.0.0" - } - }, - "node_modules/w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", - "dev": true, - "dependencies": { - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "dependencies": { - "makeerror": "1.0.12" - } - }, - "node_modules/watchpack": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.0.tgz", - "integrity": "sha512-MnN0Q1OsvB/GGHETrFeZPQaOelWh/7O+EiFlj8sM9GPjtQkis7k01aAxrg/18kTfoIVcLL+haEVFlXDaSRwKRw==", - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true, - "engines": { - "node": ">=10.4" - } - }, - "node_modules/webpack": { - "version": "5.65.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.65.0.tgz", - "integrity": "sha512-Q5or2o6EKs7+oKmJo7LaqZaMOlDWQse9Tm5l1WAfU/ujLGN5Pb0SqGeVkN/4bpPmEqEP5RnVhiqsOtWtUVwGRw==", - "dependencies": { - "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.50", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.4.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.8.3", - "es-module-lexer": "^0.9.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.4", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.3.1", - "webpack-sources": "^3.2.2" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dependencies": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, - "node_modules/webpack-sources/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/@types/estree": { - "version": "0.0.50", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", - "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==" - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpack/node_modules/watchpack": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz", - "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==", - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack/node_modules/webpack-sources": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.2.tgz", - "integrity": "sha512-cp5qdmHnu5T8wRg2G3vZZHoJPN14aqQ89SyQ11NpGH5zEMDCclt49rzo+MaRazk7/UeILhAI+/sEtcM+7Fr0nw==", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, - "dependencies": { - "iconv-lite": "0.4.24" - } - }, - "node_modules/whatwg-encoding/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true - }, - "node_modules/whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "dev": true, - "dependencies": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.7.tgz", - "integrity": "sha512-vjxaB4nfDqwKI0ws7wZpxIlde1XrLX5uB0ZjpfshgmapJMD7jJWhZI+yToJTqaFByF0eNBcYxbjmCzoRP7CfEw==", - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.18.5", - "foreach": "^2.0.5", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/workbox-background-sync": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.4.2.tgz", - "integrity": "sha512-P7c8uG5X2k+DMICH9xeSA9eUlCOjHHYoB42Rq+RtUpuwBxUOflAXR1zdsMWj81LopE4gjKXlTw7BFd1BDAHo7g==", - "dependencies": { - "idb": "^6.1.4", - "workbox-core": "6.4.2" - } - }, - "node_modules/workbox-broadcast-update": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.4.2.tgz", - "integrity": "sha512-qnBwQyE0+PWFFc/n4ISXINE49m44gbEreJUYt2ldGH3+CNrLmJ1egJOOyUqqu9R4Eb7QrXcmB34ClXG7S37LbA==", - "dependencies": { - "workbox-core": "6.4.2" - } - }, - "node_modules/workbox-build": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.4.2.tgz", - "integrity": "sha512-WMdYLhDIsuzViOTXDH+tJ1GijkFp5khSYolnxR/11zmfhNDtuo7jof72xPGFy+KRpsz6tug39RhivCj77qqO0w==", - "dependencies": { - "@apideck/better-ajv-errors": "^0.3.1", - "@babel/core": "^7.11.1", - "@babel/preset-env": "^7.11.0", - "@babel/runtime": "^7.11.2", - "@rollup/plugin-babel": "^5.2.0", - "@rollup/plugin-node-resolve": "^11.2.1", - "@rollup/plugin-replace": "^2.4.1", - "@surma/rollup-plugin-off-main-thread": "^2.2.3", - "ajv": "^8.6.0", - "common-tags": "^1.8.0", - "fast-json-stable-stringify": "^2.1.0", - "fs-extra": "^9.0.1", - "glob": "^7.1.6", - "lodash": "^4.17.20", - "pretty-bytes": "^5.3.0", - "rollup": "^2.43.1", - "rollup-plugin-terser": "^7.0.0", - "source-map": "^0.8.0-beta.0", - "source-map-url": "^0.4.0", - "stringify-object": "^3.3.0", - "strip-comments": "^2.0.1", - "tempy": "^0.6.0", - "upath": "^1.2.0", - "workbox-background-sync": "6.4.2", - "workbox-broadcast-update": "6.4.2", - "workbox-cacheable-response": "6.4.2", - "workbox-core": "6.4.2", - "workbox-expiration": "6.4.2", - "workbox-google-analytics": "6.4.2", - "workbox-navigation-preload": "6.4.2", - "workbox-precaching": "6.4.2", - "workbox-range-requests": "6.4.2", - "workbox-recipes": "6.4.2", - "workbox-routing": "6.4.2", - "workbox-strategies": "6.4.2", - "workbox-streams": "6.4.2", - "workbox-sw": "6.4.2", - "workbox-window": "6.4.2" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/workbox-build/node_modules/ajv": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.8.2.tgz", - "integrity": "sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/workbox-build/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/workbox-build/node_modules/source-map": { - "version": "0.8.0-beta.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", - "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", - "dependencies": { - "whatwg-url": "^7.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/workbox-build/node_modules/tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/workbox-build/node_modules/webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" - }, - "node_modules/workbox-build/node_modules/whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "dependencies": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, - "node_modules/workbox-cacheable-response": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.4.2.tgz", - "integrity": "sha512-9FE1W/cKffk1AJzImxgEN0ceWpyz1tqNjZVtA3/LAvYL3AC5SbIkhc7ZCO82WmO9IjTfu8Vut2X/C7ViMSF7TA==", - "dependencies": { - "workbox-core": "6.4.2" - } - }, - "node_modules/workbox-core": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.4.2.tgz", - "integrity": "sha512-1U6cdEYPcajRXiboSlpJx6U7TvhIKbxRRerfepAJu2hniKwJ3DHILjpU/zx3yvzSBCWcNJDoFalf7Vgd7ey/rw==" - }, - "node_modules/workbox-expiration": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.4.2.tgz", - "integrity": "sha512-0hbpBj0tDnW+DZOUmwZqntB/8xrXOgO34i7s00Si/VlFJvvpRKg1leXdHHU8ykoSBd6+F2KDcMP3swoCi5guLw==", - "dependencies": { - "idb": "^6.1.4", - "workbox-core": "6.4.2" - } - }, - "node_modules/workbox-google-analytics": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.4.2.tgz", - "integrity": "sha512-u+gxs3jXovPb1oul4CTBOb+T9fS1oZG+ZE6AzS7l40vnyfJV79DaLBvlpEZfXGv3CjMdV1sT/ltdOrKzo7HcGw==", - "dependencies": { - "workbox-background-sync": "6.4.2", - "workbox-core": "6.4.2", - "workbox-routing": "6.4.2", - "workbox-strategies": "6.4.2" - } - }, - "node_modules/workbox-navigation-preload": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.4.2.tgz", - "integrity": "sha512-viyejlCtlKsbJCBHwhSBbWc57MwPXvUrc8P7d+87AxBGPU+JuWkT6nvBANgVgFz6FUhCvRC8aYt+B1helo166g==", - "dependencies": { - "workbox-core": "6.4.2" - } - }, - "node_modules/workbox-precaching": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.4.2.tgz", - "integrity": "sha512-CZ6uwFN/2wb4noHVlALL7UqPFbLfez/9S2GAzGAb0Sk876ul9ukRKPJJ6gtsxfE2HSTwqwuyNVa6xWyeyJ1XSA==", - "dependencies": { - "workbox-core": "6.4.2", - "workbox-routing": "6.4.2", - "workbox-strategies": "6.4.2" - } - }, - "node_modules/workbox-range-requests": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.4.2.tgz", - "integrity": "sha512-SowF3z69hr3Po/w7+xarWfzxJX/3Fo0uSG72Zg4g5FWWnHpq2zPvgbWerBZIa81zpJVUdYpMa3akJJsv+LaO1Q==", - "dependencies": { - "workbox-core": "6.4.2" - } - }, - "node_modules/workbox-recipes": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.4.2.tgz", - "integrity": "sha512-/oVxlZFpAjFVbY+3PoGEXe8qyvtmqMrTdWhbOfbwokNFtUZ/JCtanDKgwDv9x3AebqGAoJRvQNSru0F4nG+gWA==", - "dependencies": { - "workbox-cacheable-response": "6.4.2", - "workbox-core": "6.4.2", - "workbox-expiration": "6.4.2", - "workbox-precaching": "6.4.2", - "workbox-routing": "6.4.2", - "workbox-strategies": "6.4.2" - } - }, - "node_modules/workbox-routing": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.4.2.tgz", - "integrity": "sha512-0ss/n9PAcHjTy4Ad7l2puuod4WtsnRYu9BrmHcu6Dk4PgWeJo1t5VnGufPxNtcuyPGQ3OdnMdlmhMJ57sSrrSw==", - "dependencies": { - "workbox-core": "6.4.2" - } - }, - "node_modules/workbox-strategies": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.4.2.tgz", - "integrity": "sha512-YXh9E9dZGEO1EiPC3jPe2CbztO5WT8Ruj8wiYZM56XqEJp5YlGTtqRjghV+JovWOqkWdR+amJpV31KPWQUvn1Q==", - "dependencies": { - "workbox-core": "6.4.2" - } - }, - "node_modules/workbox-streams": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.4.2.tgz", - "integrity": "sha512-ROEGlZHGVEgpa5bOZefiJEVsi5PsFjJG9Xd+wnDbApsCO9xq9rYFopF+IRq9tChyYzhBnyk2hJxbQVWphz3sog==", - "dependencies": { - "workbox-core": "6.4.2", - "workbox-routing": "6.4.2" - } - }, - "node_modules/workbox-sw": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.4.2.tgz", - "integrity": "sha512-A2qdu9TLktfIM5NE/8+yYwfWu+JgDaCkbo5ikrky2c7r9v2X6DcJ+zSLphNHHLwM/0eVk5XVf1mC5HGhYpMhhg==" - }, - "node_modules/workbox-webpack-plugin": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-6.4.2.tgz", - "integrity": "sha512-CiEwM6kaJRkx1cP5xHksn13abTzUqMHiMMlp5Eh/v4wRcedgDTyv6Uo8+Hg9MurRbHDosO5suaPyF9uwVr4/CQ==", - "dependencies": { - "fast-json-stable-stringify": "^2.1.0", - "pretty-bytes": "^5.4.1", - "source-map-url": "^0.4.0", - "upath": "^1.2.0", - "webpack-sources": "^1.4.3", - "workbox-build": "6.4.2" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "webpack": "^4.4.0 || ^5.9.0" - } - }, - "node_modules/workbox-window": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.4.2.tgz", - "integrity": "sha512-KVyRKmrJg7iB+uym/B/CnEUEFG9CvnTU1Bq5xpXHbtgD9l+ShDekSl1wYpqw/O0JfeeQVOFb8CiNfvnwWwqnWQ==", - "dependencies": { - "@types/trusted-types": "^2.0.2", - "workbox-core": "6.4.2" - } - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/ws": { - "version": "7.5.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.6.tgz", - "integrity": "sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==", - "dev": true, - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - }, - "dependencies": { - "@apideck/better-ajv-errors": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.2.tgz", - "integrity": "sha512-JdEazx7qiVqTBzzBl5rolRwl5cmhihjfIcpqRzIZjtT6b18liVmDn/VlWpqW4C/qP2hrFFMLRV1wlex8ZVBPTg==", - "requires": { - "json-schema": "^0.4.0", - "jsonpointer": "^5.0.0", - "leven": "^3.1.0" - } - }, - "@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", - "requires": { - "@babel/highlight": "^7.16.7" - } - }, - "@babel/compat-data": { - "version": "7.16.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.4.tgz", - "integrity": "sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==" - }, - "@babel/core": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.7.tgz", - "integrity": "sha512-aeLaqcqThRNZYmbMqtulsetOQZ/5gbR/dWruUCJcpas4Qoyy+QeagfDsPdMrqwsPRDNxJvBlRiZxxX7THO7qtA==", - "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.16.7", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helpers": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" - }, - "dependencies": { - "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "requires": { - "minimist": "^1.2.5" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "@babel/generator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.7.tgz", - "integrity": "sha512-/ST3Sg8MLGY5HVYmrjOgL60ENux/HfO/CsUh7y4MalThufhE/Ff/6EibFDHi4jiDCaWfJKoqbE6oTh21c5hrRg==", - "requires": { - "@babel/types": "^7.16.7", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", - "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz", - "integrity": "sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==", - "requires": { - "@babel/helper-explode-assignable-expression": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", - "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==", - "requires": { - "@babel/compat-data": "^7.16.4", - "@babel/helper-validator-option": "^7.16.7", - "browserslist": "^4.17.5", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.7.tgz", - "integrity": "sha512-kIFozAvVfK05DM4EVQYKK+zteWvY85BFdGBRQBytRyY3y+6PX0DkDOn/CZ3lEuczCfrCxEzwt0YtP/87YPTWSw==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-member-expression-to-functions": "^7.16.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7" - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.7.tgz", - "integrity": "sha512-fk5A6ymfp+O5+p2yCkXAu5Kyj6v0xh0RBeNcAkYUMDvvAAoxvSKXn+Jb37t/yWFiQVDFK1ELpUTD8/aLhCPu+g==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "regexpu-core": "^4.7.1" - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.0.tgz", - "integrity": "sha512-7hfT8lUljl/tM3h+izTX/pO3W3frz2ok6Pk+gzys8iJqDfZrZy2pXjRTZAvG2YmfHun1X4q8/UZRLatMfqc5Tg==", - "requires": { - "@babel/helper-compilation-targets": "^7.13.0", - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/traverse": "^7.13.0", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "@babel/helper-environment-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", - "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz", - "integrity": "sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==", - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", - "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", - "requires": { - "@babel/helper-get-function-arity": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", - "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", - "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz", - "integrity": "sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q==", - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-module-imports": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", - "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-module-transforms": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", - "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==", - "requires": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", - "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.7.tgz", - "integrity": "sha512-C3o117GnP/j/N2OWo+oepeWbFEKRfNaay+F1Eo5Mj3A1SRjyx+qaFhm23nlipub7Cjv2azdUUiDH+VlpdwUFRg==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-wrap-function": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-replace-supers": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz", - "integrity": "sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==", - "requires": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-member-expression-to-functions": "^7.16.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-simple-access": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", - "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==", - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", - "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" - }, - "@babel/helper-validator-option": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", - "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==" - }, - "@babel/helper-wrap-function": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.7.tgz", - "integrity": "sha512-7a9sABeVwcunnztZZ7WTgSw6jVYLzM1wua0Z4HIXm9S3/HC96WKQTkFgGEaj5W06SHHihPJ6Le6HzS5cGOQMNw==", - "requires": { - "@babel/helper-function-name": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/helpers": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.7.tgz", - "integrity": "sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw==", - "requires": { - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/highlight": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.7.tgz", - "integrity": "sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw==", - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/parser": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.7.tgz", - "integrity": "sha512-sR4eaSrnM7BV7QPzGfEX5paG/6wrZM3I0HDzfIAK06ESvo9oy3xBuVBxE3MbQaKNhvg8g/ixjMWo2CGpzpHsDA==" - }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz", - "integrity": "sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz", - "integrity": "sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", - "@babel/plugin-proposal-optional-chaining": "^7.16.7" - } - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.7.tgz", - "integrity": "sha512-TTXBT3A5c11eqRzaC6beO6rlFT3Mo9C2e8eB44tTr52ESXSK2CIc2fOp1ynpAwQA8HhBMho+WXhMHWlAe3xkpw==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-remap-async-to-generator": "^7.16.7", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz", - "integrity": "sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-proposal-class-static-block": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.7.tgz", - "integrity": "sha512-dgqJJrcZoG/4CkMopzhPJjGxsIe9A8RlkQLnL/Vhhx8AA9ZuaRwGSlscSh42hazc7WSrya/IK7mTeoF0DP9tEw==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - } - }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz", - "integrity": "sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - } - }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz", - "integrity": "sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz", - "integrity": "sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-json-strings": "^7.8.3" - } - }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz", - "integrity": "sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz", - "integrity": "sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz", - "integrity": "sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.7.tgz", - "integrity": "sha512-3O0Y4+dw94HA86qSg9IHfyPktgR7q3gpNVAeiKQd+8jBKFaU5NQS1Yatgo4wY+UFNuLjvxcSmzcsHqrhgTyBUA==", - "requires": { - "@babel/compat-data": "^7.16.4", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.16.7" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz", - "integrity": "sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz", - "integrity": "sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-proposal-private-methods": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.7.tgz", - "integrity": "sha512-7twV3pzhrRxSwHeIvFE6coPgvo+exNDOiGUMg39o2LiLo1Y+4aKpfkcLGcg1UHonzorCt7SNXnoMyCnnIOA8Sw==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz", - "integrity": "sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-create-class-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz", - "integrity": "sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.14.5.tgz", - "integrity": "sha512-ohuFIsOMXJnbOMRfX7/w7LocdR6R7whhuRD4ax8IipLcLPlZGJKkBxgHp++U4N/vKyU16/YDQr2f5seajD3jIw==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz", - "integrity": "sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz", - "integrity": "sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.7.tgz", - "integrity": "sha512-pFEfjnK4DfXCfAlA5I98BYdDJD8NltMzx19gt6DAmfE+2lXRfPUoa0/5SUjT4+TDE1W/rcxU/1lgN55vpAjjdg==", - "requires": { - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-remap-async-to-generator": "^7.16.7" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz", - "integrity": "sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz", - "integrity": "sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz", - "integrity": "sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz", - "integrity": "sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.7.tgz", - "integrity": "sha512-VqAwhTHBnu5xBVDCvrvqJbtLUa++qZaWC0Fgr2mqokBlulZARGyIvZDoqbPlPaKImQ9dKAcCzbv+ul//uqu70A==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz", - "integrity": "sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz", - "integrity": "sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz", - "integrity": "sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==", - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz", - "integrity": "sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz", - "integrity": "sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==", - "requires": { - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz", - "integrity": "sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz", - "integrity": "sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz", - "integrity": "sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g==", - "requires": { - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.7.tgz", - "integrity": "sha512-h2RP2kE7He1ZWKyAlanMZrAbdv+Acw1pA8dQZhE025WJZE2z0xzFADAinXA9fxd5bn7JnM+SdOGcndGx1ARs9w==", - "requires": { - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-simple-access": "^7.16.7", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.7.tgz", - "integrity": "sha512-DuK5E3k+QQmnOqBR9UkusByy5WZWGRxfzV529s9nPra1GE7olmxfqO2FHobEOYSPIjPBTr4p66YDcjQnt8cBmw==", - "requires": { - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz", - "integrity": "sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ==", - "requires": { - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.7.tgz", - "integrity": "sha512-kFy35VwmwIQwCjwrAQhl3+c/kr292i4KdLPKp5lPH03Ltc51qnFlIADoyPxc/6Naz3ok3WdYKg+KK6AH+D4utg==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz", - "integrity": "sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz", - "integrity": "sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz", - "integrity": "sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz", - "integrity": "sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz", - "integrity": "sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q==", - "requires": { - "regenerator-transform": "^0.14.2" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz", - "integrity": "sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz", - "integrity": "sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz", - "integrity": "sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz", - "integrity": "sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz", - "integrity": "sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz", - "integrity": "sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz", - "integrity": "sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz", - "integrity": "sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/preset-env": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.7.tgz", - "integrity": "sha512-urX3Cee4aOZbRWOSa3mKPk0aqDikfILuo+C7qq7HY0InylGNZ1fekq9jmlr3pLWwZHF4yD7heQooc2Pow2KMyQ==", - "requires": { - "@babel/compat-data": "^7.16.4", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-validator-option": "^7.16.7", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.7", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.7", - "@babel/plugin-proposal-async-generator-functions": "^7.16.7", - "@babel/plugin-proposal-class-properties": "^7.16.7", - "@babel/plugin-proposal-class-static-block": "^7.16.7", - "@babel/plugin-proposal-dynamic-import": "^7.16.7", - "@babel/plugin-proposal-export-namespace-from": "^7.16.7", - "@babel/plugin-proposal-json-strings": "^7.16.7", - "@babel/plugin-proposal-logical-assignment-operators": "^7.16.7", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.7", - "@babel/plugin-proposal-numeric-separator": "^7.16.7", - "@babel/plugin-proposal-object-rest-spread": "^7.16.7", - "@babel/plugin-proposal-optional-catch-binding": "^7.16.7", - "@babel/plugin-proposal-optional-chaining": "^7.16.7", - "@babel/plugin-proposal-private-methods": "^7.16.7", - "@babel/plugin-proposal-private-property-in-object": "^7.16.7", - "@babel/plugin-proposal-unicode-property-regex": "^7.16.7", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.16.7", - "@babel/plugin-transform-async-to-generator": "^7.16.7", - "@babel/plugin-transform-block-scoped-functions": "^7.16.7", - "@babel/plugin-transform-block-scoping": "^7.16.7", - "@babel/plugin-transform-classes": "^7.16.7", - "@babel/plugin-transform-computed-properties": "^7.16.7", - "@babel/plugin-transform-destructuring": "^7.16.7", - "@babel/plugin-transform-dotall-regex": "^7.16.7", - "@babel/plugin-transform-duplicate-keys": "^7.16.7", - "@babel/plugin-transform-exponentiation-operator": "^7.16.7", - "@babel/plugin-transform-for-of": "^7.16.7", - "@babel/plugin-transform-function-name": "^7.16.7", - "@babel/plugin-transform-literals": "^7.16.7", - "@babel/plugin-transform-member-expression-literals": "^7.16.7", - "@babel/plugin-transform-modules-amd": "^7.16.7", - "@babel/plugin-transform-modules-commonjs": "^7.16.7", - "@babel/plugin-transform-modules-systemjs": "^7.16.7", - "@babel/plugin-transform-modules-umd": "^7.16.7", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.16.7", - "@babel/plugin-transform-new-target": "^7.16.7", - "@babel/plugin-transform-object-super": "^7.16.7", - "@babel/plugin-transform-parameters": "^7.16.7", - "@babel/plugin-transform-property-literals": "^7.16.7", - "@babel/plugin-transform-regenerator": "^7.16.7", - "@babel/plugin-transform-reserved-words": "^7.16.7", - "@babel/plugin-transform-shorthand-properties": "^7.16.7", - "@babel/plugin-transform-spread": "^7.16.7", - "@babel/plugin-transform-sticky-regex": "^7.16.7", - "@babel/plugin-transform-template-literals": "^7.16.7", - "@babel/plugin-transform-typeof-symbol": "^7.16.7", - "@babel/plugin-transform-unicode-escapes": "^7.16.7", - "@babel/plugin-transform-unicode-regex": "^7.16.7", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.16.7", - "babel-plugin-polyfill-corejs2": "^0.3.0", - "babel-plugin-polyfill-corejs3": "^0.4.0", - "babel-plugin-polyfill-regenerator": "^0.3.0", - "core-js-compat": "^3.19.1", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } - }, - "@babel/runtime": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.7.tgz", - "integrity": "sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ==", - "requires": { - "regenerator-runtime": "^0.13.4" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" - } - } - }, - "@babel/runtime-corejs3": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.16.7.tgz", - "integrity": "sha512-MiYR1yk8+TW/CpOD0CyX7ve9ffWTKqLk/L6pk8TPl0R8pNi+1pFY8fH9yET55KlvukQ4PAWfXsGr2YHVjcI4Pw==", - "dev": true, - "requires": { - "core-js-pure": "^3.19.0", - "regenerator-runtime": "^0.13.4" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", - "dev": true - } - } - }, - "@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", - "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/traverse": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.7.tgz", - "integrity": "sha512-8KWJPIb8c2VvY8AJrydh6+fVRo2ODx1wYBU2398xJVq0JomuLBZmVQzLPBblJgHIGYG4znCpUZUZ0Pt2vdmVYQ==", - "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.16.7", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.7.tgz", - "integrity": "sha512-E8HuV7FO9qLpx6OtoGfUQ2cjIYnbFwvZWYBS+87EwtdMvmUPJSwykpovFB+8insbpF0uJcpr8KMUi64XZntZcg==", - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - } - }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "@emotion/is-prop-valid": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", - "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==", - "requires": { - "@emotion/memoize": "0.7.4" - } - }, - "@emotion/memoize": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", - "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==" - }, - "@emotion/stylis": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz", - "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==" - }, - "@emotion/unitless": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", - "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" - }, - "@eslint/eslintrc": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", - "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.2.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "globals": { - "version": "13.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", - "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - } - } - }, - "@hapi/accept": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@hapi/accept/-/accept-5.0.2.tgz", - "integrity": "sha512-CmzBx/bXUR8451fnZRuZAJRlzgm0Jgu5dltTX/bszmR2lheb9BpyN47Q1RbaGTsvFzn0PXAEs+lXDKfshccYZw==", - "requires": { - "@hapi/boom": "9.x.x", - "@hapi/hoek": "9.x.x" - } - }, - "@hapi/boom": { - "version": "9.1.4", - "resolved": "https://registry.npmjs.org/@hapi/boom/-/boom-9.1.4.tgz", - "integrity": "sha512-Ls1oH8jaN1vNsqcaHVYJrKmgMcKsC1wcp8bujvXrHaAqD2iDYq3HoOwsxwo09Cuda5R5nC0o0IxlrlTuvPuzSw==", - "requires": { - "@hapi/hoek": "9.x.x" - } - }, - "@hapi/hoek": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.1.tgz", - "integrity": "sha512-gfta+H8aziZsm8pZa0vj04KO6biEiisppNgA1kbJvFrrWu9Vm7eaUEy76DIxsuTaWvti5fkJVhllWc6ZTE+Mdw==" - }, - "@humanwhocodes/config-array": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.2.tgz", - "integrity": "sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - } - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - } - }, - "@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true - }, - "@jest/console": { - "version": "27.4.2", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.4.2.tgz", - "integrity": "sha512-xknHThRsPB/To1FUbi6pCe43y58qFC03zfb6R7fDb/FfC7k2R3i1l+izRBJf8DI46KhYGRaF14Eo9A3qbBoixg==", - "dev": true, - "requires": { - "@jest/types": "^27.4.2", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^27.4.2", - "jest-util": "^27.4.2", - "slash": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/core": { - "version": "27.4.5", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.4.5.tgz", - "integrity": "sha512-3tm/Pevmi8bDsgvo73nX8p/WPng6KWlCyScW10FPEoN1HU4pwI83tJ3TsFvi1FfzsjwUlMNEPowgb/rPau/LTQ==", - "dev": true, - "requires": { - "@jest/console": "^27.4.2", - "@jest/reporters": "^27.4.5", - "@jest/test-result": "^27.4.2", - "@jest/transform": "^27.4.5", - "@jest/types": "^27.4.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-changed-files": "^27.4.2", - "jest-config": "^27.4.5", - "jest-haste-map": "^27.4.5", - "jest-message-util": "^27.4.2", - "jest-regex-util": "^27.4.0", - "jest-resolve": "^27.4.5", - "jest-resolve-dependencies": "^27.4.5", - "jest-runner": "^27.4.5", - "jest-runtime": "^27.4.5", - "jest-snapshot": "^27.4.5", - "jest-util": "^27.4.2", - "jest-validate": "^27.4.2", - "jest-watcher": "^27.4.2", - "micromatch": "^4.0.4", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/environment": { - "version": "27.4.4", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.4.4.tgz", - "integrity": "sha512-q+niMx7cJgt/t/b6dzLOh4W8Ef/8VyKG7hxASK39jakijJzbFBGpptx3RXz13FFV7OishQ9lTbv+dQ5K3EhfDQ==", - "dev": true, - "requires": { - "@jest/fake-timers": "^27.4.2", - "@jest/types": "^27.4.2", - "@types/node": "*", - "jest-mock": "^27.4.2" - } - }, - "@jest/fake-timers": { - "version": "27.4.2", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.4.2.tgz", - "integrity": "sha512-f/Xpzn5YQk5adtqBgvw1V6bF8Nx3hY0OIRRpCvWcfPl0EAjdqWPdhH3t/3XpiWZqtjIEHDyMKP9ajpva1l4Zmg==", - "dev": true, - "requires": { - "@jest/types": "^27.4.2", - "@sinonjs/fake-timers": "^8.0.1", - "@types/node": "*", - "jest-message-util": "^27.4.2", - "jest-mock": "^27.4.2", - "jest-util": "^27.4.2" - } - }, - "@jest/globals": { - "version": "27.4.4", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.4.4.tgz", - "integrity": "sha512-bqpqQhW30BOreXM8bA8t8JbOQzsq/WnPTnBl+It3UxAD9J8yxEAaBEylHx1dtBapAr/UBk8GidXbzmqnee8tYQ==", - "dev": true, - "requires": { - "@jest/environment": "^27.4.4", - "@jest/types": "^27.4.2", - "expect": "^27.4.2" - } - }, - "@jest/reporters": { - "version": "27.4.5", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.4.5.tgz", - "integrity": "sha512-3orsG4vi8zXuBqEoy2LbnC1kuvkg1KQUgqNxmxpQgIOQEPeV0onvZu+qDQnEoX8qTQErtqn/xzcnbpeTuOLSiA==", - "dev": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.4.2", - "@jest/test-result": "^27.4.2", - "@jest/transform": "^27.4.5", - "@jest/types": "^27.4.2", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.4", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^4.0.3", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "jest-haste-map": "^27.4.5", - "jest-resolve": "^27.4.5", - "jest-util": "^27.4.2", - "jest-worker": "^27.4.5", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^8.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", - "dev": true, - "requires": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/source-map": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.4.0.tgz", - "integrity": "sha512-Ntjx9jzP26Bvhbm93z/AKcPRj/9wrkI88/gK60glXDx1q+IeI0rf7Lw2c89Ch6ofonB0On/iRDreQuQ6te9pgQ==", - "dev": true, - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.4", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "@jest/test-result": { - "version": "27.4.2", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.4.2.tgz", - "integrity": "sha512-kr+bCrra9jfTgxHXHa2UwoQjxvQk3Am6QbpAiJ5x/50LW8llOYrxILkqY0lZRW/hu8FXesnudbql263+EW9iNA==", - "dev": true, - "requires": { - "@jest/console": "^27.4.2", - "@jest/types": "^27.4.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, - "@jest/test-sequencer": { - "version": "27.4.5", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.4.5.tgz", - "integrity": "sha512-n5woIn/1v+FT+9hniymHPARA9upYUmfi5Pw9ewVwXCDlK4F5/Gkees9v8vdjGdAIJ2MPHLHodiajLpZZanWzEQ==", - "dev": true, - "requires": { - "@jest/test-result": "^27.4.2", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.4.5", - "jest-runtime": "^27.4.5" - } - }, - "@jest/transform": { - "version": "27.4.5", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.4.5.tgz", - "integrity": "sha512-PuMet2UlZtlGzwc6L+aZmR3I7CEBpqadO03pU40l2RNY2fFJ191b9/ITB44LNOhVtsyykx0OZvj0PCyuLm7Eew==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.4.2", - "babel-plugin-istanbul": "^6.0.0", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.4.5", - "jest-regex-util": "^27.4.0", - "jest-util": "^27.4.2", - "micromatch": "^4.0.4", - "pirates": "^4.0.1", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/types": { - "version": "27.4.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.4.2.tgz", - "integrity": "sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jsbits/get-package-version": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@jsbits/get-package-version/-/get-package-version-1.0.3.tgz", - "integrity": "sha512-IJy1jRL01x7p6UEpgKa1lVLstMUx8EiIR8pPoS5sBfsHEoeLkzYiNpAfxPx8zLDUJyS1yBbChJjcWdPqyH285w==" - }, - "@napi-rs/triples": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@napi-rs/triples/-/triples-1.0.3.tgz", - "integrity": "sha512-jDJTpta+P4p1NZTFVLHJ/TLFVYVcOqv6l8xwOeBKNPMgY/zDYH/YH7SJbvrr/h1RcS9GzbPcLKGzpuK9cV56UA==" - }, - "@next/env": { - "version": "12.0.7", - "resolved": "https://registry.npmjs.org/@next/env/-/env-12.0.7.tgz", - "integrity": "sha512-TNDqBV37wd95SiNdZsSUq8gnnrTwr+aN9wqy4Zxrxw4bC/jCHNsbK94DxjkG99VL30VCRXXDBTA1/Wa2jIpF9Q==" - }, - "@next/polyfill-module": { - "version": "12.0.7", - "resolved": "https://registry.npmjs.org/@next/polyfill-module/-/polyfill-module-12.0.7.tgz", - "integrity": "sha512-sA8LAMMlmcspIZw/jeQuJTyA3uGrqOhTBaQE+G9u6DPohqrBFRkaz7RzzJeqXkUXw600occsIBknSjyVd1R67A==" - }, - "@next/react-dev-overlay": { - "version": "12.0.7", - "resolved": "https://registry.npmjs.org/@next/react-dev-overlay/-/react-dev-overlay-12.0.7.tgz", - "integrity": "sha512-dSQLgpZ5uzyittFtIHlJCLAbc0LlMFbRBSYuGsIlrtGyjYN+WMcnz8lK48VLxNPFGuB/hEzkWV4TW5Zu75+Fzg==", - "requires": { - "@babel/code-frame": "7.12.11", - "anser": "1.4.9", - "chalk": "4.0.0", - "classnames": "2.2.6", - "css.escape": "1.5.1", - "data-uri-to-buffer": "3.0.1", - "platform": "1.3.6", - "shell-quote": "1.7.3", - "source-map": "0.8.0-beta.0", - "stacktrace-parser": "0.1.10", - "strip-ansi": "6.0.1" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.0.0.tgz", - "integrity": "sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "source-map": { - "version": "0.8.0-beta.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", - "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", - "requires": { - "whatwg-url": "^7.0.0" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - }, - "tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", - "requires": { - "punycode": "^2.1.0" - } - }, - "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" - }, - "whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - } - } - }, - "@next/react-refresh-utils": { - "version": "12.0.7", - "resolved": "https://registry.npmjs.org/@next/react-refresh-utils/-/react-refresh-utils-12.0.7.tgz", - "integrity": "sha512-Pglj1t+7RxH0txEqVcD8ZxrJgqLDmKvQDqxKq3ZPRWxMv7LTl7FVT2Pnb36QFeBwCvMVl67jxsADKsW0idz8sA==", - "requires": {} - }, - "@next/swc-android-arm64": { - "version": "12.0.7", - "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.0.7.tgz", - "integrity": "sha512-yViT7EEc7JqxncRT+ZTeTsrAYXLlcefo0Y0eAfYmmalGD2605L4FWAVrJi4WnrSLji7l+veczw1WBmNeHICKKA==", - "optional": true - }, - "@next/swc-darwin-arm64": { - "version": "12.0.7", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.0.7.tgz", - "integrity": "sha512-vhAyW2rDEUcQesRVaj0z1hSoz7QhDzzGd0V1/5/5i9YJOfOtyrPsVJ82tlf7BfXl6/Ep+eKNfWVIb5/Jv89EKg==", - "optional": true - }, - "@next/swc-darwin-x64": { - "version": "12.0.7", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.0.7.tgz", - "integrity": "sha512-km+6Rx6TvbraoQ1f0MXa69ol/x0RxzucFGa2OgZaYJERas0spy0iwW8hpASsGcf597D8VRW1x+R2C7ZdjVBSTw==", - "optional": true - }, - "@next/swc-linux-arm-gnueabihf": { - "version": "12.0.7", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.0.7.tgz", - "integrity": "sha512-d0zWr877YqZ2cf/DQy6obouaR39r0FPebcXj2nws9AC99m68CO2xVpWv9jT7mFvpY+T40HJisLH80jSZ2iQ9sA==", - "optional": true - }, - "@next/swc-linux-arm64-gnu": { - "version": "12.0.7", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.0.7.tgz", - "integrity": "sha512-fdobh5u6gG13Gd5LkHhJ+W8tF9hbaFolRW99FhzArMe5/nMKlLdBymOxvitE3K4gSFQxbXJA6TbU0Vv0e59Kww==", - "optional": true - }, - "@next/swc-linux-arm64-musl": { - "version": "12.0.7", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.0.7.tgz", - "integrity": "sha512-vx0c5Q3oIScFNT/4jI9rCe0yPzKuCqWOkiO/OOV0ixSI2gLhbrwDIcdkm79fKVn3i8JOJunxE4zDoFeR/g8xqQ==", - "optional": true - }, - "@next/swc-linux-x64-gnu": { - "version": "12.0.7", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.0.7.tgz", - "integrity": "sha512-9ITyp6s6uGVKNx3C/GP7GrYycbcwTADG7TdIXzXUxOOZORrdB1GNg3w/EL3Am4VMPPEpO6v1RfKo2IKZpVKfTA==", - "optional": true - }, - "@next/swc-linux-x64-musl": { - "version": "12.0.7", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.0.7.tgz", - "integrity": "sha512-C+k+cygbIZXYfc+Hx2fNPUBEg7jzio+mniP5ywZevuTXW14zodIfQ3ZMoMJR8EpOVvYpjWFk2uAjiwqgx8vo/g==", - "optional": true - }, - "@next/swc-win32-arm64-msvc": { - "version": "12.0.7", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.0.7.tgz", - "integrity": "sha512-7jTRjOKkDVnb5s7VoHT7eX+eyT/5BQJ/ljP2G56riAgKGqPL63/V7FXemLhhLT67D+OjoP8DRA2E2ne6IPHk4w==", - "optional": true - }, - "@next/swc-win32-ia32-msvc": { - "version": "12.0.7", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.0.7.tgz", - "integrity": "sha512-2u5pGDsk7H6gGxob2ATIojzlwKzgYsrijo7RRpXOiPePVqwPWg6/pmhaJzLdpfjaBgRg1NFmwSp/7Ump9X8Ijg==", - "optional": true - }, - "@next/swc-win32-x64-msvc": { - "version": "12.0.7", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.0.7.tgz", - "integrity": "sha512-frEWtbf+q8Oz4e2UqKJrNssk6DZ6/NLCQXn5/ORWE9dPAfe9XS6aK5FRZ6DuEPmmKd5gOoRkKJFFz5nYd+TeyQ==", - "optional": true - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@rollup/plugin-babel": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.0.tgz", - "integrity": "sha512-9uIC8HZOnVLrLHxayq/PTzw+uS25E14KPUBh5ktF+18Mjo5yK0ToMMx6epY0uEgkjwJw0aBW4x2horYXh8juWw==", - "requires": { - "@babel/helper-module-imports": "^7.10.4", - "@rollup/pluginutils": "^3.1.0" - } - }, - "@rollup/plugin-node-resolve": { - "version": "11.2.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", - "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", - "requires": { - "@rollup/pluginutils": "^3.1.0", - "@types/resolve": "1.17.1", - "builtin-modules": "^3.1.0", - "deepmerge": "^4.2.2", - "is-module": "^1.0.0", - "resolve": "^1.19.0" - } - }, - "@rollup/plugin-replace": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", - "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", - "requires": { - "@rollup/pluginutils": "^3.1.0", - "magic-string": "^0.25.7" - } - }, - "@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", - "requires": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - } - }, - "@sinonjs/commons": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", - "dev": true, - "requires": { - "type-detect": "4.0.8" - }, - "dependencies": { - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - } - } - }, - "@sinonjs/fake-timers": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", - "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.7.0" - } - }, - "@surma/rollup-plugin-off-main-thread": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", - "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", - "requires": { - "ejs": "^3.1.6", - "json5": "^2.2.0", - "magic-string": "^0.25.0", - "string.prototype.matchall": "^4.0.6" - }, - "dependencies": { - "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "requires": { - "minimist": "^1.2.5" - } - } - } - }, - "@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true - }, - "@types/babel__core": { - "version": "7.1.18", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.18.tgz", - "integrity": "sha512-S7unDjm/C7z2A2R9NzfKCK1I+BAALDtxEmsJBwlB3EzNfb929ykjL++1CK9LO++EIp2fQrC8O+BwjKvz6UeDyQ==", - "devOptional": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", - "devOptional": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "devOptional": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", - "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", - "devOptional": true, - "requires": { - "@babel/types": "^7.3.0" - } - }, - "@types/cheerio": { - "version": "0.22.30", - "resolved": "https://registry.npmjs.org/@types/cheerio/-/cheerio-0.22.30.tgz", - "integrity": "sha512-t7ZVArWZlq3dFa9Yt33qFBQIK4CQd1Q3UJp0V+UhP6vgLWLM6Qug7vZuRSGXg45zXeB1Fm5X2vmBkEX58LV2Tw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/enzyme": { - "version": "3.10.11", - "resolved": "https://registry.npmjs.org/@types/enzyme/-/enzyme-3.10.11.tgz", - "integrity": "sha512-LEtC7zXsQlbGXWGcnnmOI7rTyP+i1QzQv4Va91RKXDEukLDaNyxu0rXlfMiGEhJwfgTPCTb0R+Pnlj//oM9e/w==", - "dev": true, - "requires": { - "@types/cheerio": "*", - "@types/react": "*" - } - }, - "@types/eslint": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.2.1.tgz", - "integrity": "sha512-UP9rzNn/XyGwb5RQ2fok+DzcIRIYwc16qTXse5+Smsy8MOIccCChT15KAwnsgQx4PzJkaMq4myFyZ4CL5TjhIQ==", - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "@types/eslint-scope": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.2.tgz", - "integrity": "sha512-TzgYCWoPiTeRg6RQYgtuW7iODtVoKu3RVL72k3WohqhjfaOLK5Mg2T4Tg1o2bSfu0vPkoI48wdQFv5b/Xe04wQ==", - "requires": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==" - }, - "@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", - "requires": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/graceful-fs": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", - "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/hoist-non-react-statics": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", - "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", - "requires": { - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0" - } - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/jest": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.4.0.tgz", - "integrity": "sha512-gHl8XuC1RZ8H2j5sHv/JqsaxXkDDM9iDOgu0Wp8sjs4u/snb2PVehyWXJPr+ORA0RPpgw231mnutWI1+0hgjIQ==", - "dev": true, - "requires": { - "jest-diff": "^27.0.0", - "pretty-format": "^27.0.0" - } - }, - "@types/js-cookie": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/@types/js-cookie/-/js-cookie-2.2.7.tgz", - "integrity": "sha512-aLkWa0C0vO5b4Sr798E26QgOkss68Un0bLjs7u9qxzPT5CG+8DuNTffWES58YzJs3hrVAOs1wonycqEBqNJubA==" - }, - "@types/json-schema": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", - "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==" - }, - "@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", - "dev": true - }, - "@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==" - }, - "@types/node": { - "version": "17.0.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.6.tgz", - "integrity": "sha512-+XBAjfZmmivILUzO0HwBJoYkAyyySSLg5KCGBDFLomJo0sV6szvVLAf4ANZZ0pfWzgEds5KmGLG9D5hfEqOhaA==" - }, - "@types/prettier": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.2.tgz", - "integrity": "sha512-ekoj4qOQYp7CvjX8ZDBgN86w3MqQhLE1hczEJbEIjgFEumDy+na/4AJAbLXfgEWFNB2pKadM5rPFtuSGMWK7xA==", - "dev": true - }, - "@types/prop-types": { - "version": "15.7.4", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.4.tgz", - "integrity": "sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==" - }, - "@types/react": { - "version": "17.0.38", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.38.tgz", - "integrity": "sha512-SI92X1IA+FMnP3qM5m4QReluXzhcmovhZnLNm3pyeQlooi02qI7sLiepEYqT678uNiyc25XfCqxREFpy3W7YhQ==", - "requires": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "@types/react-dom": { - "version": "17.0.11", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.11.tgz", - "integrity": "sha512-f96K3k+24RaLGVu/Y2Ng3e1EbZ8/cVJvypZWd7cy0ofCBaf2lcM46xNhycMZ2xGwbBjRql7hOlZ+e2WlJ5MH3Q==", - "requires": { - "@types/react": "*" - } - }, - "@types/react-helmet": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/@types/react-helmet/-/react-helmet-6.1.5.tgz", - "integrity": "sha512-/ICuy7OHZxR0YCAZLNg9r7I9aijWUWvxaPR6uTuyxe8tAj5RL4Sw1+R6NhXUtOsarkGYPmaHdBDvuXh2DIN/uA==", - "dev": true, - "requires": { - "@types/react": "*" - } - }, - "@types/resolve": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", - "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", - "requires": { - "@types/node": "*" - } - }, - "@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" - }, - "@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true - }, - "@types/styled-components": { - "version": "5.1.19", - "resolved": "https://registry.npmjs.org/@types/styled-components/-/styled-components-5.1.19.tgz", - "integrity": "sha512-hNj14Oamk7Jhb/fMMQG7TUkd3e8uMMgxsCTH+ueJNGdFo/PuhlGDQTPChqyilpZP0WttgBHkc2YyT5UG+yc6Yw==", - "requires": { - "@types/hoist-non-react-statics": "*", - "@types/react": "*", - "csstype": "^3.0.2" - } - }, - "@types/trusted-types": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.2.tgz", - "integrity": "sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==" - }, - "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "20.2.1", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", - "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", - "dev": true - }, - "@typescript-eslint/eslint-plugin": { - "version": "5.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.8.1.tgz", - "integrity": "sha512-wTZ5oEKrKj/8/366qTM366zqhIKAp6NCMweoRONtfuC07OAU9nVI2GZZdqQ1qD30WAAtcPdkH+npDwtRFdp4Rw==", - "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "5.8.1", - "@typescript-eslint/scope-manager": "5.8.1", - "debug": "^4.3.2", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", - "regexpp": "^3.2.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/experimental-utils": { - "version": "5.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.8.1.tgz", - "integrity": "sha512-fbodVnjIDU4JpeXWRDsG5IfIjYBxEvs8EBO8W1+YVdtrc2B9ppfof5sZhVEDOtgTfFHnYQJDI8+qdqLYO4ceww==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.8.1", - "@typescript-eslint/types": "5.8.1", - "@typescript-eslint/typescript-estree": "5.8.1", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - } - }, - "@typescript-eslint/parser": { - "version": "5.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.8.1.tgz", - "integrity": "sha512-K1giKHAjHuyB421SoXMXFHHVI4NdNY603uKw92++D3qyxSeYvC10CBJ/GE5Thpo4WTUvu1mmJI2/FFkz38F2Gw==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.8.1", - "@typescript-eslint/types": "5.8.1", - "@typescript-eslint/typescript-estree": "5.8.1", - "debug": "^4.3.2" - } - }, - "@typescript-eslint/scope-manager": { - "version": "5.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.8.1.tgz", - "integrity": "sha512-DGxJkNyYruFH3NIZc3PwrzwOQAg7vvgsHsHCILOLvUpupgkwDZdNq/cXU3BjF4LNrCsVg0qxEyWasys5AiJ85Q==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.8.1", - "@typescript-eslint/visitor-keys": "5.8.1" - } - }, - "@typescript-eslint/types": { - "version": "5.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.8.1.tgz", - "integrity": "sha512-L/FlWCCgnjKOLefdok90/pqInkomLnAcF9UAzNr+DSqMC3IffzumHTQTrINXhP1gVp9zlHiYYjvozVZDPleLcA==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "5.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.8.1.tgz", - "integrity": "sha512-26lQ8l8tTbG7ri7xEcCFT9ijU5Fk+sx/KRRyyzCv7MQ+rZZlqiDPtMKWLC8P7o+dtCnby4c+OlxuX1tp8WfafQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.8.1", - "@typescript-eslint/visitor-keys": "5.8.1", - "debug": "^4.3.2", - "globby": "^11.0.4", - "is-glob": "^4.0.3", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.8.1.tgz", - "integrity": "sha512-SWgiWIwocK6NralrJarPZlWdr0hZnj5GXHIgfdm8hNkyKvpeQuFyLP6YjSIe9kf3YBIfU6OHSZLYkQ+smZwtNg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.8.1", - "eslint-visitor-keys": "^3.0.0" - } - }, - "@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "requires": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" - }, - "@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==" - }, - "@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==" - }, - "@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" - }, - "@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "@wojtekmaj/enzyme-adapter-react-17": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/@wojtekmaj/enzyme-adapter-react-17/-/enzyme-adapter-react-17-0.6.6.tgz", - "integrity": "sha512-gSfhg8CiL0Vwc2UgUblGVZIy7M0KyXaZsd8+QwzV8TSVRLkGyzdLtYEcs9wRWyQTsdmOd+oRGqbVgUX7AVJxug==", - "dev": true, - "requires": { - "@wojtekmaj/enzyme-adapter-utils": "^0.1.2", - "enzyme-shallow-equal": "^1.0.0", - "has": "^1.0.0", - "prop-types": "^15.7.0", - "react-is": "^17.0.0", - "react-test-renderer": "^17.0.0" - }, - "dependencies": { - "react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true - } - } - }, - "@wojtekmaj/enzyme-adapter-utils": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@wojtekmaj/enzyme-adapter-utils/-/enzyme-adapter-utils-0.1.2.tgz", - "integrity": "sha512-MM/DqDqvxNVlWLqSVQiUbRN9MuDLJfefmPbJ8ZKdmdf5ID8G+i42XhFpoQh5bAZUCdwzRae3+WSZl2lXcFOrhw==", - "dev": true, - "requires": { - "function.prototype.name": "^1.1.0", - "has": "^1.0.0", - "object.fromentries": "^2.0.0", - "prop-types": "^15.7.0" - } - }, - "@xobotyi/scrollbar-width": { - "version": "1.9.5", - "resolved": "https://registry.npmjs.org/@xobotyi/scrollbar-width/-/scrollbar-width-1.9.5.tgz", - "integrity": "sha512-N8tkAACJx2ww8vFMneJmaAgmjAG1tnVBZJRLRcx061tmsLRZHSEZSLuGWnwPtunsSLvSqXQ2wfp7Mgqg1I+2dQ==" - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" - }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" - }, - "abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", - "dev": true - }, - "acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==" - }, - "acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dev": true, - "requires": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - }, - "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - } - } - }, - "acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "requires": {} - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "requires": {} - }, - "acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "requires": { - "debug": "4" - } - }, - "airbnb-prop-types": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/airbnb-prop-types/-/airbnb-prop-types-2.16.0.tgz", - "integrity": "sha512-7WHOFolP/6cS96PhKNrslCLMYAI8yB1Pp6u6XmxozQOiZbsI5ycglZr5cHhBFfuRcQQjzCMith5ZPZdYiJCxUg==", - "dev": true, - "requires": { - "array.prototype.find": "^2.1.1", - "function.prototype.name": "^1.1.2", - "is-regex": "^1.1.0", - "object-is": "^1.1.2", - "object.assign": "^4.1.0", - "object.entries": "^1.1.2", - "prop-types": "^15.7.2", - "prop-types-exact": "^1.2.0", - "react-is": "^16.13.1" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "requires": {} - }, - "anser": { - "version": "1.4.9", - "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.9.tgz", - "integrity": "sha512-AI+BjTeGt2+WFk4eWcqbQ7snZpDBt8SaLlj0RT2h5xfdWaiy51OjYvqwMrNzJLGy8iOAL6nKDITWO+rd4MkYEA==" - }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - } - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "aria-query": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.10.2", - "@babel/runtime-corejs3": "^7.10.2" - } - }, - "array-includes": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", - "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.7" - } - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" - }, - "array.prototype.filter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array.prototype.filter/-/array.prototype.filter-1.0.1.tgz", - "integrity": "sha512-Dk3Ty7N42Odk7PjU/Ci3zT4pLj20YvuVnneG/58ICM6bt4Ij5kZaJTVQ9TSaWaIECX2sFyz4KItkVZqHNnciqw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.7" - } - }, - "array.prototype.find": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.1.2.tgz", - "integrity": "sha512-00S1O4ewO95OmmJW7EesWfQlrCrLEL8kZ40w3+GkLX2yTt0m2ggcePPa2uHPJ9KUmJvwRq+lCV9bD8Yim23x/Q==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0" - } - }, - "array.prototype.flat": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", - "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0" - } - }, - "array.prototype.flatmap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.5.tgz", - "integrity": "sha512-08u6rVyi1Lj7oqWbS9nUxliETrtIROT4XGTA4D/LWGten6E3ocm7cy9SIrmNHOL5XVbVuckUp3X6Xyg8/zpvHA==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0" - } - }, - "asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "assert": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", - "integrity": "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==", - "requires": { - "es6-object-assign": "^1.1.0", - "is-nan": "^1.2.1", - "object-is": "^1.0.1", - "util": "^0.12.0" - } - }, - "ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=", - "dev": true - }, - "async": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", - "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=" - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" - }, - "available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" - }, - "axe-core": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.3.5.tgz", - "integrity": "sha512-WKTW1+xAzhMS5dJsxWkliixlO/PqC4VhmO9T4juNYcaTg9jzWiJsou6m5pxWYGfigWbwzJWeFY6z47a+4neRXA==", - "dev": true - }, - "axios": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", - "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", - "requires": { - "follow-redirects": "^1.14.9", - "form-data": "^4.0.0" - }, - "dependencies": { - "form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - } - } - }, - "axobject-query": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", - "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", - "dev": true - }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - } - }, - "babel-core": { - "version": "6.26.3", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", - "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", - "dev": true, - "requires": { - "babel-code-frame": "^6.26.0", - "babel-generator": "^6.26.0", - "babel-helpers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-register": "^6.26.0", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "convert-source-map": "^1.5.1", - "debug": "^2.6.9", - "json5": "^0.5.1", - "lodash": "^4.17.4", - "minimatch": "^3.0.4", - "path-is-absolute": "^1.0.1", - "private": "^0.1.8", - "slash": "^1.0.0", - "source-map": "^0.5.7" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "babel-eslint": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", - "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.0", - "@babel/traverse": "^7.7.0", - "@babel/types": "^7.7.0", - "eslint-visitor-keys": "^1.0.0", - "resolve": "^1.12.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } - } - }, - "babel-generator": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", - "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", - "dev": true, - "requires": { - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "detect-indent": "^4.0.0", - "jsesc": "^1.3.0", - "lodash": "^4.17.4", - "source-map": "^0.5.7", - "trim-right": "^1.0.1" - }, - "dependencies": { - "jsesc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", - "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", - "dev": true - } - } - }, - "babel-helpers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", - "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-jest": { - "version": "27.4.5", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.4.5.tgz", - "integrity": "sha512-3uuUTjXbgtODmSv/DXO9nZfD52IyC2OYTFaXGRzL0kpykzroaquCrD5+lZNafTvZlnNqZHt5pb0M08qVBZnsnA==", - "dev": true, - "requires": { - "@jest/transform": "^27.4.5", - "@jest/types": "^27.4.2", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^27.4.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "slash": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "babel-loader": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.3.tgz", - "integrity": "sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw==", - "requires": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^1.4.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - } - }, - "babel-messages": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "requires": { - "object.assign": "^4.1.0" - } - }, - "babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - } - }, - "babel-plugin-jest-hoist": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.4.0.tgz", - "integrity": "sha512-Jcu7qS4OX5kTWBc45Hz7BMmgXuJqRnhatqpUhnzGC3OBYpOmf2tv6jFNwZpwM7wU7MUuv2r9IPS/ZlYOuburVw==", - "dev": true, - "requires": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" - } - }, - "babel-plugin-polyfill-corejs2": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.0.tgz", - "integrity": "sha512-wMDoBJ6uG4u4PNFh72Ty6t3EgfA91puCuAwKIazbQlci+ENb/UU9A3xG5lutjUIiXCIn1CY5L15r9LimiJyrSA==", - "requires": { - "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.3.0", - "semver": "^6.1.1" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.4.0.tgz", - "integrity": "sha512-YxFreYwUfglYKdLUGvIF2nJEsGwj+RhWSX/ije3D2vQPOXuyMLMtg/cCGMDpOA7Nd+MwlNdnGODbd2EwUZPlsw==", - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.0", - "core-js-compat": "^3.18.0" - } - }, - "babel-plugin-polyfill-regenerator": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.0.tgz", - "integrity": "sha512-dhAPTDLGoMW5/84wkgwiLRwMnio2i1fUe53EuvtKMv0pn2p3S8OCoV1xAzfJPl0KOX7IB89s2ib85vbYiea3jg==", - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.0" - } - }, - "babel-plugin-styled-components": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-2.0.2.tgz", - "integrity": "sha512-7eG5NE8rChnNTDxa6LQfynwgHTVOYYaHJbUYSlOhk8QBXIQiMBKq4gyfHBBKPrxUcVBXVJL61ihduCpCQbuNbw==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.0", - "@babel/helper-module-imports": "^7.16.0", - "babel-plugin-syntax-jsx": "^6.18.0", - "lodash": "^4.17.11" - } - }, - "babel-plugin-syntax-jsx": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", - "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=" - }, - "babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "requires": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - } - }, - "babel-preset-jest": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.4.0.tgz", - "integrity": "sha512-NK4jGYpnBvNxcGo7/ZpZJr51jCGT+3bwwpVIDY2oNfTxJJldRtB4VAcYdgp1loDE50ODuTu+yBjpMAswv5tlpg==", - "dev": true, - "requires": { - "babel-plugin-jest-hoist": "^27.4.0", - "babel-preset-current-node-syntax": "^1.0.0" - } - }, - "babel-register": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", - "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", - "dev": true, - "requires": { - "babel-core": "^6.26.0", - "babel-runtime": "^6.26.0", - "core-js": "^2.5.0", - "home-or-tmp": "^2.0.0", - "lodash": "^4.17.4", - "mkdirp": "^0.5.1", - "source-map-support": "^0.4.15" - } - }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, - "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - } - }, - "babel-template": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", - "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "lodash": "^4.17.4" - } - }, - "babel-traverse": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", - "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", - "dev": true, - "requires": { - "babel-code-frame": "^6.26.0", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "debug": "^2.6.8", - "globals": "^9.18.0", - "invariant": "^2.2.2", - "lodash": "^4.17.4" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" - }, - "dependencies": { - "to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", - "dev": true - } - } - }, - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "base64-arraybuffer": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.2.0.tgz", - "integrity": "sha512-7emyCsu1/xiBXgQZrscw/8KPRT44I4Yq9Pe6EGs3aPRTsWuggML1/1DTuZUuIaJPIm1FTDUVXl4x/yW8s0kQDQ==" - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" - }, - "bn.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" - }, - "browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "browserify-rsa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", - "requires": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - } - }, - "browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", - "requires": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } - } - }, - "browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "requires": { - "pako": "~1.0.5" - } - }, - "browserslist": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", - "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", - "requires": { - "caniuse-lite": "^1.0.30001286", - "electron-to-chromium": "^1.4.17", - "escalade": "^3.1.1", - "node-releases": "^2.0.1", - "picocolors": "^1.0.0" - } - }, - "bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", - "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" - }, - "builtin-modules": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", - "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==" - }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" - }, - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "camelize": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz", - "integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs=" - }, - "caniuse-lite": { - "version": "1.0.30001294", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001294.tgz", - "integrity": "sha512-LiMlrs1nSKZ8qkNhpUf5KD0Al1KCBE3zaT7OLOwEkagXMEDij98SiOovn9wxVGQpklk9vVC/pUSqgYmkmKOS8g==" - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true - }, - "cheerio": { - "version": "1.0.0-rc.10", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz", - "integrity": "sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==", - "dev": true, - "requires": { - "cheerio-select": "^1.5.0", - "dom-serializer": "^1.3.2", - "domhandler": "^4.2.0", - "htmlparser2": "^6.1.0", - "parse5": "^6.0.1", - "parse5-htmlparser2-tree-adapter": "^6.0.1", - "tslib": "^2.2.0" - } - }, - "cheerio-select": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.5.0.tgz", - "integrity": "sha512-qocaHPv5ypefh6YNxvnbABM07KMxExbtbfuJoIie3iZXX1ERwYmJcIiRrr9H05ucQP1k28dav8rpdDgjQd8drg==", - "dev": true, - "requires": { - "css-select": "^4.1.3", - "css-what": "^5.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0", - "domutils": "^2.7.0" - } - }, - "chokidar": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", - "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.3.1", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "requires": { - "is-glob": "^4.0.1" - } - } - } - }, - "chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==" - }, - "ci-info": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", - "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", - "dev": true - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "cjs-module-lexer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", - "dev": true - }, - "classnames": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz", - "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==" - }, - "clean-webpack-plugin": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-4.0.0.tgz", - "integrity": "sha512-WuWE1nyTNAyW5T7oNyys2EN0cfP2fdRxhxnIQWiAp0bMabPdHhoGxM8A6YL2GhqwgrPnnaemVE7nv5XJ2Fhh2w==", - "requires": { - "del": "^4.1.1" - } - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "colorette": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", - "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==" - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "common-tags": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", - "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==" - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "confusing-browser-globals": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", - "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", - "dev": true - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" - }, - "convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "copy-to-clipboard": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz", - "integrity": "sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw==", - "requires": { - "toggle-selection": "^1.0.6" - } - }, - "core-js": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", - "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", - "dev": true - }, - "core-js-compat": { - "version": "3.20.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.20.1.tgz", - "integrity": "sha512-AVhKZNpqMV3Jz8hU0YEXXE06qoxtQGsAqU0u1neUngz5IusDJRX/ZJ6t3i7mS7QxNyEONbCo14GprkBrxPlTZA==", - "requires": { - "browserslist": "^4.19.1", - "semver": "7.0.0" - }, - "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" - } - } - }, - "core-js-pure": { - "version": "3.20.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.20.1.tgz", - "integrity": "sha512-yeNNr3L9cEBwNy6vhhIJ0nko7fE7uFO6PgawcacGt2VWep4WqQx0RiqlkgSP7kqUMC1IKdfO9qPeWXcUheHLVQ==", - "dev": true - }, - "create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - } - }, - "crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" - }, - "css-color-keywords": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", - "integrity": "sha1-/qJhbcZ2spYmhrOvjb2+GAskTgU=" - }, - "css-in-js-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/css-in-js-utils/-/css-in-js-utils-2.0.1.tgz", - "integrity": "sha512-PJF0SpJT+WdbVVt0AOYp9C8GnuruRlL/UFW7932nLWmFLQTaWEzTBQEx7/hn4BuV+WON75iAViSUJLiU3PKbpA==", - "requires": { - "hyphenate-style-name": "^1.0.2", - "isobject": "^3.0.1" - } - }, - "css-select": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.1.tgz", - "integrity": "sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^5.1.0", - "domhandler": "^4.3.0", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - } - }, - "css-to-react-native": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.0.0.tgz", - "integrity": "sha512-Ro1yETZA813eoyUp2GDBhG2j+YggidUmzO1/v9eYBKR2EHVEniE2MI/NqpTQ954BMpTPZFsGNPm46qFB9dpaPQ==", - "requires": { - "camelize": "^1.0.0", - "css-color-keywords": "^1.0.0", - "postcss-value-parser": "^4.0.2" - } - }, - "css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "requires": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "css-what": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", - "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", - "dev": true - }, - "css.escape": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", - "integrity": "sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s=" - }, - "cssnano-preset-simple": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssnano-preset-simple/-/cssnano-preset-simple-3.0.0.tgz", - "integrity": "sha512-vxQPeoMRqUT3c/9f0vWeVa2nKQIHFpogtoBvFdW4GQ3IvEJ6uauCP6p3Y5zQDLFcI7/+40FTgX12o7XUL0Ko+w==", - "requires": { - "caniuse-lite": "^1.0.30001202" - } - }, - "cssnano-simple": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssnano-simple/-/cssnano-simple-3.0.0.tgz", - "integrity": "sha512-oU3ueli5Dtwgh0DyeohcIEE00QVfbPR3HzyXdAl89SfnQG3y0/qcpfLVW+jPIh3/rgMZGwuW96rejZGaYE9eUg==", - "requires": { - "cssnano-preset-simple": "^3.0.0" - } - }, - "cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true - }, - "cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dev": true, - "requires": { - "cssom": "~0.3.6" - }, - "dependencies": { - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - } - } - }, - "csstype": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.10.tgz", - "integrity": "sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA==" - }, - "damerau-levenshtein": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.7.tgz", - "integrity": "sha512-VvdQIPGdWP0SqFXghj79Wf/5LArmreyMsGLa6FG6iC4t3j7j5s71TrwWmT/4akbDQIqjfACkLZmjXhA7g2oUZw==", - "dev": true - }, - "data-uri-to-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz", - "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==" - }, - "data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "dev": true, - "requires": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - } - }, - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "requires": { - "ms": "2.1.2" - } - }, - "decimal.js": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", - "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", - "dev": true - }, - "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", - "dev": true - }, - "deep-eql": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-2.0.2.tgz", - "integrity": "sha1-sbrAblbwp2d3aG1Qyf63XC7XZ5o=", - "dev": true, - "requires": { - "type-detect": "^3.0.0" - } - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "requires": { - "object-keys": "^1.0.12" - } - }, - "del": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", - "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", - "requires": { - "@types/glob": "^7.1.1", - "globby": "^6.1.0", - "is-path-cwd": "^2.0.0", - "is-path-in-cwd": "^2.0.0", - "p-map": "^2.0.0", - "pify": "^4.0.1", - "rimraf": "^2.6.3" - }, - "dependencies": { - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "requires": { - "array-uniq": "^1.0.1" - } - }, - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - } - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - }, - "des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "detect-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", - "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", - "dev": true, - "requires": { - "repeating": "^2.0.0" - } - }, - "detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true - }, - "diff-sequences": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.4.0.tgz", - "integrity": "sha512-YqiQzkrsmHMH5uuh8OdQFU9/ZpADnwzml8z0O5HvRNda+5UZsaX/xN+AAxfR2hWq1Y7HZnAzO9J5lJXOuDz2Ww==", - "dev": true - }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "requires": { - "path-type": "^4.0.0" - } - }, - "discontinuous-range": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz", - "integrity": "sha1-44Mx8IRLukm5qctxx3FYWqsbxlo=", - "dev": true - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "dom-serializer": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", - "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - } - }, - "domain-browser": { - "version": "4.19.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-4.19.0.tgz", - "integrity": "sha512-fRA+BaAWOR/yr/t7T9E9GJztHPeFjj8U35ajyAjCDtAAnTn1Rc1f6W6VGPJrO1tkQv9zWu+JRof7z6oQtiYVFQ==" - }, - "domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", - "dev": true - }, - "domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "dev": true, - "requires": { - "webidl-conversions": "^5.0.0" - }, - "dependencies": { - "webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "dev": true - } - } - }, - "domhandler": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", - "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", - "dev": true, - "requires": { - "domelementtype": "^2.2.0" - } - }, - "domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dev": true, - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - } - }, - "ejs": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.6.tgz", - "integrity": "sha512-9lt9Zse4hPucPkoP7FHDF0LQAlGyF9JVpnClFLFH3aSSbxmyoqINRpp/9wePWJTUl4KOQwRL72Iw3InHPDkoGw==", - "requires": { - "jake": "^10.6.1" - } - }, - "electron-to-chromium": { - "version": "1.4.31", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.31.tgz", - "integrity": "sha512-t3XVQtk+Frkv6aTD4RRk0OqosU+VLe1dQFW83MDer78ZD6a52frgXuYOIsLYTQiH2Lm+JB2OKYcn7zrX+YGAiQ==" - }, - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "emittery": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", - "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", - "dev": true - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" - }, - "encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "requires": { - "iconv-lite": "^0.6.2" - } - }, - "enhanced-resolve": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz", - "integrity": "sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA==", - "requires": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - } - }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - } - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true - }, - "enzyme": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/enzyme/-/enzyme-3.11.0.tgz", - "integrity": "sha512-Dw8/Gs4vRjxY6/6i9wU0V+utmQO9kvh9XLnz3LIudviOnVYDEe2ec+0k+NQoMamn1VrjKgCUOWj5jG/5M5M0Qw==", - "dev": true, - "requires": { - "array.prototype.flat": "^1.2.3", - "cheerio": "^1.0.0-rc.3", - "enzyme-shallow-equal": "^1.0.1", - "function.prototype.name": "^1.1.2", - "has": "^1.0.3", - "html-element-map": "^1.2.0", - "is-boolean-object": "^1.0.1", - "is-callable": "^1.1.5", - "is-number-object": "^1.0.4", - "is-regex": "^1.0.5", - "is-string": "^1.0.5", - "is-subset": "^0.1.1", - "lodash.escape": "^4.0.1", - "lodash.isequal": "^4.5.0", - "object-inspect": "^1.7.0", - "object-is": "^1.0.2", - "object.assign": "^4.1.0", - "object.entries": "^1.1.1", - "object.values": "^1.1.1", - "raf": "^3.4.1", - "rst-selector-parser": "^2.2.3", - "string.prototype.trim": "^1.2.1" - } - }, - "enzyme-adapter-react-16": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.15.6.tgz", - "integrity": "sha512-yFlVJCXh8T+mcQo8M6my9sPgeGzj85HSHi6Apgf1Cvq/7EL/J9+1JoJmJsRxZgyTvPMAqOEpRSu/Ii/ZpyOk0g==", - "dev": true, - "requires": { - "enzyme-adapter-utils": "^1.14.0", - "enzyme-shallow-equal": "^1.0.4", - "has": "^1.0.3", - "object.assign": "^4.1.2", - "object.values": "^1.1.2", - "prop-types": "^15.7.2", - "react-is": "^16.13.1", - "react-test-renderer": "^16.0.0-0", - "semver": "^5.7.0" - }, - "dependencies": { - "react-test-renderer": { - "version": "16.14.0", - "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.14.0.tgz", - "integrity": "sha512-L8yPjqPE5CZO6rKsKXRO/rVPiaCOy0tQQJbC+UjPNlobl5mad59lvPjwFsQHTvL03caVDIVr9x9/OSgDe6I5Eg==", - "dev": true, - "requires": { - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "react-is": "^16.8.6", - "scheduler": "^0.19.1" - } - }, - "scheduler": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", - "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", - "dev": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "enzyme-adapter-utils": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/enzyme-adapter-utils/-/enzyme-adapter-utils-1.14.0.tgz", - "integrity": "sha512-F/z/7SeLt+reKFcb7597IThpDp0bmzcH1E9Oabqv+o01cID2/YInlqHbFl7HzWBl4h3OdZYedtwNDOmSKkk0bg==", - "dev": true, - "requires": { - "airbnb-prop-types": "^2.16.0", - "function.prototype.name": "^1.1.3", - "has": "^1.0.3", - "object.assign": "^4.1.2", - "object.fromentries": "^2.0.3", - "prop-types": "^15.7.2", - "semver": "^5.7.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "enzyme-shallow-equal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.4.tgz", - "integrity": "sha512-MttIwB8kKxypwHvRynuC3ahyNc+cFbR8mjVIltnmzQ0uKGqmsfO4bfBuLxb0beLNPhjblUEYvEbsg+VSygvF1Q==", - "dev": true, - "requires": { - "has": "^1.0.3", - "object-is": "^1.1.2" - } - }, - "error-stack-parser": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.6.tgz", - "integrity": "sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==", - "requires": { - "stackframe": "^1.1.1" - } - }, - "es-abstract": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", - "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.1", - "is-string": "^1.0.7", - "is-weakref": "^1.0.1", - "object-inspect": "^1.11.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - } - }, - "es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", - "dev": true - }, - "es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es6-object-assign": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", - "integrity": "sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw=" - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", - "dev": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - }, - "dependencies": { - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - } - } - }, - "eslint": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.6.0.tgz", - "integrity": "sha512-UvxdOJ7mXFlw7iuHZA4jmzPaUqIw54mZrv+XPYKNbKdLR0et4rf60lIZUU9kiNtnzzMzGWxMV+tQ7uG7JG8DPw==", - "dev": true, - "requires": { - "@eslint/eslintrc": "^1.0.5", - "@humanwhocodes/config-array": "^0.9.2", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.0", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.1.0", - "espree": "^9.3.0", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.2.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "eslint-scope": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", - "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "globals": { - "version": "13.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", - "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - } - } - }, - "eslint-config-airbnb": { - "version": "19.0.4", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-19.0.4.tgz", - "integrity": "sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew==", - "dev": true, - "requires": { - "eslint-config-airbnb-base": "^15.0.0", - "object.assign": "^4.1.2", - "object.entries": "^1.1.5" - } - }, - "eslint-config-airbnb-base": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", - "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", - "dev": true, - "requires": { - "confusing-browser-globals": "^1.0.10", - "object.assign": "^4.1.2", - "object.entries": "^1.1.5", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "eslint-config-prettier": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", - "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", - "dev": true, - "requires": {} - }, - "eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", - "dev": true, - "requires": { - "debug": "^3.2.7", - "resolve": "^1.20.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "eslint-module-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.1.tgz", - "integrity": "sha512-fjoetBXQZq2tSTWZ9yWVl2KuFrTZZH3V+9iD1V1RfpDgxzJR+mPd/KZmMiA8gbPqdBzpNiEHOuT7IYEWxrH0zQ==", - "dev": true, - "requires": { - "debug": "^3.2.7", - "find-up": "^2.1.0", - "pkg-dir": "^2.0.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } - } - }, - "eslint-plugin-babel": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-babel/-/eslint-plugin-babel-5.3.1.tgz", - "integrity": "sha512-VsQEr6NH3dj664+EyxJwO4FCYm/00JhYb3Sk3ft8o+fpKuIfQ9TaW6uVUfvwMXHcf/lsnRIoyFPsLMyiWCSL/g==", - "dev": true, - "requires": { - "eslint-rule-composer": "^0.3.0" - } - }, - "eslint-plugin-import": { - "version": "2.25.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.3.tgz", - "integrity": "sha512-RzAVbby+72IB3iOEL8clzPLzL3wpDrlwjsTBAQXgyp5SeTqqY+0bFubwuo+y/HLhNZcXV4XqTBO4LGsfyHIDXg==", - "dev": true, - "requires": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.1", - "has": "^1.0.3", - "is-core-module": "^2.8.0", - "is-glob": "^4.0.3", - "minimatch": "^3.0.4", - "object.values": "^1.1.5", - "resolve": "^1.20.0", - "tsconfig-paths": "^3.11.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "eslint-plugin-jsx-a11y": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.5.1.tgz", - "integrity": "sha512-sVCFKX9fllURnXT2JwLN5Qgo24Ug5NF6dxhkmxsMEUZhXRcGg+X3e1JbJ84YePQKBl5E0ZjAH5Q4rkdcGY99+g==", - "dev": true, - "requires": { - "@babel/runtime": "^7.16.3", - "aria-query": "^4.2.2", - "array-includes": "^3.1.4", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.3.5", - "axobject-query": "^2.2.0", - "damerau-levenshtein": "^1.0.7", - "emoji-regex": "^9.2.2", - "has": "^1.0.3", - "jsx-ast-utils": "^3.2.1", - "language-tags": "^1.0.5", - "minimatch": "^3.0.4" - } - }, - "eslint-plugin-react": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.28.0.tgz", - "integrity": "sha512-IOlFIRHzWfEQQKcAD4iyYDndHwTQiCMcJVJjxempf203jnNLUnW34AXLrV33+nEXoifJE2ZEGmcjKPL8957eSw==", - "dev": true, - "requires": { - "array-includes": "^3.1.4", - "array.prototype.flatmap": "^1.2.5", - "doctrine": "^2.1.0", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.0.4", - "object.entries": "^1.1.5", - "object.fromentries": "^2.0.5", - "object.hasown": "^1.1.0", - "object.values": "^1.1.5", - "prop-types": "^15.7.2", - "resolve": "^2.0.0-next.3", - "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.6" - }, - "dependencies": { - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "resolve": { - "version": "2.0.0-next.3", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", - "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "eslint-rule-composer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz", - "integrity": "sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==", - "dev": true - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "dependencies": { - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" - } - } - }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - } - } - }, - "eslint-visitor-keys": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz", - "integrity": "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==", - "dev": true - }, - "espree": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.0.tgz", - "integrity": "sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==", - "dev": true, - "requires": { - "acorn": "^8.7.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^3.1.0" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "requires": { - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" - }, - "estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==" - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true - }, - "expect": { - "version": "27.4.2", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.4.2.tgz", - "integrity": "sha512-BjAXIDC6ZOW+WBFNg96J22D27Nq5ohn+oGcuP2rtOtcjuxNoV9McpQ60PcQWhdFOSBIQdR72e+4HdnbZTFSTyg==", - "dev": true, - "requires": { - "@jest/types": "^27.4.2", - "ansi-styles": "^5.0.0", - "jest-get-type": "^27.4.0", - "jest-matcher-utils": "^27.4.2", - "jest-message-util": "^27.4.2", - "jest-regex-util": "^27.4.0" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - } - } - }, - "expect-enzyme": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/expect-enzyme/-/expect-enzyme-1.3.0.tgz", - "integrity": "sha512-bV+xqYOC4Hm4LfFJDLKcs8fIH5jb4UZJCUXP2t2bixHuOXPJPwVw4I67u6YvlZUDiLmCSi7rVo1x/fjLLfUDAw==", - "dev": true, - "requires": { - "deep-eql": "^2.0.2", - "react-display-name": "^0.2.0", - "stringify-object": "^3.2.0" - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "requires": { - "is-glob": "^4.0.1" - } - } - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fast-shallow-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-shallow-equal/-/fast-shallow-equal-1.0.0.tgz", - "integrity": "sha512-HPtaa38cPgWvaCFmRNhlc6NG7pv6NUHqjPgVAkWGoB9mQMwYB27/K0CvOM5Czy+qpT3e8XJ6Q4aPAnzpNpzNaw==" - }, - "fastest-stable-stringify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fastest-stable-stringify/-/fastest-stable-stringify-2.0.2.tgz", - "integrity": "sha512-bijHueCGd0LqqNK9b5oCMHc0MluJAx0cwqASgbWMvkO01lCYgIhacVRLcaDz3QnyYIRNJRDwMb41VuT6pHJ91Q==" - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "requires": { - "reusify": "^1.0.4" - } - }, - "fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", - "dev": true, - "requires": { - "bser": "2.1.1" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "filelist": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.2.tgz", - "integrity": "sha512-z7O0IS8Plc39rTCq6i6iHxk43duYOn8uFJiWSewIq0Bww1RNybVHSCjahmcC87ZqAm4OTvFzlzeGu3XAzG1ctQ==", - "requires": { - "minimatch": "^3.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", - "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "dependencies": { - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "requires": { - "find-up": "^4.0.0" - } - } - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", - "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", - "dev": true - }, - "follow-redirects": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", - "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==" - }, - "foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" - }, - "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "dependencies": { - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" - } - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - } - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "functions-have-names": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.2.tgz", - "integrity": "sha512-bLgc3asbWdwPbx2mNk2S49kmJCuQeu0nfmaOgbs8WIyzzkw3r4htszdIi9Q9EMezDPTYuJx2wvjZ/EwgAthpnA==", - "dev": true - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "get-orientation": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-orientation/-/get-orientation-1.1.2.tgz", - "integrity": "sha512-/pViTfifW+gBbh/RnlFYHINvELT9Znt+SYyDKAUL6uV6By019AK/s+i9XP4jSwq7lwP38Fd8HVeTxym3+hkwmQ==", - "requires": { - "stream-parser": "^0.3.1" - } - }, - "get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" - }, - "get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" - }, - "globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" - }, - "dependencies": { - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" - } - } - }, - "graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" - }, - "harmony-reflect": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", - "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "requires": { - "has-symbols": "^1.0.2" - } - }, - "hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "requires": { - "react-is": "^16.7.0" - } - }, - "home-or-tmp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", - "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", - "dev": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.1" - } - }, - "html-element-map": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/html-element-map/-/html-element-map-1.3.1.tgz", - "integrity": "sha512-6XMlxrAFX4UEEGxctfFnmrFaaZFNf9i5fNuV5wZ3WWQ4FVaNP1aX1LkX9j2mfEx1NpjeE/rL3nmgEn23GdFmrg==", - "dev": true, - "requires": { - "array.prototype.filter": "^1.0.0", - "call-bind": "^1.0.2" - } - }, - "html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", - "dev": true, - "requires": { - "whatwg-encoding": "^1.0.5" - } - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "http-errors": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", - "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - } - }, - "http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - } - }, - "https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" - }, - "https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true - }, - "hyphenate-style-name": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz", - "integrity": "sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==" - }, - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - }, - "idb": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/idb/-/idb-6.1.5.tgz", - "integrity": "sha512-IJtugpKkiVXQn5Y+LteyBCNk1N8xpGV3wWZk9EVtZWH8DYkjBn0bX1XnGP9RkyZF0sAcywa6unHqSWKe7q4LGw==" - }, - "identity-obj-proxy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", - "integrity": "sha1-lNK9qWCERT7zb7xarsN+D3nx/BQ=", - "dev": true, - "requires": { - "harmony-reflect": "^1.4.6" - } - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" - }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==" - }, - "image-size": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.0.tgz", - "integrity": "sha512-JLJ6OwBfO1KcA+TvJT+v8gbE6iWbj24LyDNFgFEN0lzegn6cC6a/p3NIDaepMsJjQjlUWqIC7wJv8lBFxPNjcw==", - "requires": { - "queue": "6.0.2" - } - }, - "immutable": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.0.0.tgz", - "integrity": "sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==" - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - } - } - }, - "import-local": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.3.tgz", - "integrity": "sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA==", - "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "dependencies": { - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - } - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "inline-style-prefixer": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/inline-style-prefixer/-/inline-style-prefixer-6.0.1.tgz", - "integrity": "sha512-AsqazZ8KcRzJ9YPN1wMH2aNM7lkWQ8tSPrW5uDk1ziYwiAPWSZnUsC7lfZq+BDqLqz0B4Pho5wscWcJzVvRzDQ==", - "requires": { - "css-in-js-utils": "^2.0.0" - } - }, - "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "requires": { - "loose-envify": "^1.0.0" - } - }, - "is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "requires": { - "has-bigints": "^1.0.1" - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" - }, - "is-core-module": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", - "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", - "requires": { - "has": "^1.0.3" - } - }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" - }, - "is-finite": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", - "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true - }, - "is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=" - }, - "is-nan": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", - "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - } - }, - "is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "is-number-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", - "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" - }, - "is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==" - }, - "is-path-in-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", - "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", - "requires": { - "is-path-inside": "^2.1.0" - } - }, - "is-path-inside": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", - "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", - "requires": { - "path-is-inside": "^1.0.2" - } - }, - "is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=" - }, - "is-shared-array-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", - "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==" - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" - }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-subset": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz", - "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=", - "dev": true - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-typed-array": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.8.tgz", - "integrity": "sha512-HqH41TNZq2fgtGT8WHVFVJhBVGuY3AnP3Q36K8JKXUxSxRgk/d+7NjmwG2vo2mYmXK8UYZKu0qH8bVP5gEisjA==", - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.18.5", - "foreach": "^2.0.5", - "has-tostringtag": "^1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "requires": { - "call-bind": "^1.0.2" - } - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, - "istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz", - "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==", - "dev": true, - "requires": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "istanbul-reports": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.3.tgz", - "integrity": "sha512-x9LtDVtfm/t1GFiLl3NffC7hz+I1ragvgX1P/Lg1NlIagifZDKUkuuaAxH/qpwj2IuEfD8G2Bs/UKp+sZ/pKkg==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "jake": { - "version": "10.8.2", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.2.tgz", - "integrity": "sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A==", - "requires": { - "async": "0.9.x", - "chalk": "^2.4.2", - "filelist": "^1.0.1", - "minimatch": "^3.0.4" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "jest": { - "version": "27.4.5", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.4.5.tgz", - "integrity": "sha512-uT5MiVN3Jppt314kidCk47MYIRilJjA/l2mxwiuzzxGUeJIvA8/pDaJOAX5KWvjAo7SCydcW0/4WEtgbLMiJkg==", - "dev": true, - "requires": { - "@jest/core": "^27.4.5", - "import-local": "^3.0.2", - "jest-cli": "^27.4.5" - } - }, - "jest-changed-files": { - "version": "27.4.2", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.4.2.tgz", - "integrity": "sha512-/9x8MjekuzUQoPjDHbBiXbNEBauhrPU2ct7m8TfCg69ywt1y/N+yYwGh3gCpnqUS3klYWDU/lSNgv+JhoD2k1A==", - "dev": true, - "requires": { - "@jest/types": "^27.4.2", - "execa": "^5.0.0", - "throat": "^6.0.1" - } - }, - "jest-circus": { - "version": "27.4.5", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.4.5.tgz", - "integrity": "sha512-eTNWa9wsvBwPykhMMShheafbwyakcdHZaEYh5iRrQ0PFJxkDP/e3U/FvzGuKWu2WpwUA3C3hPlfpuzvOdTVqnw==", - "dev": true, - "requires": { - "@jest/environment": "^27.4.4", - "@jest/test-result": "^27.4.2", - "@jest/types": "^27.4.2", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "expect": "^27.4.2", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.4.2", - "jest-matcher-utils": "^27.4.2", - "jest-message-util": "^27.4.2", - "jest-runtime": "^27.4.5", - "jest-snapshot": "^27.4.5", - "jest-util": "^27.4.2", - "pretty-format": "^27.4.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.3", - "throat": "^6.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-cli": { - "version": "27.4.5", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.4.5.tgz", - "integrity": "sha512-hrky3DSgE0u7sQxaCL7bdebEPHx5QzYmrGuUjaPLmPE8jx5adtvGuOlRspvMoVLTTDOHRnZDoRLYJuA+VCI7Hg==", - "dev": true, - "requires": { - "@jest/core": "^27.4.5", - "@jest/test-result": "^27.4.2", - "@jest/types": "^27.4.2", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "import-local": "^3.0.2", - "jest-config": "^27.4.5", - "jest-util": "^27.4.2", - "jest-validate": "^27.4.2", - "prompts": "^2.0.1", - "yargs": "^16.2.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-config": { - "version": "27.4.5", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.4.5.tgz", - "integrity": "sha512-t+STVJtPt+fpqQ8GBw850NtSQbnDOw/UzdPfzDaHQ48/AylQlW7LHj3dH+ndxhC1UxJ0Q3qkq7IH+nM1skwTwA==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^27.4.5", - "@jest/types": "^27.4.2", - "babel-jest": "^27.4.5", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.4", - "jest-circus": "^27.4.5", - "jest-environment-jsdom": "^27.4.4", - "jest-environment-node": "^27.4.4", - "jest-get-type": "^27.4.0", - "jest-jasmine2": "^27.4.5", - "jest-regex-util": "^27.4.0", - "jest-resolve": "^27.4.5", - "jest-runner": "^27.4.5", - "jest-util": "^27.4.2", - "jest-validate": "^27.4.2", - "micromatch": "^4.0.4", - "pretty-format": "^27.4.2", - "slash": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-diff": { - "version": "27.4.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.4.2.tgz", - "integrity": "sha512-ujc9ToyUZDh9KcqvQDkk/gkbf6zSaeEg9AiBxtttXW59H/AcqEYp1ciXAtJp+jXWva5nAf/ePtSsgWwE5mqp4Q==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^27.4.0", - "jest-get-type": "^27.4.0", - "pretty-format": "^27.4.2" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-docblock": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.4.0.tgz", - "integrity": "sha512-7TBazUdCKGV7svZ+gh7C8esAnweJoG+SvcF6Cjqj4l17zA2q1cMwx2JObSioubk317H+cjcHgP+7fTs60paulg==", - "dev": true, - "requires": { - "detect-newline": "^3.0.0" - } - }, - "jest-each": { - "version": "27.4.2", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.4.2.tgz", - "integrity": "sha512-53V2MNyW28CTruB3lXaHNk6PkiIFuzdOC9gR3C6j8YE/ACfrPnz+slB0s17AgU1TtxNzLuHyvNlLJ+8QYw9nBg==", - "dev": true, - "requires": { - "@jest/types": "^27.4.2", - "chalk": "^4.0.0", - "jest-get-type": "^27.4.0", - "jest-util": "^27.4.2", - "pretty-format": "^27.4.2" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-environment-jsdom": { - "version": "27.4.4", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.4.4.tgz", - "integrity": "sha512-cYR3ndNfHBqQgFvS1RL7dNqSvD//K56j/q1s2ygNHcfTCAp12zfIromO1w3COmXrxS8hWAh7+CmZmGCIoqGcGA==", - "dev": true, - "requires": { - "@jest/environment": "^27.4.4", - "@jest/fake-timers": "^27.4.2", - "@jest/types": "^27.4.2", - "@types/node": "*", - "jest-mock": "^27.4.2", - "jest-util": "^27.4.2", - "jsdom": "^16.6.0" - } - }, - "jest-environment-node": { - "version": "27.4.4", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.4.4.tgz", - "integrity": "sha512-D+v3lbJ2GjQTQR23TK0kY3vFVmSeea05giInI41HHOaJnAwOnmUHTZgUaZL+VxUB43pIzoa7PMwWtCVlIUoVoA==", - "dev": true, - "requires": { - "@jest/environment": "^27.4.4", - "@jest/fake-timers": "^27.4.2", - "@jest/types": "^27.4.2", - "@types/node": "*", - "jest-mock": "^27.4.2", - "jest-util": "^27.4.2" - } - }, - "jest-get-type": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.4.0.tgz", - "integrity": "sha512-tk9o+ld5TWq41DkK14L4wox4s2D9MtTpKaAVzXfr5CUKm5ZK2ExcaFE0qls2W71zE/6R2TxxrK9w2r6svAFDBQ==", - "dev": true - }, - "jest-haste-map": { - "version": "27.4.5", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.4.5.tgz", - "integrity": "sha512-oJm1b5qhhPs78K24EDGifWS0dELYxnoBiDhatT/FThgB9yxqUm5F6li3Pv+Q+apMBmmPNzOBnZ7ZxWMB1Leq1Q==", - "dev": true, - "requires": { - "@jest/types": "^27.4.2", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.3.2", - "graceful-fs": "^4.2.4", - "jest-regex-util": "^27.4.0", - "jest-serializer": "^27.4.0", - "jest-util": "^27.4.2", - "jest-worker": "^27.4.5", - "micromatch": "^4.0.4", - "walker": "^1.0.7" - } - }, - "jest-jasmine2": { - "version": "27.4.5", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.4.5.tgz", - "integrity": "sha512-oUnvwhJDj2LhOiUB1kdnJjkx8C5PwgUZQb9urF77mELH9DGR4e2GqpWQKBOYXWs5+uTN9BGDqRz3Aeg5Wts7aw==", - "dev": true, - "requires": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^27.4.4", - "@jest/source-map": "^27.4.0", - "@jest/test-result": "^27.4.2", - "@jest/types": "^27.4.2", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^27.4.2", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.4.2", - "jest-matcher-utils": "^27.4.2", - "jest-message-util": "^27.4.2", - "jest-runtime": "^27.4.5", - "jest-snapshot": "^27.4.5", - "jest-util": "^27.4.2", - "pretty-format": "^27.4.2", - "throat": "^6.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-leak-detector": { - "version": "27.4.2", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.4.2.tgz", - "integrity": "sha512-ml0KvFYZllzPBJWDei3mDzUhyp/M4ubKebX++fPaudpe8OsxUE+m+P6ciVLboQsrzOCWDjE20/eXew9QMx/VGw==", - "dev": true, - "requires": { - "jest-get-type": "^27.4.0", - "pretty-format": "^27.4.2" - } - }, - "jest-matcher-utils": { - "version": "27.4.2", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.4.2.tgz", - "integrity": "sha512-jyP28er3RRtMv+fmYC/PKG8wvAmfGcSNproVTW2Y0P/OY7/hWUOmsPfxN1jOhM+0u2xU984u2yEagGivz9OBGQ==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^27.4.2", - "jest-get-type": "^27.4.0", - "pretty-format": "^27.4.2" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-message-util": { - "version": "27.4.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.4.2.tgz", - "integrity": "sha512-OMRqRNd9E0DkBLZpFtZkAGYOXl6ZpoMtQJWTAREJKDOFa0M6ptB7L67tp+cszMBkvSgKOhNtQp2Vbcz3ZZKo/w==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.4.2", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.4", - "pretty-format": "^27.4.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-mock": { - "version": "27.4.2", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.4.2.tgz", - "integrity": "sha512-PDDPuyhoukk20JrQKeofK12hqtSka7mWH0QQuxSNgrdiPsrnYYLS6wbzu/HDlxZRzji5ylLRULeuI/vmZZDrYA==", - "dev": true, - "requires": { - "@jest/types": "^27.4.2", - "@types/node": "*" - } - }, - "jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", - "dev": true, - "requires": {} - }, - "jest-regex-util": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.4.0.tgz", - "integrity": "sha512-WeCpMpNnqJYMQoOjm1nTtsgbR4XHAk1u00qDoNBQoykM280+/TmgA5Qh5giC1ecy6a5d4hbSsHzpBtu5yvlbEg==", - "dev": true - }, - "jest-resolve": { - "version": "27.4.5", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.4.5.tgz", - "integrity": "sha512-xU3z1BuOz/hUhVUL+918KqUgK+skqOuUsAi7A+iwoUldK6/+PW+utK8l8cxIWT9AW7IAhGNXjSAh1UYmjULZZw==", - "dev": true, - "requires": { - "@jest/types": "^27.4.2", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.4.5", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.4.2", - "jest-validate": "^27.4.2", - "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", - "slash": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-resolve-dependencies": { - "version": "27.4.5", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.4.5.tgz", - "integrity": "sha512-elEVvkvRK51y037NshtEkEnukMBWvlPzZHiL847OrIljJ8yIsujD2GXRPqDXC4rEVKbcdsy7W0FxoZb4WmEs7w==", - "dev": true, - "requires": { - "@jest/types": "^27.4.2", - "jest-regex-util": "^27.4.0", - "jest-snapshot": "^27.4.5" - } - }, - "jest-runner": { - "version": "27.4.5", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.4.5.tgz", - "integrity": "sha512-/irauncTfmY1WkTaRQGRWcyQLzK1g98GYG/8QvIPviHgO1Fqz1JYeEIsSfF+9mc/UTA6S+IIHFgKyvUrtiBIZg==", - "dev": true, - "requires": { - "@jest/console": "^27.4.2", - "@jest/environment": "^27.4.4", - "@jest/test-result": "^27.4.2", - "@jest/transform": "^27.4.5", - "@jest/types": "^27.4.2", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-docblock": "^27.4.0", - "jest-environment-jsdom": "^27.4.4", - "jest-environment-node": "^27.4.4", - "jest-haste-map": "^27.4.5", - "jest-leak-detector": "^27.4.2", - "jest-message-util": "^27.4.2", - "jest-resolve": "^27.4.5", - "jest-runtime": "^27.4.5", - "jest-util": "^27.4.2", - "jest-worker": "^27.4.5", - "source-map-support": "^0.5.6", - "throat": "^6.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-runtime": { - "version": "27.4.5", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.4.5.tgz", - "integrity": "sha512-CIYqwuJQXHQtPd/idgrx4zgJ6iCb6uBjQq1RSAGQrw2S8XifDmoM1Ot8NRd80ooAm+ZNdHVwsktIMGlA1F1FAQ==", - "dev": true, - "requires": { - "@jest/console": "^27.4.2", - "@jest/environment": "^27.4.4", - "@jest/globals": "^27.4.4", - "@jest/source-map": "^27.4.0", - "@jest/test-result": "^27.4.2", - "@jest/transform": "^27.4.5", - "@jest/types": "^27.4.2", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.4.5", - "jest-message-util": "^27.4.2", - "jest-mock": "^27.4.2", - "jest-regex-util": "^27.4.0", - "jest-resolve": "^27.4.5", - "jest-snapshot": "^27.4.5", - "jest-util": "^27.4.2", - "jest-validate": "^27.4.2", - "slash": "^3.0.0", - "strip-bom": "^4.0.0", - "yargs": "^16.2.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-serializer": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.4.0.tgz", - "integrity": "sha512-RDhpcn5f1JYTX2pvJAGDcnsNTnsV9bjYPU8xcV+xPwOXnUPOQwf4ZEuiU6G9H1UztH+OapMgu/ckEVwO87PwnQ==", - "dev": true, - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.4" - } - }, - "jest-snapshot": { - "version": "27.4.5", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.4.5.tgz", - "integrity": "sha512-eCi/iM1YJFrJWiT9de4+RpWWWBqsHiYxFG9V9o/n0WXs6GpW4lUt4FAHAgFPTLPqCUVzrMQmSmTZSgQzwqR7IQ==", - "dev": true, - "requires": { - "@babel/core": "^7.7.2", - "@babel/generator": "^7.7.2", - "@babel/parser": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.0.0", - "@jest/transform": "^27.4.5", - "@jest/types": "^27.4.2", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^27.4.2", - "graceful-fs": "^4.2.4", - "jest-diff": "^27.4.2", - "jest-get-type": "^27.4.0", - "jest-haste-map": "^27.4.5", - "jest-matcher-utils": "^27.4.2", - "jest-message-util": "^27.4.2", - "jest-resolve": "^27.4.5", - "jest-util": "^27.4.2", - "natural-compare": "^1.4.0", - "pretty-format": "^27.4.2", - "semver": "^7.3.2" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-util": { - "version": "27.4.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.4.2.tgz", - "integrity": "sha512-YuxxpXU6nlMan9qyLuxHaMMOzXAl5aGZWCSzben5DhLHemYQxCc4YK+4L3ZrCutT8GPQ+ui9k5D8rUJoDioMnA==", - "dev": true, - "requires": { - "@jest/types": "^27.4.2", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.4", - "picomatch": "^2.2.3" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-validate": { - "version": "27.4.2", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.4.2.tgz", - "integrity": "sha512-hWYsSUej+Fs8ZhOm5vhWzwSLmVaPAxRy+Mr+z5MzeaHm9AxUpXdoVMEW4R86y5gOobVfBsMFLk4Rb+QkiEpx1A==", - "dev": true, - "requires": { - "@jest/types": "^27.4.2", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^27.4.0", - "leven": "^3.1.0", - "pretty-format": "^27.4.2" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "camelcase": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.1.tgz", - "integrity": "sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA==", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-watcher": { - "version": "27.4.2", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.4.2.tgz", - "integrity": "sha512-NJvMVyyBeXfDezhWzUOCOYZrUmkSCiatpjpm+nFUid74OZEHk6aMLrZAukIiFDwdbqp6mTM6Ui1w4oc+8EobQg==", - "dev": true, - "requires": { - "@jest/test-result": "^27.4.2", - "@jest/types": "^27.4.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^27.4.2", - "string-length": "^4.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-worker": { - "version": "27.4.5", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.5.tgz", - "integrity": "sha512-f2s8kEdy15cv9r7q4KkzGXvlY0JTcmCbMHZBfSQDwW77REr45IDWwd0lksDFeVHH2jJ5pqb90T77XscrjeGzzg==", - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "dependencies": { - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "js-cookie": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz", - "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==" - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", - "dev": true, - "requires": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" - }, - "json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - }, - "dependencies": { - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" - } - } - }, - "jsonpointer": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.0.tgz", - "integrity": "sha512-PNYZIdMjVIvVgDSYKTT63Y+KZ6IZvGRNNWcxwD+GNnUz1MKPfv30J8ueCjdwcN0nDx2SlshgyB7Oy0epAzVRRg==" - }, - "jsx-ast-utils": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz", - "integrity": "sha512-uP5vu8xfy2F9A6LGC22KO7e2/vGTS1MhP+18f++ZNlf0Ohaxbc9nIEwHAsejlJKyzfZzU5UIhe5ItYkitcZnZA==", - "dev": true, - "requires": { - "array-includes": "^3.1.3", - "object.assign": "^4.1.2" - } - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true - }, - "ky": { - "version": "0.28.7", - "resolved": "https://registry.npmjs.org/ky/-/ky-0.28.7.tgz", - "integrity": "sha512-a23i6qSr/ep15vdtw/zyEQIDLoUaKDg9Jf04CYl/0ns/wXNYna26zJpI+MeIFaPeDvkrjLPrKtKOiiI3IE53RQ==" - }, - "language-subtag-registry": { - "version": "0.3.21", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz", - "integrity": "sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg==", - "dev": true - }, - "language-tags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", - "integrity": "sha1-0yHbxNowuovzAk4ED6XBRmH5GTo=", - "dev": true, - "requires": { - "language-subtag-registry": "~0.3.2" - } - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "loader-runner": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", - "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==" - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "requires": { - "minimist": "^1.2.0" - } - } - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" - }, - "lodash.escape": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz", - "integrity": "sha1-yQRGkMIeBClL6qUXcS/e0fqI3pg=", - "dev": true - }, - "lodash.flattendeep": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", - "dev": true - }, - "lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", - "dev": true - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "magic-string": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", - "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", - "requires": { - "sourcemap-codec": "^1.4.4" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "requires": { - "tmpl": "1.0.5" - } - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" - }, - "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - } - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "mime-db": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==" - }, - "mime-types": { - "version": "2.1.34", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", - "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", - "requires": { - "mime-db": "1.51.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "moment": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", - "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" - }, - "moo": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.1.tgz", - "integrity": "sha512-I1mnb5xn4fO80BH9BLcF0yLypy2UKl+Cb01Fu0hJRkJjlCRtxZMWkTdAtDd5ZqCOxtCkhmRwyI57vWT+1iZ67w==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "nano-css": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/nano-css/-/nano-css-5.3.4.tgz", - "integrity": "sha512-wfcviJB6NOxDIDfr7RFn/GlaN7I/Bhe4d39ZRCJ3xvZX60LVe2qZ+rDqM49nm4YT81gAjzS+ZklhKP/Gnfnubg==", - "requires": { - "css-tree": "^1.1.2", - "csstype": "^3.0.6", - "fastest-stable-stringify": "^2.0.2", - "inline-style-prefixer": "^6.0.0", - "rtl-css-js": "^1.14.0", - "sourcemap-codec": "^1.4.8", - "stacktrace-js": "^2.0.2", - "stylis": "^4.0.6" - } - }, - "nanoid": { - "version": "3.1.30", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.30.tgz", - "integrity": "sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ==" - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "nearley": { - "version": "2.20.1", - "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.20.1.tgz", - "integrity": "sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ==", - "dev": true, - "requires": { - "commander": "^2.19.0", - "moo": "^0.5.0", - "railroad-diagrams": "^1.0.0", - "randexp": "0.4.6" - } - }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" - }, - "next": { - "version": "12.0.7", - "resolved": "https://registry.npmjs.org/next/-/next-12.0.7.tgz", - "integrity": "sha512-sKO8GJJYfuk9c+q+zHSNumvff+wP7ufmOlwT6BuzwiYfFJ61VTTkfTcDLSJ+95ErQJiC54uS4Yg5JEE8H6jXRA==", - "requires": { - "@babel/runtime": "7.15.4", - "@hapi/accept": "5.0.2", - "@napi-rs/triples": "1.0.3", - "@next/env": "12.0.7", - "@next/polyfill-module": "12.0.7", - "@next/react-dev-overlay": "12.0.7", - "@next/react-refresh-utils": "12.0.7", - "@next/swc-android-arm64": "12.0.7", - "@next/swc-darwin-arm64": "12.0.7", - "@next/swc-darwin-x64": "12.0.7", - "@next/swc-linux-arm-gnueabihf": "12.0.7", - "@next/swc-linux-arm64-gnu": "12.0.7", - "@next/swc-linux-arm64-musl": "12.0.7", - "@next/swc-linux-x64-gnu": "12.0.7", - "@next/swc-linux-x64-musl": "12.0.7", - "@next/swc-win32-arm64-msvc": "12.0.7", - "@next/swc-win32-ia32-msvc": "12.0.7", - "@next/swc-win32-x64-msvc": "12.0.7", - "acorn": "8.5.0", - "assert": "2.0.0", - "browserify-zlib": "0.2.0", - "browserslist": "4.16.6", - "buffer": "5.6.0", - "caniuse-lite": "^1.0.30001228", - "chalk": "2.4.2", - "chokidar": "3.5.1", - "constants-browserify": "1.0.0", - "crypto-browserify": "3.12.0", - "cssnano-simple": "3.0.0", - "domain-browser": "4.19.0", - "encoding": "0.1.13", - "etag": "1.8.1", - "events": "3.3.0", - "find-cache-dir": "3.3.1", - "get-orientation": "1.1.2", - "https-browserify": "1.0.0", - "image-size": "1.0.0", - "jest-worker": "27.0.0-next.5", - "node-fetch": "2.6.1", - "node-html-parser": "1.4.9", - "os-browserify": "0.3.0", - "p-limit": "3.1.0", - "path-browserify": "1.0.1", - "postcss": "8.2.15", - "process": "0.11.10", - "querystring-es3": "0.2.1", - "raw-body": "2.4.1", - "react-is": "17.0.2", - "react-refresh": "0.8.3", - "regenerator-runtime": "0.13.4", - "stream-browserify": "3.0.0", - "stream-http": "3.1.1", - "string_decoder": "1.3.0", - "styled-jsx": "5.0.0-beta.3", - "timers-browserify": "2.0.12", - "tty-browserify": "0.0.1", - "use-subscription": "1.5.1", - "util": "0.12.4", - "vm-browserify": "1.1.2", - "watchpack": "2.3.0" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz", - "integrity": "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==", - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "acorn": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", - "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", - "requires": { - "caniuse-lite": "^1.0.30001219", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", - "escalade": "^3.1.1", - "node-releases": "^1.1.71" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "jest-worker": { - "version": "27.0.0-next.5", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.0-next.5.tgz", - "integrity": "sha512-mk0umAQ5lT+CaOJ+Qp01N6kz48sJG2kr2n1rX0koqKf6FIygQV0qLOdN9SCYID4IVeSigDOcPeGLozdMLYfb5g==", - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "dependencies": { - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" - }, - "node-releases": { - "version": "1.1.77", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.77.tgz", - "integrity": "sha512-rB1DUFUNAN4Gn9keO2K1efO35IDK7yKHCdCaIMvFO7yUYmmZYeDjnGKle26G4rwj+LKRQpjyUUvMkPglwGCYNQ==" - }, - "react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" - }, - "regenerator-runtime": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.4.tgz", - "integrity": "sha512-plpwicqEzfEyTQohIKktWigcLzmNStMGwbOUbykx51/29Z3JOGYldaaNGK7ngNXV+UcoqvIMmloZ48Sr74sd+g==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - }, - "dependencies": { - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - } - } - } - } - }, - "next-pwa": { - "version": "5.4.4", - "resolved": "https://registry.npmjs.org/next-pwa/-/next-pwa-5.4.4.tgz", - "integrity": "sha512-Wo7DctXO9ZZzMCuRK/q2U3x5k49LBRv7p31woJIUfiR6tJChSMoojHUvvgeCY72gSo4mtovS5KRm6iHIs/kxeg==", - "requires": { - "babel-loader": "^8.2.3", - "clean-webpack-plugin": "^4.0.0", - "globby": "^11.0.4", - "terser-webpack-plugin": "^5.2.5", - "workbox-webpack-plugin": "^6.4.2", - "workbox-window": "^6.4.2" - } - }, - "node-html-parser": { - "version": "1.4.9", - "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-1.4.9.tgz", - "integrity": "sha512-UVcirFD1Bn0O+TSmloHeHqZZCxHjvtIeGdVdGMhyZ8/PWlEiZaZ5iJzR189yKZr8p0FXN58BUeC7RHRkf/KYGw==", - "requires": { - "he": "1.2.0" - } - }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", - "dev": true - }, - "node-releases": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", - "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==" - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "nth-check": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", - "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", - "dev": true, - "requires": { - "boolbase": "^1.0.0" - } - }, - "nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object-inspect": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", - "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==" - }, - "object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, - "object.entries": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", - "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - } - }, - "object.fromentries": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", - "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - } - }, - "object.hasown": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.0.tgz", - "integrity": "sha512-MhjYRfj3GBlhSkDHo6QmvgjRLXQ2zndabdf3nX0yTyZK9rPfxb6uRpAac8HXNLy1GpqWtZ81Qh4v3uOls2sRAg==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - } - }, - "object.values": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", - "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "requires": { - "p-limit": "^2.2.0" - }, - "dependencies": { - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" - } - } - }, - "p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==" - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", - "requires": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "parse5-htmlparser2-tree-adapter": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", - "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", - "dev": true, - "requires": { - "parse5": "^6.0.1" - } - }, - "path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" - }, - "pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "requires": { - "pinkie": "^2.0.0" - } - }, - "pirates": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.4.tgz", - "integrity": "sha512-ZIrVPH+A52Dw84R0L3/VS9Op04PuQ2SEoJL6bkshmiTic/HldyW9Tf7oH5mhJZBK7NmDx27vSMrYEXPXclpDKw==", - "dev": true - }, - "pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", - "dev": true, - "requires": { - "find-up": "^2.1.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } - } - }, - "platform": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz", - "integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==" - }, - "postcss": { - "version": "8.2.15", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.15.tgz", - "integrity": "sha512-2zO3b26eJD/8rb106Qu2o7Qgg52ND5HPjcyQiK2B98O388h43A448LCslC0dI2P97wCAQRJsFvwTRcXxTKds+Q==", - "requires": { - "colorette": "^1.2.2", - "nanoid": "^3.1.23", - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "prettier": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", - "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", - "dev": true - }, - "pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==" - }, - "pretty-format": { - "version": "27.4.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.4.2.tgz", - "integrity": "sha512-p0wNtJ9oLuvgOQDEIZ9zQjZffK7KtyR6Si0jnXULIDwrlNF8Cuir3AZP0hHv0jmKuNN/edOnbMjnzd4uTcmWiw==", - "dev": true, - "requires": { - "@jest/types": "^27.4.2", - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - }, - "react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true - } - } - }, - "private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", - "dev": true - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, - "prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - } - }, - "prop-types": { - "version": "15.8.0", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.0.tgz", - "integrity": "sha512-fDGekdaHh65eI3lMi5OnErU6a8Ighg2KjcjQxO7m8VHyWjcPyj5kiOgV1LQDOOOgVy3+5FgjXvdSSX7B8/5/4g==", - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "prop-types-exact": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/prop-types-exact/-/prop-types-exact-1.2.0.tgz", - "integrity": "sha512-K+Tk3Kd9V0odiXFP9fwDHUYRyvK3Nun3GVyPapSIs5OBkITAm15W0CPFD/YKTkMUAbc0b9CUwRQp2ybiBIq+eA==", - "dev": true, - "requires": { - "has": "^1.0.3", - "object.assign": "^4.1.0", - "reflect.ownkeys": "^0.2.0" - } - }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true - }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" - }, - "queue": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", - "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", - "requires": { - "inherits": "~2.0.3" - } - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" - }, - "raf": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", - "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", - "dev": true, - "requires": { - "performance-now": "^2.1.0" - } - }, - "railroad-diagrams": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz", - "integrity": "sha1-635iZ1SN3t+4mcG5Dlc3RVnN234=", - "dev": true - }, - "randexp": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz", - "integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==", - "dev": true, - "requires": { - "discontinuous-range": "1.0.0", - "ret": "~0.1.10" - } - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "raw-body": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz", - "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==", - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.3", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "dependencies": { - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - } - } - }, - "react": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", - "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "react-addons-test-utils": { - "version": "15.6.2", - "resolved": "https://registry.npmjs.org/react-addons-test-utils/-/react-addons-test-utils-15.6.2.tgz", - "integrity": "sha1-wStu/cIkfBDae4dw0YUICnsEcVY=", - "dev": true, - "requires": {} - }, - "react-display-name": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/react-display-name/-/react-display-name-0.2.5.tgz", - "integrity": "sha512-I+vcaK9t4+kypiSgaiVWAipqHRXYmZIuAiS8vzFvXHHXVigg/sMKwlRgLy6LH2i3rmP+0Vzfl5lFsFRwF1r3pg==", - "dev": true - }, - "react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" - } - }, - "react-fast-compare": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz", - "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==" - }, - "react-helmet": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/react-helmet/-/react-helmet-6.1.0.tgz", - "integrity": "sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw==", - "requires": { - "object-assign": "^4.1.1", - "prop-types": "^15.7.2", - "react-fast-compare": "^3.1.1", - "react-side-effect": "^2.1.0" - } - }, - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "react-refresh": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.8.3.tgz", - "integrity": "sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg==" - }, - "react-shallow-renderer": { - "version": "16.14.1", - "resolved": "https://registry.npmjs.org/react-shallow-renderer/-/react-shallow-renderer-16.14.1.tgz", - "integrity": "sha512-rkIMcQi01/+kxiTE9D3fdS959U1g7gs+/rborw++42m1O9FAQiNI/UNRZExVUoAOprn4umcXf+pFRou8i4zuBg==", - "dev": true, - "requires": { - "object-assign": "^4.1.1", - "react-is": "^16.12.0 || ^17.0.0" - } - }, - "react-side-effect": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/react-side-effect/-/react-side-effect-2.1.1.tgz", - "integrity": "sha512-2FoTQzRNTncBVtnzxFOk2mCpcfxQpenBMbk5kSVBg5UcPqV9fRbgY2zhb7GTWWOlpFmAxhClBDlIq8Rsubz1yQ==", - "requires": {} - }, - "react-svg-ionicons": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/react-svg-ionicons/-/react-svg-ionicons-0.2.3.tgz", - "integrity": "sha512-/o8YFlMvKaO1EzYTYEEmvdDUt02eeGJhMD1Gmreq9gn9tVe1BRL2H6Rpfn1OBWH2X2Q+aZfaRNSTuiRk8L1iag==", - "requires": { - "@jsbits/get-package-version": "^1.0.3", - "invariant": "^2.0.0", - "prop-types": "^15.0.0" - } - }, - "react-test-renderer": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-17.0.2.tgz", - "integrity": "sha512-yaQ9cB89c17PUb0x6UfWRs7kQCorVdHlutU1boVPEsB8IDZH6n9tHxMacc3y0JoXOJUsZb/t/Mb8FUWMKaM7iQ==", - "dev": true, - "requires": { - "object-assign": "^4.1.1", - "react-is": "^17.0.2", - "react-shallow-renderer": "^16.13.1", - "scheduler": "^0.20.2" - }, - "dependencies": { - "react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true - } - } - }, - "react-toggle-switch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-toggle-switch/-/react-toggle-switch-3.0.4.tgz", - "integrity": "sha512-eM2Izl0qNrdFZlmRwpXPpUjaYVISHVy8dxCN9l6eRZ7KpmrDsIGInDpoSRU2QPs596+Al+udOArdXX5wCRg0Gg==", - "requires": {} - }, - "react-universal-interface": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/react-universal-interface/-/react-universal-interface-0.6.2.tgz", - "integrity": "sha512-dg8yXdcQmvgR13RIlZbTRQOoUrDciFVoSBZILwjE2LFISxZZ8loVJKAkuzswl5js8BHda79bIb2b84ehU8IjXw==", - "requires": {} - }, - "react-use": { - "version": "17.3.2", - "resolved": "https://registry.npmjs.org/react-use/-/react-use-17.3.2.tgz", - "integrity": "sha512-bj7OD0/1wL03KyWmzFXAFe425zziuTf7q8olwCYBfOeFHY1qfO1FAMjROQLsLZYwG4Rx63xAfb7XAbBrJsZmEw==", - "requires": { - "@types/js-cookie": "^2.2.6", - "@xobotyi/scrollbar-width": "^1.9.5", - "copy-to-clipboard": "^3.3.1", - "fast-deep-equal": "^3.1.3", - "fast-shallow-equal": "^1.0.0", - "js-cookie": "^2.2.1", - "nano-css": "^5.3.1", - "react-universal-interface": "^0.6.2", - "resize-observer-polyfill": "^1.5.1", - "screenfull": "^5.1.0", - "set-harmonic-interval": "^1.0.1", - "throttle-debounce": "^3.0.1", - "ts-easing": "^0.2.0", - "tslib": "^2.1.0" - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", - "requires": { - "picomatch": "^2.2.1" - } - }, - "reflect.ownkeys": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/reflect.ownkeys/-/reflect.ownkeys-0.2.0.tgz", - "integrity": "sha1-dJrO7H8/34tj+SegSAnpDFwLNGA=", - "dev": true - }, - "regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" - }, - "regenerate-unicode-properties": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz", - "integrity": "sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA==", - "requires": { - "regenerate": "^1.4.2" - } - }, - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", - "dev": true - }, - "regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", - "requires": { - "@babel/runtime": "^7.8.4" - } - }, - "regexp.prototype.flags": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", - "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, - "regexpu-core": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.8.0.tgz", - "integrity": "sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg==", - "requires": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^9.0.0", - "regjsgen": "^0.5.2", - "regjsparser": "^0.7.0", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.0.0" - } - }, - "regjsgen": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==" - }, - "regjsparser": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.7.0.tgz", - "integrity": "sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ==", - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" - } - } - }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "requires": { - "is-finite": "^1.0.0" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" - }, - "resize-observer-polyfill": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", - "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" - }, - "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, - "resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "requires": { - "resolve-from": "^5.0.0" - } - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - }, - "resolve.exports": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", - "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", - "dev": true - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "rodal": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/rodal/-/rodal-1.8.1.tgz", - "integrity": "sha512-3BpwZrLpaWSDHu8Atzz/S83MkpqpnXL9uGjNPZy1N6V7p4eWWsBSP8er5t+1xV+fZmbGEjLTNo01pUzYHqc7vg==", - "requires": { - "classnames": "^2.2.6" - } - }, - "rollup": { - "version": "2.62.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.62.0.tgz", - "integrity": "sha512-cJEQq2gwB0GWMD3rYImefQTSjrPYaC6s4J9pYqnstVLJ1CHa/aZNVkD4Epuvg4iLeMA4KRiq7UM7awKK6j7jcw==", - "requires": { - "fsevents": "~2.3.2" - } - }, - "rollup-plugin-terser": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", - "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", - "requires": { - "@babel/code-frame": "^7.10.4", - "jest-worker": "^26.2.1", - "serialize-javascript": "^4.0.0", - "terser": "^5.0.0" - }, - "dependencies": { - "jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - } - }, - "serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "requires": { - "randombytes": "^2.1.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "rst-selector-parser": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz", - "integrity": "sha1-gbIw6i/MYGbInjRy3nlChdmwPZE=", - "dev": true, - "requires": { - "lodash.flattendeep": "^4.4.0", - "nearley": "^2.7.10" - } - }, - "rtl-css-js": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/rtl-css-js/-/rtl-css-js-1.15.0.tgz", - "integrity": "sha512-99Cu4wNNIhrI10xxUaABHsdDqzalrSRTie4GeCmbGVuehm4oj+fIy8fTzB+16pmKe8Bv9rl+hxIBez6KxExTew==", - "requires": { - "@babel/runtime": "^7.1.2" - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "sass": { - "version": "1.45.2", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.45.2.tgz", - "integrity": "sha512-cKfs+F9AMPAFlbbTXNsbGvg3y58nV0mXA3E94jqaySKcC8Kq3/8983zVKQ0TLMUrHw7hF9Tnd3Bz9z5Xgtrl9g==", - "requires": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - } - }, - "saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dev": true, - "requires": { - "xmlchars": "^2.2.0" - } - }, - "scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "requires": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - } - }, - "screenfull": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/screenfull/-/screenfull-5.2.0.tgz", - "integrity": "sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA==" - }, - "scrypt-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "requires": { - "randombytes": "^2.1.0" - } - }, - "set-harmonic-interval": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-harmonic-interval/-/set-harmonic-interval-1.0.1.tgz", - "integrity": "sha512-AhICkFV84tBP1aWqPwLZqFvAwqEoVA9kxNMniGEUvzOlm4vLmOFLiTT3UZ6bziJTy4bOVpzWGTfSCbmaayGx8g==" - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "shallowequal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", - "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "shell-quote": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", - "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==" - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", - "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", - "dev": true - }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "dev": true - }, - "sorted-array": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/sorted-array/-/sorted-array-2.0.4.tgz", - "integrity": "sha512-58INzrX0rL6ttCfsGoFmOuQY5AjR6A5E/MmGKJ5JvWHOey6gOEOC6vO8K6C0Y2bQR6KJ8o8aFwHjp/mJ/HcYsQ==" - }, - "source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "source-map-js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.1.tgz", - "integrity": "sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA==" - }, - "source-map-support": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", - "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", - "dev": true, - "requires": { - "source-map": "^0.5.6" - } - }, - "source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==" - }, - "sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "stack-generator": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.5.tgz", - "integrity": "sha512-/t1ebrbHkrLrDuNMdeAcsvynWgoH/i4o8EGGfX7dEYDoTXOYVAkEpFdtshlvabzc6JlJ8Kf9YdFEoz7JkzGN9Q==", - "requires": { - "stackframe": "^1.1.1" - } - }, - "stack-utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", - "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", - "dev": true, - "requires": { - "escape-string-regexp": "^2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true - } - } - }, - "stackframe": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.0.tgz", - "integrity": "sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA==" - }, - "stacktrace-gps": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/stacktrace-gps/-/stacktrace-gps-3.0.4.tgz", - "integrity": "sha512-qIr8x41yZVSldqdqe6jciXEaSCKw1U8XTXpjDuy0ki/apyTn/r3w9hDAAQOhZdxvsC93H+WwwEu5cq5VemzYeg==", - "requires": { - "source-map": "0.5.6", - "stackframe": "^1.1.1" - }, - "dependencies": { - "source-map": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", - "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=" - } - } - }, - "stacktrace-js": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stacktrace-js/-/stacktrace-js-2.0.2.tgz", - "integrity": "sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg==", - "requires": { - "error-stack-parser": "^2.0.6", - "stack-generator": "^2.0.5", - "stacktrace-gps": "^3.0.4" - } - }, - "stacktrace-parser": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", - "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", - "requires": { - "type-fest": "^0.7.1" - }, - "dependencies": { - "type-fest": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", - "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==" - } - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" - }, - "stream-browserify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", - "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", - "requires": { - "inherits": "~2.0.4", - "readable-stream": "^3.5.0" - } - }, - "stream-http": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.1.1.tgz", - "integrity": "sha512-S7OqaYu0EkFpgeGFb/NPOoPLxFko7TPqtEeFg5DXPB4v/KETHG0Ln6fRFrNezoelpaDKmycEmmZ81cC9DAwgYg==", - "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "xtend": "^4.0.2" - } - }, - "stream-parser": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz", - "integrity": "sha1-FhhUhpRCACGhGC/wrxkRwSl2F3M=", - "requires": { - "debug": "2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } - } - }, - "string-hash": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", - "integrity": "sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=" - }, - "string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "requires": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } - } - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } - } - }, - "string.prototype.matchall": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.6.tgz", - "integrity": "sha512-6WgDX8HmQqvEd7J+G6VtAahhsQIssiZ8zl7zKh1VDMFyL3hRTJP4FTNA3RbIp2TOQ9AYNDcc7e3fH0Qbup+DBg==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", - "get-intrinsic": "^1.1.1", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.3.1", - "side-channel": "^1.0.4" - } - }, - "string.prototype.trim": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.5.tgz", - "integrity": "sha512-Lnh17webJVsD6ECeovpVN17RlAKjmz4rF9S+8Y45CkMc/ufVpTkU3vZIyIC7sllQ1FCvObZnnCdNs/HXTUOTlg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - } - }, - "string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "requires": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true - }, - "strip-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", - "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==" - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "styled-components": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.3.3.tgz", - "integrity": "sha512-++4iHwBM7ZN+x6DtPPWkCI4vdtwumQ+inA/DdAsqYd4SVgUKJie5vXyzotA00ttcFdQkCng7zc6grwlfIfw+lw==", - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/traverse": "^7.4.5", - "@emotion/is-prop-valid": "^0.8.8", - "@emotion/stylis": "^0.8.4", - "@emotion/unitless": "^0.7.4", - "babel-plugin-styled-components": ">= 1.12.0", - "css-to-react-native": "^3.0.0", - "hoist-non-react-statics": "^3.0.0", - "shallowequal": "^1.1.0", - "supports-color": "^5.5.0" - }, - "dependencies": { - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "styled-jsx": { - "version": "5.0.0-beta.3", - "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.0-beta.3.tgz", - "integrity": "sha512-HtDDGSFPvmjHIqWf9n8Oo54tAoY/DTplvlyOH2+YOtD80Sp31Ap8ffSmxhgk5EkUoJ7xepdXMGT650mSffWuRA==", - "requires": { - "@babel/plugin-syntax-jsx": "7.14.5", - "@babel/types": "7.15.0", - "convert-source-map": "1.7.0", - "loader-utils": "1.2.3", - "source-map": "0.7.3", - "string-hash": "1.1.3", - "stylis": "3.5.4", - "stylis-rule-sheet": "0.0.10" - }, - "dependencies": { - "@babel/types": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.0.tgz", - "integrity": "sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.9", - "to-fast-properties": "^2.0.0" - } - }, - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" - } - }, - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" - }, - "stylis": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-3.5.4.tgz", - "integrity": "sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q==" - } - } - }, - "stylis": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.0.13.tgz", - "integrity": "sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag==" - }, - "stylis-rule-sheet": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz", - "integrity": "sha512-nTbZoaqoBnmK+ptANthb10ZRZOGC+EmTLLUxeYIuHNkEKcmKgXX1XWKkUBT2Ac4es3NybooPe0SmvKdhKJZAuw==", - "requires": {} - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - }, - "supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", - "dev": true, - "requires": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "dependencies": { - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "sweetalert2": { - "version": "11.3.3", - "resolved": "https://registry.npmjs.org/sweetalert2/-/sweetalert2-11.3.3.tgz", - "integrity": "sha512-10Keqbmjng/+XpkpSOQ6dttpztl7XNohjnpC6bX6XFgm0WpRXM81YE0wmonGYOP6uyzd76vpfnZS04PdVvO31Q==" - }, - "symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==" - }, - "temp-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", - "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==" - }, - "tempy": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", - "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", - "requires": { - "is-stream": "^2.0.0", - "temp-dir": "^2.0.0", - "type-fest": "^0.16.0", - "unique-string": "^2.0.0" - }, - "dependencies": { - "type-fest": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", - "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==" - } - } - }, - "terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - } - }, - "terser": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz", - "integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==", - "requires": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.20" - }, - "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" - }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - } - } - }, - "terser-webpack-plugin": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.0.tgz", - "integrity": "sha512-LPIisi3Ol4chwAaPP8toUJ3L4qCM1G0wao7L3qNv57Drezxj6+VEyySpPw4B1HSO2Eg/hDY/MNF5XihCAoqnsQ==", - "requires": { - "jest-worker": "^27.4.1", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1", - "terser": "^5.7.2" - }, - "dependencies": { - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "throat": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", - "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", - "dev": true - }, - "throttle-debounce": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-3.0.1.tgz", - "integrity": "sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==" - }, - "timers-browserify": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", - "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", - "requires": { - "setimmediate": "^1.0.4" - } - }, - "tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { - "is-number": "^7.0.0" - } - }, - "toggle-selection": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", - "integrity": "sha1-bkWxJj8gF/oKzH2J14sVuL932jI=" - }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" - }, - "tough-cookie": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", - "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", - "dev": true, - "requires": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.1.2" - } - }, - "tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dev": true, - "requires": { - "punycode": "^2.1.1" - } - }, - "trim-right": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", - "dev": true - }, - "ts-easing": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/ts-easing/-/ts-easing-0.2.0.tgz", - "integrity": "sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ==" - }, - "tsconfig-paths": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", - "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==", - "dev": true, - "requires": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.0", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - } - } - }, - "tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "tty-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", - "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==" - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-detect": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-3.0.0.tgz", - "integrity": "sha1-RtDMhVOrt7E6NSsNbeov1Y8tm1U=", - "dev": true - }, - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz", - "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==" - }, - "unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", - "requires": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - } - }, - "unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==" - }, - "unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "requires": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", - "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==" - }, - "unicode-property-aliases-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", - "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==" - }, - "unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "requires": { - "crypto-random-string": "^2.0.0" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" - }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "requires": { - "punycode": "^2.1.0" - } - }, - "use-subscription": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/use-subscription/-/use-subscription-1.5.1.tgz", - "integrity": "sha512-Xv2a1P/yReAjAbhylMfFplFKj9GssgTwN7RlcTxBujFQcloStWNDQdc4g4NRWH9xS4i/FDk04vQBptAXoF3VcA==", - "requires": { - "object-assign": "^4.1.1" - } - }, - "userbase-js": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/userbase-js/-/userbase-js-2.8.0.tgz", - "integrity": "sha512-fjGgfpI018T+HY3k9XW1bkUyppHDa1bLzfJJ+Virq+58YzzcN74c5AF8W/cww76syyyscndbCvzLduvwiVKlwA==", - "requires": { - "@babel/runtime": "^7.9.2", - "base64-arraybuffer": "^0.2.0", - "diffie-hellman": "^5.0.3", - "scrypt-js": "^3.0.0", - "sorted-array": "^2.0.4", - "uuid": "^3.4.0" - } - }, - "util": { - "version": "0.12.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", - "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", - "requires": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "safe-buffer": "^5.1.2", - "which-typed-array": "^1.1.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" - }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "v8-to-istanbul": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz", - "integrity": "sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - } - } - }, - "vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" - }, - "w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "dev": true, - "requires": { - "browser-process-hrtime": "^1.0.0" - } - }, - "w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", - "dev": true, - "requires": { - "xml-name-validator": "^3.0.0" - } - }, - "walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "requires": { - "makeerror": "1.0.12" - } - }, - "watchpack": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.0.tgz", - "integrity": "sha512-MnN0Q1OsvB/GGHETrFeZPQaOelWh/7O+EiFlj8sM9GPjtQkis7k01aAxrg/18kTfoIVcLL+haEVFlXDaSRwKRw==", - "requires": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - } - }, - "webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true - }, - "webpack": { - "version": "5.65.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.65.0.tgz", - "integrity": "sha512-Q5or2o6EKs7+oKmJo7LaqZaMOlDWQse9Tm5l1WAfU/ujLGN5Pb0SqGeVkN/4bpPmEqEP5RnVhiqsOtWtUVwGRw==", - "requires": { - "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.50", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.4.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.8.3", - "es-module-lexer": "^0.9.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.4", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.3.1", - "webpack-sources": "^3.2.2" - }, - "dependencies": { - "@types/estree": { - "version": "0.0.50", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", - "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==" - }, - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - }, - "watchpack": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz", - "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==", - "requires": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - } - }, - "webpack-sources": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.2.tgz", - "integrity": "sha512-cp5qdmHnu5T8wRg2G3vZZHoJPN14aqQ89SyQ11NpGH5zEMDCclt49rzo+MaRazk7/UeILhAI+/sEtcM+7Fr0nw==" - } - } - }, - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, - "requires": { - "iconv-lite": "0.4.24" - }, - "dependencies": { - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - } - } - }, - "whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true - }, - "whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "dev": true, - "requires": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, - "which-typed-array": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.7.tgz", - "integrity": "sha512-vjxaB4nfDqwKI0ws7wZpxIlde1XrLX5uB0ZjpfshgmapJMD7jJWhZI+yToJTqaFByF0eNBcYxbjmCzoRP7CfEw==", - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.18.5", - "foreach": "^2.0.5", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.7" - } - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "workbox-background-sync": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.4.2.tgz", - "integrity": "sha512-P7c8uG5X2k+DMICH9xeSA9eUlCOjHHYoB42Rq+RtUpuwBxUOflAXR1zdsMWj81LopE4gjKXlTw7BFd1BDAHo7g==", - "requires": { - "idb": "^6.1.4", - "workbox-core": "6.4.2" - } - }, - "workbox-broadcast-update": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.4.2.tgz", - "integrity": "sha512-qnBwQyE0+PWFFc/n4ISXINE49m44gbEreJUYt2ldGH3+CNrLmJ1egJOOyUqqu9R4Eb7QrXcmB34ClXG7S37LbA==", - "requires": { - "workbox-core": "6.4.2" - } - }, - "workbox-build": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.4.2.tgz", - "integrity": "sha512-WMdYLhDIsuzViOTXDH+tJ1GijkFp5khSYolnxR/11zmfhNDtuo7jof72xPGFy+KRpsz6tug39RhivCj77qqO0w==", - "requires": { - "@apideck/better-ajv-errors": "^0.3.1", - "@babel/core": "^7.11.1", - "@babel/preset-env": "^7.11.0", - "@babel/runtime": "^7.11.2", - "@rollup/plugin-babel": "^5.2.0", - "@rollup/plugin-node-resolve": "^11.2.1", - "@rollup/plugin-replace": "^2.4.1", - "@surma/rollup-plugin-off-main-thread": "^2.2.3", - "ajv": "^8.6.0", - "common-tags": "^1.8.0", - "fast-json-stable-stringify": "^2.1.0", - "fs-extra": "^9.0.1", - "glob": "^7.1.6", - "lodash": "^4.17.20", - "pretty-bytes": "^5.3.0", - "rollup": "^2.43.1", - "rollup-plugin-terser": "^7.0.0", - "source-map": "^0.8.0-beta.0", - "source-map-url": "^0.4.0", - "stringify-object": "^3.3.0", - "strip-comments": "^2.0.1", - "tempy": "^0.6.0", - "upath": "^1.2.0", - "workbox-background-sync": "6.4.2", - "workbox-broadcast-update": "6.4.2", - "workbox-cacheable-response": "6.4.2", - "workbox-core": "6.4.2", - "workbox-expiration": "6.4.2", - "workbox-google-analytics": "6.4.2", - "workbox-navigation-preload": "6.4.2", - "workbox-precaching": "6.4.2", - "workbox-range-requests": "6.4.2", - "workbox-recipes": "6.4.2", - "workbox-routing": "6.4.2", - "workbox-strategies": "6.4.2", - "workbox-streams": "6.4.2", - "workbox-sw": "6.4.2", - "workbox-window": "6.4.2" - }, - "dependencies": { - "ajv": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.8.2.tgz", - "integrity": "sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "source-map": { - "version": "0.8.0-beta.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", - "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", - "requires": { - "whatwg-url": "^7.0.0" - } - }, - "tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", - "requires": { - "punycode": "^2.1.0" - } - }, - "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" - }, - "whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - } - } - }, - "workbox-cacheable-response": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.4.2.tgz", - "integrity": "sha512-9FE1W/cKffk1AJzImxgEN0ceWpyz1tqNjZVtA3/LAvYL3AC5SbIkhc7ZCO82WmO9IjTfu8Vut2X/C7ViMSF7TA==", - "requires": { - "workbox-core": "6.4.2" - } - }, - "workbox-core": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.4.2.tgz", - "integrity": "sha512-1U6cdEYPcajRXiboSlpJx6U7TvhIKbxRRerfepAJu2hniKwJ3DHILjpU/zx3yvzSBCWcNJDoFalf7Vgd7ey/rw==" - }, - "workbox-expiration": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.4.2.tgz", - "integrity": "sha512-0hbpBj0tDnW+DZOUmwZqntB/8xrXOgO34i7s00Si/VlFJvvpRKg1leXdHHU8ykoSBd6+F2KDcMP3swoCi5guLw==", - "requires": { - "idb": "^6.1.4", - "workbox-core": "6.4.2" - } - }, - "workbox-google-analytics": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.4.2.tgz", - "integrity": "sha512-u+gxs3jXovPb1oul4CTBOb+T9fS1oZG+ZE6AzS7l40vnyfJV79DaLBvlpEZfXGv3CjMdV1sT/ltdOrKzo7HcGw==", - "requires": { - "workbox-background-sync": "6.4.2", - "workbox-core": "6.4.2", - "workbox-routing": "6.4.2", - "workbox-strategies": "6.4.2" - } - }, - "workbox-navigation-preload": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.4.2.tgz", - "integrity": "sha512-viyejlCtlKsbJCBHwhSBbWc57MwPXvUrc8P7d+87AxBGPU+JuWkT6nvBANgVgFz6FUhCvRC8aYt+B1helo166g==", - "requires": { - "workbox-core": "6.4.2" - } - }, - "workbox-precaching": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.4.2.tgz", - "integrity": "sha512-CZ6uwFN/2wb4noHVlALL7UqPFbLfez/9S2GAzGAb0Sk876ul9ukRKPJJ6gtsxfE2HSTwqwuyNVa6xWyeyJ1XSA==", - "requires": { - "workbox-core": "6.4.2", - "workbox-routing": "6.4.2", - "workbox-strategies": "6.4.2" - } - }, - "workbox-range-requests": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.4.2.tgz", - "integrity": "sha512-SowF3z69hr3Po/w7+xarWfzxJX/3Fo0uSG72Zg4g5FWWnHpq2zPvgbWerBZIa81zpJVUdYpMa3akJJsv+LaO1Q==", - "requires": { - "workbox-core": "6.4.2" - } - }, - "workbox-recipes": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.4.2.tgz", - "integrity": "sha512-/oVxlZFpAjFVbY+3PoGEXe8qyvtmqMrTdWhbOfbwokNFtUZ/JCtanDKgwDv9x3AebqGAoJRvQNSru0F4nG+gWA==", - "requires": { - "workbox-cacheable-response": "6.4.2", - "workbox-core": "6.4.2", - "workbox-expiration": "6.4.2", - "workbox-precaching": "6.4.2", - "workbox-routing": "6.4.2", - "workbox-strategies": "6.4.2" - } - }, - "workbox-routing": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.4.2.tgz", - "integrity": "sha512-0ss/n9PAcHjTy4Ad7l2puuod4WtsnRYu9BrmHcu6Dk4PgWeJo1t5VnGufPxNtcuyPGQ3OdnMdlmhMJ57sSrrSw==", - "requires": { - "workbox-core": "6.4.2" - } - }, - "workbox-strategies": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.4.2.tgz", - "integrity": "sha512-YXh9E9dZGEO1EiPC3jPe2CbztO5WT8Ruj8wiYZM56XqEJp5YlGTtqRjghV+JovWOqkWdR+amJpV31KPWQUvn1Q==", - "requires": { - "workbox-core": "6.4.2" - } - }, - "workbox-streams": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.4.2.tgz", - "integrity": "sha512-ROEGlZHGVEgpa5bOZefiJEVsi5PsFjJG9Xd+wnDbApsCO9xq9rYFopF+IRq9tChyYzhBnyk2hJxbQVWphz3sog==", - "requires": { - "workbox-core": "6.4.2", - "workbox-routing": "6.4.2" - } - }, - "workbox-sw": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.4.2.tgz", - "integrity": "sha512-A2qdu9TLktfIM5NE/8+yYwfWu+JgDaCkbo5ikrky2c7r9v2X6DcJ+zSLphNHHLwM/0eVk5XVf1mC5HGhYpMhhg==" - }, - "workbox-webpack-plugin": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-6.4.2.tgz", - "integrity": "sha512-CiEwM6kaJRkx1cP5xHksn13abTzUqMHiMMlp5Eh/v4wRcedgDTyv6Uo8+Hg9MurRbHDosO5suaPyF9uwVr4/CQ==", - "requires": { - "fast-json-stable-stringify": "^2.1.0", - "pretty-bytes": "^5.4.1", - "source-map-url": "^0.4.0", - "upath": "^1.2.0", - "webpack-sources": "^1.4.3", - "workbox-build": "6.4.2" - } - }, - "workbox-window": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.4.2.tgz", - "integrity": "sha512-KVyRKmrJg7iB+uym/B/CnEUEFG9CvnTU1Bq5xpXHbtgD9l+ShDekSl1wYpqw/O0JfeeQVOFb8CiNfvnwWwqnWQ==", - "requires": { - "@types/trusted-types": "^2.0.2", - "workbox-core": "6.4.2" - } - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "ws": { - "version": "7.5.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.6.tgz", - "integrity": "sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==", - "dev": true, - "requires": {} - }, - "xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" - } - } -} diff --git a/package.json b/package.json deleted file mode 100644 index aaf1214..0000000 --- a/package.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "name": "budgetzen-app", - "version": "2.0.0", - "build": "iuf6sxAv", - "author": "Bruno Bernardino <me@brunobernardino.com>", - "license": "UNLICENSED", - "repository": { - "type": "git", - "url": "git+https://github.com/BrunoBernardino/budgetzen-web.git" - }, - "engines": { - "node": "16.13.1", - "npm": "8.2.0" - }, - "scripts": { - "test": "jest", - "dev": "next", - "build": "next build", - "start": "next start", - "lint": "eslint --ext .js,.jsx,.ts,.tsx . && tsc --noEmit", - "pretty": "prettier --write .", - "pretty/test": "prettier --check ." - }, - "dependencies": { - "@types/node": "17.0.6", - "@types/react": "17.0.38", - "@types/react-dom": "17.0.11", - "@types/styled-components": "5.1.19", - "axios": "0.27.2", - "ky": "0.28.7", - "moment": "2.29.1", - "next": "12.0.7", - "next-pwa": "5.4.4", - "react": "17.0.2", - "react-dom": "17.0.2", - "react-helmet": "6.1.0", - "react-svg-ionicons": "0.2.3", - "react-toggle-switch": "3.0.4", - "react-use": "17.3.2", - "rodal": "1.8.1", - "sass": "1.45.2", - "styled-components": "5.3.3", - "sweetalert2": "11.3.3", - "typescript": "4.5.4", - "userbase-js": "2.8.0" - }, - "devDependencies": { - "@types/enzyme": "3.10.11", - "@types/jest": "27.4.0", - "@types/react-helmet": "6.1.5", - "@typescript-eslint/eslint-plugin": "5.8.1", - "@typescript-eslint/parser": "5.8.1", - "@wojtekmaj/enzyme-adapter-react-17": "0.6.6", - "babel-core": "6.26.3", - "babel-eslint": "10.1.0", - "babel-jest": "27.4.5", - "babel-plugin-styled-components": "2.0.2", - "enzyme": "3.11.0", - "enzyme-adapter-react-16": "1.15.6", - "eslint": "8.6.0", - "eslint-config-airbnb": "19.0.4", - "eslint-config-prettier": "8.3.0", - "eslint-plugin-babel": "5.3.1", - "eslint-plugin-import": "2.25.3", - "eslint-plugin-jsx-a11y": "6.5.1", - "eslint-plugin-react": "7.28.0", - "expect": "27.4.2", - "expect-enzyme": "1.3.0", - "identity-obj-proxy": "3.0.0", - "jest": "27.4.5", - "prettier": "2.5.1", - "react-addons-test-utils": "15.6.2", - "react-test-renderer": "17.0.2", - "webpack": "5.65.0" - } -} diff --git a/pages/_app.tsx b/pages/_app.tsx deleted file mode 100644 index 34ed6ec..0000000 --- a/pages/_app.tsx +++ /dev/null @@ -1,38 +0,0 @@ -import React from 'react'; -import Head from 'next/head'; -import { AppProps } from 'next/app'; - -import { - defaultTitle, - defaultDescription, - defaultKeywords, -} from 'lib/constants'; - -import 'rodal/lib/rodal.css'; -import 'react-toggle-switch/dist/css/switch.min.css'; -import 'styles/main.scss'; -import 'styles/_common.scss'; - -try { - // @ts-ignore this is to prevent a problem with react-svg-ionicons - global.navigator = global.navigator || {}; -} catch (error) { - // Do nothing -} - -const MyApp = ({ Component, pageProps }: AppProps) => { - return ( - <> - <Head> - <title>{defaultTitle}</title> - <meta name="viewport" content="width=device-width, initial-scale=1" /> - <meta property="og:title" content={defaultTitle} /> - <meta name="description" content={defaultDescription} /> - <meta name="keywords" content={defaultKeywords} /> - </Head> - <Component {...pageProps} /> - </> - ); -}; - -export default MyApp; diff --git a/pages/_document.tsx b/pages/_document.tsx deleted file mode 100644 index 96568e2..0000000 --- a/pages/_document.tsx +++ /dev/null @@ -1,60 +0,0 @@ -import Document, { - DocumentContext, - Html, - Head, - Main, - NextScript, -} from 'next/document'; -import { ServerStyleSheet } from 'styled-components'; - -export default class MyDocument extends Document { - static async getInitialProps(ctx: DocumentContext) { - const sheet = new ServerStyleSheet(); - const originalRenderPage = ctx.renderPage; - - try { - ctx.renderPage = () => - originalRenderPage({ - enhanceApp: (App) => (props) => - sheet.collectStyles(<App {...props} />), - }); - - const initialProps = await Document.getInitialProps(ctx); - return { - ...initialProps, - styles: ( - <> - {initialProps.styles} - {sheet.getStyleElement()} - </> - ), - }; - } finally { - sheet.seal(); - } - } - - render() { - return ( - <Html lang="en"> - <Head> - <meta charSet="utf-8" /> - <meta name="theme-color" content="#ffffff" /> - <link rel="icon" type="image/png" href="/images/favicon.png" /> - <link rel="apple-touch-icon" href="/images/favicon.png" /> - <link rel="manifest" href="/manifest.json" /> - <link - rel="alternate" - type="application/rss+xml" - href="https://news.onbrn.com/rss.xml" - /> - </Head> - <body> - <Main /> - <NextScript /> - <script src="https://js.stripe.com/v3/" defer /> - </body> - </Html> - ); - } -} diff --git a/pages/billing.ts b/pages/billing.ts new file mode 100644 index 0000000..15cd551 --- /dev/null +++ b/pages/billing.ts @@ -0,0 +1,186 @@ +import { html, PageContentResult } from '../lib/utils.ts'; + +export function pageAction() { + return new Response('Not Implemented', { status: 501 }); +} + +export function pageContent() { + const htmlContent = html` + <section class="main-section"> + <h1>Billing</h1> + <section class="hero"> + <p>Billing is simple.</p> + <p>Below, you can easily cancel your subscription anytime and email me to ask for a refund. You can also update your payment details.</p> + </section> + <div data-has-invalid-session style="margin-top: 2rem;"> + <h2>Signup or Login first</h2> + <p>Before you can pay, you need to <a href="/">Signup or Login</a> first.</p> + </div> + <div data-has-valid-session class="hidden" id="subscription-info" style="margin-top: 2rem;"> + </div> + <div data-has-valid-session class="hidden" style="margin-top: 5rem;"> + <h2>Delete your account</h2> + <p> + You can delete your account which will cancel your subscription and delete your data. + </p> + <button class="delete-button" type="button" id="delete-account" style="margin: 2rem 0 1rem;"> + Delete account + </button> + </div> + </section> + <template id="valid-subscription"> + <section> + <h2>Thank you so much for your support!</h2> + <p>You're currently paying <strong class="subscription-value">...</strong>.</p> + <button class="secondary" type="button" id="update-payment" style="margin: 2rem auto 1rem;"> + Update payment details + </button> + <div id="subscription-is-not-canceled"> + <button class="delete-button" type="button" id="cancel-subscription" style="margin: 5rem auto 1rem;"> + Cancel subscription + </button> + <p> + The subscription will be canceled at the end of the current billing period. + </p> + </div> + <div class="hidden" id="subscription-is-canceled"> + <p style="margin-top: 5rem;"> + Your subscription is currently set to be canceled at the end of the current billing period. + </p> + <button class="secondary" type="button" id="resume-subscription" style="margin: 2rem auto 1rem;"> + Resume subscription + </button> + </div> + </section> + </template> + <template id="trial-subscription"> + <section> + <h2>You are on an active trial!</h2> + <p>If you're ready to pay, you probably want to check out the <a href="/pricing">pricing section</a> instead.</p> + </section> + </template> + <template id="invalid-subscription"> + <section> + <h2>Your subscription has expired!</h2> + <p>You probably want to check out the <a href="/pricing">pricing section</a> instead.</p> + </section> + </template> + <script type="text/javascript"> + (() => { + document.addEventListener('app-loaded', () => { + const subscriptionInfo = document.getElementById('subscription-info'); + const deleteAccountButton = document.getElementById('delete-account'); + async function updatePayment(event) { + event.preventDefault(); + event.stopPropagation(); + window.app.showLoading(); + await userbase.updatePaymentMethod({ + successUrl: window.location.href, + cancelUrl: window.location.href, + }); + } + async function cancelSubscription(event) { + const { userbase } = window; + event.preventDefault(); + event.stopPropagation(); + window.app.showLoading(); + await userbase.cancelSubscription(); + window.location.reload(); + } + async function resumeSubscription(event) { + const { userbase } = window; + event.preventDefault(); + event.stopPropagation(); + window.app.showLoading(); + await userbase.resumeSubscription(); + window.location.reload(); + } + async function deleteAccount(event) { + const { userbase } = window; + event.preventDefault(); + event.stopPropagation(); + const { isConfirmed } = await Swal.fire({ + title: 'Are you sure?', + text: 'You won\'t be able to recover your data!', + icon: 'warning', + showCancelButton: true, + confirmButtonColor: 'red', + confirmButtonText: 'Yes, delete it!', + }); + if (isConfirmed) { + window.app.showLoading(); + await userbase.deleteUser(); + window.location.reload(); + } + } + function getValidSubscriptionHtmlElement({ isSubscriptionCanceled, isSubscriptionMonthly }) { + const template = document.getElementById('valid-subscription'); + const clonedElement = template.content.firstElementChild.cloneNode(true); + const paymentTextElement = clonedElement.querySelector('.subscription-value'); + paymentTextElement.textContent = isSubscriptionMonthly ? '€2 / month' : '€18 / year'; + const notCanceledElement = clonedElement.querySelector('#subscription-is-not-canceled'); + const canceledElement = clonedElement.querySelector('#subscription-is-canceled'); + if (isSubscriptionCanceled) { + notCanceledElement.classList.add('hidden'); + canceledElement.classList.remove('hidden'); + } + return clonedElement; + } + function getInvalidSubscriptionHtmlElement() { + const template = document.getElementById('invalid-subscription'); + const clonedElement = template.content.firstElementChild.cloneNode(true); + return clonedElement; + } + function getTrialSubscriptionHtmlElement() { + const template = document.getElementById('trial-subscription'); + const clonedElement = template.content.firstElementChild.cloneNode(true); + return clonedElement; + } + async function updateUI() { + const userSession = await window.app.getUserSession(); + const isSubscriptionValid = userSession.subscriptionStatus === 'active'; + let trialDaysLeft = 30; + if (userSession.trialExpirationDate) { + const trialExpirationDate = new Date(userSession.trialExpirationDate); + trialDaysLeft = window.app.utils.dateDiffInDays(new Date(), trialExpirationDate); + } + const isTrialing = userSession.subscriptionStatus !== 'active' && trialDaysLeft > 0; + const isSubscriptionCanceled = Boolean(userSession.cancelSubscriptionAt); + const isSubscriptionMonthly = userSession.subscriptionPlanId === 'budget-zen-v2-monthly'; + subscriptionInfo.replaceChildren(); + if (isSubscriptionValid) { + const subscriptionElement = getValidSubscriptionHtmlElement({ isSubscriptionCanceled, isSubscriptionMonthly }); + subscriptionInfo.appendChild(subscriptionElement); + const updateButton = document.getElementById('update-payment'); + const cancelButton = document.getElementById('cancel-subscription'); + const resumeButton = document.getElementById('resume-subscription'); + updateButton.addEventListener('click', updatePayment); + cancelButton.addEventListener('click', cancelSubscription); + resumeButton.addEventListener('click', resumeSubscription); + } else if (isTrialing) { + const subscriptionElement = getTrialSubscriptionHtmlElement(); + subscriptionInfo.appendChild(subscriptionElement); + } else { + const subscriptionElement = getInvalidSubscriptionHtmlElement(); + subscriptionInfo.appendChild(subscriptionElement); + } + } + async function initializePage() { + await window.app.dataUtils.initializeDb(); + updateUI(); + } + if (window.app.isLoggedIn) { + initializePage(); + } + deleteAccountButton.addEventListener('click', deleteAccount); + }); + })(); + </script> + `; + + return { + htmlContent, + titlePrefix: 'Billing', + description: 'Simple billing for Budget Zen.', + } as PageContentResult; +} diff --git a/pages/billing.tsx b/pages/billing.tsx deleted file mode 100644 index da61233..0000000 --- a/pages/billing.tsx +++ /dev/null @@ -1,92 +0,0 @@ -import React, { useState, useEffect } from 'react'; -import moment from 'moment'; -import axios from 'axios'; - -import { Main } from 'components/Layout'; -import Billing from 'components/Panels/Billing'; -import Loading from 'components/Loading'; -import { getUserSession } from 'lib/utils'; -import { - defaultTitle, - defaultDescription, - defaultKeywords, - baseUrl, -} from 'lib/constants'; - -const BillingPage = () => { - const [isLoading, setIsLoading] = useState(true); - const [hasValidSession, setHasValidSession] = useState(false); - const [hasValidSubscription, setHasValidSubscription] = useState(false); - const [isTrialing, setIsTrialing] = useState(false); - const [isSubscriptionCanceled, setIsSubscriptionCanceled] = useState(false); - const [isSubscriptionMonthly, setIsSubscriptionMonthly] = useState(false); - - useEffect(() => { - const checkSession = async () => { - const userSession = await getUserSession(); - if (userSession) { - const trialDaysLeft = moment(userSession.trialExpirationDate).diff( - moment(), - 'days', - ); - setHasValidSession(true); - setHasValidSubscription(userSession.subscriptionStatus === 'active'); - setIsTrialing( - userSession.subscriptionStatus !== 'active' && trialDaysLeft > 0, - ); - setIsSubscriptionCanceled(Boolean(userSession.cancelSubscriptionAt)); - setIsSubscriptionMonthly( - userSession.subscriptionPlanId === 'budget-zen-v2-monthly', - ); - } - - setIsLoading(false); - }; - - checkSession(); - }, []); - - return ( - <Main - title={defaultTitle} - description={defaultDescription} - keywords={defaultKeywords} - hasValidSession={hasValidSession} - > - <div className="billing common"> - <Billing - hasValidSession={hasValidSession} - hasValidSubscription={hasValidSubscription} - isTrialing={isTrialing} - isSubscriptionCanceled={isSubscriptionCanceled} - isSubscriptionMonthly={isSubscriptionMonthly} - /> - </div> - <Loading isShowing={isLoading} /> - </Main> - ); -}; - -export const getServerSideProps = async ({ req }: { req: Request }) => { - // @ts-ignore it does exist - if (req && req.headers && !req.headers.host.startsWith('localhost')) { - const pathname = req.url; - - try { - await axios.post('https://stats.onbrn.com/api/event', { - domain: baseUrl.replace('https://', ''), - name: 'pageview', - url: `${baseUrl}${pathname}`, - }); - } catch (error) { - console.log('Failed to log pageview'); - console.error(error); - } - } - - return { - props: {}, - }; -}; - -export default BillingPage; diff --git a/pages/email-password.tsx b/pages/email-password.tsx deleted file mode 100644 index a492844..0000000 --- a/pages/email-password.tsx +++ /dev/null @@ -1,74 +0,0 @@ -import React, { useState, useEffect } from 'react'; -import axios from 'axios'; - -import { Main } from 'components/Layout'; -import EmailPassword from 'components/Panels/EmailPassword'; -import Loading from 'components/Loading'; -import { getUserSession } from 'lib/utils'; -import { - defaultTitle, - defaultDescription, - defaultKeywords, - baseUrl, -} from 'lib/constants'; - -const EmailPasswordPage = () => { - const [isLoading, setIsLoading] = useState(true); - const [hasValidSession, setHasValidSession] = useState(false); - const [currentEmail, setCurrentEmail] = useState(''); - - useEffect(() => { - const checkSession = async () => { - const userSession = await getUserSession(); - if (userSession) { - setHasValidSession(true); - setCurrentEmail(userSession.email); - } - - setIsLoading(false); - }; - - checkSession(); - }, []); - - return ( - <Main - title={defaultTitle} - description={defaultDescription} - keywords={defaultKeywords} - hasValidSession={hasValidSession} - > - <div className="email-password common"> - <EmailPassword - hasValidSession={hasValidSession} - currentEmail={currentEmail} - /> - </div> - <Loading isShowing={isLoading} /> - </Main> - ); -}; - -export const getServerSideProps = async ({ req }: { req: Request }) => { - // @ts-ignore it does exist - if (req && req.headers && !req.headers.host.startsWith('localhost')) { - const pathname = req.url; - - try { - await axios.post('https://stats.onbrn.com/api/event', { - domain: baseUrl.replace('https://', ''), - name: 'pageview', - url: `${baseUrl}${pathname}`, - }); - } catch (error) { - console.log('Failed to log pageview'); - console.error(error); - } - } - - return { - props: {}, - }; -}; - -export default EmailPasswordPage; diff --git a/pages/index.ts b/pages/index.ts new file mode 100644 index 0000000..9b67caf --- /dev/null +++ b/pages/index.ts @@ -0,0 +1,326 @@ +import { html, PageContentResult } from '../lib/utils.ts'; + +export function pageAction() { + return new Response('Not Implemented', { status: 501 }); +} + +export function pageContent() { + const htmlContent = html` + <section class="main-section"> + <div data-has-invalid-session> + <h1>Simple + Encrypted Budget Management</h1> + <section class="hero"> + <p> + Budget Zen is a simple and <strong>encrypted</strong> budget management + app. You can <a href="https://budgetzen.net">learn more about it here</a>, as this + is the app. + </p> + <p> + Currently it's available on every device via web browser, and you + can browse its source code. + </p> + <p> + You have a <strong>30-day free trial</strong> (no credit card + required), and at the end, you can pay <strong>€18 / year</strong>, + or <strong>€2 / month</strong>, no limits. + </p> + <form id="login-form"> + <fieldset class="input-wrapper"> + <label for="email">Email</label> + <input + id="email" + type="email" + placeholder="you@example.com" + name="email" + /> + </fieldset> + <fieldset class="input-wrapper"> + <label for="password">Password / Encryption Key</label> + <input + id="password" + type="password" + placeholder="something secret" + name="password" + /> + </fieldset> + <div class="buttons-wrapper"> + <button type="submit" id="login-button"> + Login + </button> + <span class="or">or</span> + <button type="button" id="signup-button"> + Signup + </button> + </div> + </form> + <p> + When you signup, you're agreeing with the <a href="https://budgetzen.net/terms">Terms of Service</a>. + </p> + <p> + Note that logging in will take up a few seconds. This is intentional, in order to generate a safer assymetric encryption key. After logging in, the app should be blazing fast in any device. + </p> + </section> + <h2>Need help?</h2> + <p> + If you're having any issues or have any questions, <strong><a href="mailto:me@brunobernardino.com">please reach out</a></strong>. + </p> + </div> + + <div data-has-valid-session class="hidden panels"> + <div class="left-panel"> + <div class="panels"> + <section class="expenses-wrapper"> + <section class="expenses-filter-wrapper"> + <form id="expenses-filter"> + <fieldset class="input-wrapper"> + <input + id="expenses-filter-search" + placeholder="Search for an expense" + autocomplete="off" + type="text" + /> + </fieldset> + </form> + <button id="budgets-filter-button" type="button">≡</button> + </section> + <section id="expenses"> + + </section> + </section> + <section class="budgets-wrapper"> + <section id="month-navigation"> + <svg id="month-navigation-previous" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Pro 6.1.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2022 Fonticons, Inc. --><path d="M224 480c-8.188 0-16.38-3.125-22.62-9.375l-192-192c-12.5-12.5-12.5-32.75 0-45.25l192-192c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25L77.25 256l169.4 169.4c12.5 12.5 12.5 32.75 0 45.25C240.4 476.9 232.2 480 224 480z"/></svg> + <span id="current-month">...</span> + <svg id="month-navigation-next" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Pro 6.1.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2022 Fonticons, Inc. --><path d="M96 480c-8.188 0-16.38-3.125-22.62-9.375c-12.5-12.5-12.5-32.75 0-45.25L242.8 256L73.38 86.63c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l192 192c12.5 12.5 12.5 32.75 0 45.25l-192 192C112.4 476.9 104.2 480 96 480z"/></svg> + </section> + + <section id="budgets"> + </section> + + <button type="button" id="add-budget-button">Add Budget</button> + </section> + </div> + </div> + <section id="add-expense"> + <form id="add-expense-form"> + <span class="text"> + Fill out the form below to add a new expense. + </span> + <fieldset class="input-wrapper"> + <label for="expense-cost">Cost</label> + <input + id="expense-cost" + placeholder="10.99" + autocomplete="off" + type="text" + inputmode="decimal" + /> + </fieldset> + <fieldset class="input-wrapper"> + <label for="expense-description">Description</label> + <input + id="expense-description" + placeholder="Volunteering" + autocomplete="off" + type="text" + /> + </fieldset> + <fieldset class="input-wrapper"> + <label for="expense-budget">Budget</label> + <select + id="expense-budget" + placeholder="Misc" + autocomplete="off" + ></select> + </fieldset> + <fieldset class="input-wrapper"> + <label for="expense-date">Date</label> + <input + id="expense-date" + placeholder="Today" + autocomplete="off" + type="date" + /> + </fieldset> + + <button type="submit" id="add-expense-button">Add Expense</button> + </form> + </section> + </div> + </section> + <template id="expense-item"> + <section class="expense-item" data-id="{expense.id}"> + <article> + <span class="cost">{expense.cost}</span> + <span class="budget">{expense.budget}</span> + </article> + <span class="description">{expense.description}</span> + <time>{expense.date}</time> + </section> + </template> + <template id="budget-item"> + <section class="budget-item" data-name="{budget.name}"> + <article> + <span class="cost">{budget.expensesCost} of {budget.value}</span> + <span class="name">{budget.name}</span> + </article> + <span class="missing">{budget.missing}</span> + </section> + </template> + <template id="budget-select-option"> + <option>{budget.name}</option> + </template> + <template id="edit-expense-modal"> + <swal-title> + Edit expense + </swal-title> + <swal-html> + <form id="edit-expense-form"> + <fieldset class="input-wrapper"> + <label for="edit-expense-cost">Cost</label> + <input + id="edit-expense-cost" + placeholder="10.99" + autocomplete="off" + type="text" + inputmode="decimal" + /> + </fieldset> + <fieldset class="input-wrapper"> + <label for="edit-expense-description">Description</label> + <input + id="edit-expense-description" + placeholder="Volunteering" + autocomplete="off" + type="text" + /> + </fieldset> + <fieldset class="input-wrapper"> + <label for="edit-expense-budget">Budget</label> + <select + id="edit-expense-budget" + placeholder="Misc" + autocomplete="off" + ></select> + </fieldset> + <fieldset class="input-wrapper"> + <label for="edit-expense-date">Date</label> + <input + id="edit-expense-date" + placeholder="Today" + autocomplete="off" + type="date" + /> + </fieldset> + </form> + </swal-html> + <swal-button type="confirm"> + Save + </swal-button> + <swal-button type="cancel"> + Cancel + </swal-button> + <swal-button type="deny"> + Delete + </swal-button> + </template> + <template id="edit-budget-modal"> + <swal-title> + Edit budget + </swal-title> + <swal-html> + <form id="edit-budget-form"> + <fieldset class="input-wrapper"> + <label for="edit-budget-name">Name</label> + <input + id="edit-budget-name" + placeholder="Food" + autocomplete="off" + type="text" + /> + </fieldset> + <fieldset class="input-wrapper"> + <label for="edit-budget-value">Value</label> + <input + id="edit-budget-value" + placeholder="100" + autocomplete="off" + type="text" + inputmode="decimal" + /> + </fieldset> + <fieldset class="input-wrapper"> + <label for="edit-budget-month">Month</label> + <input + id="edit-budget-month" + placeholder="Today" + autocomplete="off" + type="date" + /> + </fieldset> + </form> + </swal-html> + <swal-button type="confirm"> + Save + </swal-button> + <swal-button type="cancel"> + Cancel + </swal-button> + <swal-button type="deny"> + Delete + </swal-button> + </template> + <template id="budgets-filter-modal"> + <swal-title> + Filter by Budgets + </swal-title> + <swal-html> + <form id="budgets-filter-form"> + </form> + </swal-html> + <swal-button type="cancel"> + Close + </swal-button> + </template> + <template id="budgets-filter-modal-budget-item"> + <fieldset class="input-wrapper"> + <label for="budget-filter-name-{budget.id}" class="checkbox"> + <span>{budget.name}</span> + <input + id="budget-filter-name-{budget.id}" + type="checkbox" + value="{budget.name}" + /> + </label> + </fieldset> + </template> + <template id="choose-month-modal"> + <swal-title> + Navigate to month + </swal-title> + <swal-html> + <form id="choose-month-form"> + <fieldset class="input-wrapper"> + <label for="choose-month-input">Month</label> + <input + id="choose-month-input" + type="date" + /> + </fieldset> + </form> + </swal-html> + <swal-button type="confirm"> + Go + </swal-button> + <swal-button type="cancel"> + Cancel + </swal-button> + </template> + <script src="/public/js/index.js"></script> + `; + + return { + htmlContent, + titlePrefix: '', + } as PageContentResult; +} diff --git a/pages/index.tsx b/pages/index.tsx deleted file mode 100644 index 19e3dfa..0000000 --- a/pages/index.tsx +++ /dev/null @@ -1,67 +0,0 @@ -import React, { useState, useEffect } from 'react'; -import axios from 'axios'; - -import { Main } from 'components/Layout'; -import Login from 'components/Panels/Login'; -import AllPanels from 'components/Panels/All'; -import Loading from 'components/Loading'; -import { isLoggedIn } from 'lib/utils'; -import { - defaultTitle, - defaultDescription, - defaultKeywords, - baseUrl, -} from 'lib/constants'; - -const IndexPage = () => { - const [isLoading, setIsLoading] = useState(true); - const [hasValidSession, setHasValidSession] = useState(false); - - useEffect(() => { - const checkSession = async () => { - const isUserLoggedIn = await isLoggedIn(); - setHasValidSession(isUserLoggedIn); - setIsLoading(false); - }; - - checkSession(); - }, []); - - return ( - <Main - title={defaultTitle} - description={defaultDescription} - keywords={defaultKeywords} - hasValidSession={hasValidSession} - > - <div className="index common"> - {!hasValidSession ? <Login /> : <AllPanels />} - </div> - <Loading isShowing={isLoading} /> - </Main> - ); -}; - -export const getServerSideProps = async ({ req }: { req: Request }) => { - // @ts-ignore it does exist - if (req && req.headers && !req.headers.host.startsWith('localhost')) { - const pathname = req.url; - - try { - await axios.post('https://stats.onbrn.com/api/event', { - domain: baseUrl.replace('https://', ''), - name: 'pageview', - url: `${baseUrl}${pathname}`, - }); - } catch (error) { - console.log('Failed to log pageview'); - console.error(error); - } - } - - return { - props: {}, - }; -}; - -export default IndexPage; diff --git a/pages/pricing.ts b/pages/pricing.ts new file mode 100644 index 0000000..5020211 --- /dev/null +++ b/pages/pricing.ts @@ -0,0 +1,126 @@ +import { html, PageContentResult } from '../lib/utils.ts'; + +export function pageAction() { + return new Response('Not Implemented', { status: 501 }); +} + +export function pageContent() { + const htmlContent = html` + <section class="main-section"> + <h1>Pricing</h1> + <section class="hero"> + <p>Pricing is simple.</p> + <p>You have a <strong>30-day free trial</strong> (no credit card required), and at the end, you can pay <strong>€18 / year</strong>, or <strong>€2 / month</strong>, no limits.</p> + </section> + <div data-has-invalid-session> + <h2>Signup or Login first</h2> + <p>Before you can pay, you need to <a href="/">Signup or Login</a> first.</p> + </div> + <div data-has-valid-session class="hidden" id="subscription-info"> + </div> + </section> + <template id="valid-subscription"> + <section> + <h2>You're already a customer!</h2> + <p> + You probably want to check out the <a href="/billing">billing section</a> instead. + </p> + </section> + </template> + <template id="trial-subscription"> + <section> + <p class="expiration"> + ... + </p> + <div class="buttons-wrapper"> + <button class="secondary" type="button" id="subscribe-month"> + Pay €2 / month + </button> + <span class="or">or</span> + <button type="button" id="subscribe-year"> + Pay €18 / year + </button> + </div> + </section> + </template> + <script type="text/javascript"> + (() => { + document.addEventListener('app-loaded', () => { + const subscriptionInfo = document.getElementById('subscription-info'); + async function subscribeMonthly(event) { + event.preventDefault(); + event.stopPropagation(); + await userbase.purchaseSubscription({ + successUrl: window.location.href, + cancelUrl: window.location.href, + priceId: 'budget-zen-v2-monthly', + }); + } + async function subscribeYearly(event) { + event.preventDefault(); + event.stopPropagation(); + await userbase.purchaseSubscription({ + successUrl: window.location.href, + cancelUrl: window.location.href, + priceId: 'budget-zen-v2-annual', + }); + } + function getValidSubscriptionHtmlElement() { + const template = document.getElementById('valid-subscription'); + const clonedElement = template.content.firstElementChild.cloneNode(true); + return clonedElement; + } + function getTrialSubscriptionHtmlElement(trialDaysLeft) { + const template = document.getElementById('trial-subscription'); + const clonedElement = template.content.firstElementChild.cloneNode(true); + const expirationTextElement = clonedElement.querySelector('.expiration'); + const message = ['Your trial']; + if (trialDaysLeft > 0) { + message.push('will expire in'); + message.push(trialDaysLeft); + message.push(trialDaysLeft === 1 ? 'day.' : 'days.'); + } else { + message.push('has expired.'); + } + expirationTextElement.textContent = message.join(' '); + return clonedElement; + } + async function updateUI() { + const userSession = await window.app.getUserSession(); + const isSubscriptionValid = userSession.subscriptionStatus === 'active'; + let trialDaysLeft = 30; + if (userSession.trialExpirationDate) { + const trialExpirationDate = new Date(userSession.trialExpirationDate); + trialDaysLeft = window.app.utils.dateDiffInDays(new Date(), trialExpirationDate); + } + subscriptionInfo.replaceChildren(); + if (isSubscriptionValid) { + const subscriptionElement = getValidSubscriptionHtmlElement(); + subscriptionInfo.appendChild(subscriptionElement); + } else { + const subscriptionElement = getTrialSubscriptionHtmlElement(trialDaysLeft); + subscriptionInfo.appendChild(subscriptionElement); + const subscribeMonthButton = document.getElementById('subscribe-month'); + const subscribeYearButton = document.getElementById('subscribe-year'); + subscribeMonthButton.addEventListener('click', subscribeMonthly); + subscribeYearButton.addEventListener('click', subscribeYearly); + } + } + async function initializePage() { + await window.app.dataUtils.initializeDb(); + updateUI(); + } + if (window.app.isLoggedIn) { + initializePage(); + } + }); + })(); + </script> + `; + + return { + htmlContent, + titlePrefix: 'Pricing', + description: 'Simple pricing for Budget Zen.', + } as PageContentResult; +} diff --git a/pages/pricing.tsx b/pages/pricing.tsx deleted file mode 100644 index fbef049..0000000 --- a/pages/pricing.tsx +++ /dev/null @@ -1,84 +0,0 @@ -import React, { useState, useEffect } from 'react'; -import moment from 'moment'; -import axios from 'axios'; - -import { Main } from 'components/Layout'; -import Pricing from 'components/Panels/Pricing'; -import Loading from 'components/Loading'; -import { getUserSession } from 'lib/utils'; -import { - defaultTitle, - defaultDescription, - defaultKeywords, - baseUrl, -} from 'lib/constants'; - -const PricingPage = () => { - const [isLoading, setIsLoading] = useState(true); - const [hasValidSession, setHasValidSession] = useState(false); - const [hasValidSubscription, setHasValidSubscription] = useState(false); - const [trialDaysLeft, setTrialDaysLeft] = useState(30); - - useEffect(() => { - const checkSession = async () => { - const userSession = await getUserSession(); - if (userSession) { - setHasValidSession(true); - setHasValidSubscription(userSession.subscriptionStatus === 'active'); - if (userSession.subscriptionStatus !== 'trialing') { - const daysLeft = moment(userSession.trialExpirationDate).diff( - moment(), - 'days', - ); - setTrialDaysLeft(daysLeft < 0 ? 0 : daysLeft); - } - } - - setIsLoading(false); - }; - - checkSession(); - }, []); - - return ( - <Main - title={defaultTitle} - description={defaultDescription} - keywords={defaultKeywords} - hasValidSession={hasValidSession} - > - <div className="pricing common"> - <Pricing - hasValidSession={hasValidSession} - hasValidSubscription={hasValidSubscription} - trialDaysLeft={trialDaysLeft} - /> - </div> - <Loading isShowing={isLoading} /> - </Main> - ); -}; - -export const getServerSideProps = async ({ req }: { req: Request }) => { - // @ts-ignore it does exist - if (req && req.headers && !req.headers.host.startsWith('localhost')) { - const pathname = req.url; - - try { - await axios.post('https://stats.onbrn.com/api/event', { - domain: baseUrl.replace('https://', ''), - name: 'pageview', - url: `${baseUrl}${pathname}`, - }); - } catch (error) { - console.log('Failed to log pageview'); - console.error(error); - } - } - - return { - props: {}, - }; -}; - -export default PricingPage; diff --git a/pages/settings.ts b/pages/settings.ts new file mode 100644 index 0000000..71df7ee --- /dev/null +++ b/pages/settings.ts @@ -0,0 +1,113 @@ +import { html, PageContentResult } from '../lib/utils.ts'; + +export function pageAction() { + return new Response('Not Implemented', { status: 501 }); +} + +export function pageContent() { + const htmlContent = html` + <section class="main-section"> + <h1>Settings</h1> + <section class="hero" data-has-invalid-session> + <p>Before you can change your settings, you need to <a href="/">Signup or Login</a> first.</p> + </section> + <section class="hidden" data-has-valid-session> + <h2>Change currency</h2> + <p>When you change the currency, it only affects the displayed numbers for this client/browser. It won't make any currency conversions.</p> + <form id="change-currency-form"> + <fieldset class="input-wrapper"> + <label for="new-currency">Currency</label> + <select + id="new-currency" + placeholder="$" + name="new-currency" + > + <option>$</option> + <option>€</option> + <option>£</option> + <option>¥</option> + <option>₹</option> + </select> + </fieldset> + <button type="submit" id="change-currency-button"> + Change currency + </button> + </form> + </section> + <section class="hidden" data-has-valid-session style="margin-top: 2rem;"> + <h2>Import/Export data</h2> + <p> + You can import a JSON file exported from Budget Zen (v1 or v2) before. <a href="https://budgetzen.net/import-export-file-format">Learn more about the file format</a>. + </p> + <div class="buttons-wrapper"> + <button type="button" id="import-button"> + Import data + </button> + <span class="or"> </span> + <button type="button" id="export-button"> + Export data + </button> + </div> + </section> + <section class="hidden" data-has-valid-session style="margin-top: 2rem;"> + <h2>Change Email</h2> + <p> + When you change your email or password, you'll need to login in other devices again. + </p> + <form id="change-email-form"> + <fieldset class="input-wrapper"> + <label for="new-email">New Email</label> + <input + id="new-email" + type="email" + placeholder="you@example.com" + name="new-email" + /> + </fieldset> + <button type="submit" id="change-email-button"> + Change email + </button> + </form> + </section> + <section class="hidden" data-has-valid-session style="margin-top: 2rem;"> + <h2>Change Password / Encryption Key</h2> + <form id="change-password-form"> + <fieldset class="input-wrapper"> + <label for="current-password">Current Password / Encryption Key</label> + <input + id="current-password" + type="password" + placeholder="something secret" + name="current-password" + /> + </fieldset> + <fieldset class="input-wrapper"> + <label for="new-password">New Password / Encryption Key</label> + <input + id="new-password" + type="password" + placeholder="something even more secret" + name="new-password" + /> + </fieldset> + <button type="submit" id="change-password-button"> + Change password / encryption key + </button> + </form> + </section> + <section class="hidden" data-has-valid-session style="margin-top: 2rem;"> + <h2>Delete account</h2> + <p> + You can delete your account and cancel your subscription from the <a href="/billing">billing section</a>. + </p> + </section> + </section> + <script src="/public/js/settings.js"></script> + `; + + return { + htmlContent, + titlePrefix: 'Settings', + description: 'Settings for Budget Zen.', + } as PageContentResult; +} diff --git a/public/css/style.css b/public/css/style.css new file mode 100644 index 0000000..d6c8e35 --- /dev/null +++ b/public/css/style.css @@ -0,0 +1,781 @@ +/* http://meyerweb.com/eric/tools/css/reset/ + v2.0 | 20110126 + License: none (public domain) +*/ + +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td, +article, aside, canvas, details, embed, +figure, figcaption, footer, header, hgroup, +menu, nav, output, ruby, section, summary, +time, mark, audio, video { + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + font: inherit; + vertical-align: baseline; +} +/* HTML5 display-role reset for older browsers */ +article, aside, details, figcaption, figure, +footer, header, hgroup, menu, nav, section { + display: block; +} +body { + line-height: 1; +} +ol, ul { + list-style: none; +} +blockquote, q { + quotes: none; +} +blockquote:before, blockquote:after, +q:before, q:after { + content: ''; + content: none; +} +table { + border-collapse: collapse; + border-spacing: 0; +} + +/* Variables */ + +:root { + --color-dark-background: #101010; + --color-background: #222; + --color-text: #f3f3f3; + --color-link: #ccc; + --color-link-hover: #fff; + --color-link-hover-dark: #303030; + --max-width: 1024px; + --min-width: 320px; +} + +/* Base/Custom */ + +html, +body { + font: 16px/16px 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', + 'Fira Sans', 'Droid Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; + background: var(--color-background); + background-size: cover; + color: var(--color-text); +} +pre, code { + font-family: 'Courier New', Courier, monospace; +} +code { + background-color: var(--color-background); +} + +a { + color: var(--color-link); + text-decoration: underline; + transition: all 80ms ease-in; +} + +a:hover, +a:focus { + text-decoration: none; + color: var(--color-link-hover); +} + +h1, h2, h3, strong { + font-weight: bold; +} + +.wrapper { + margin: 0 auto; + display: block; + max-width: var(--max-width); + min-width: var(--min-width); +} + +header { + display: block; + text-align: center; + padding: 0 0 1rem; + background-color: var(--color-dark-background); +} + +@media only screen and (min-width: 600px) { + header { + padding: 1.3rem 0; + } + + header .wrapper { + display: flex; + flex: 1; + flex-wrap: nowrap; + align-items: center; + justify-content: space-between; + } +} + +header h1 { + font-size: 1rem; + line-height: 1rem; + font-weight: 100; +} + +header h1 a { + text-decoration: none; + display: block; +} + +header h1 a:hover { + opacity: 0.7; +} + +header h1 img { + width: 160px; +} + +header nav ul { + display: flex; + flex: 1; + margin: 20px auto; + flex-wrap: wrap; + align-items: center; + justify-content: center; +} + +@media only screen and (min-width: 600px) { + header nav ul { + flex-wrap: nowrap; + justify-content: flex-end; + } +} + +header nav ul li { + display: block; + margin: 0 0.3rem 0.3rem; +} + +@media only screen and (min-width: 600px) { + header nav ul li { + margin: 0 0.3rem; + } +} + +header nav ul li a { + display: block; + padding: 0.5rem; + text-decoration: none; + font-weight: bold; + font-size: 1.1rem; + color: var(--color-link); +} +header nav ul li a:hover, +header nav ul li a:focus { + text-decoration: underline; + color: var(--color-link-hover); +} + +header nav ul li.active a { + color: var(--color-link-hover); + text-decoration: underline; +} + +footer { + display: block; + padding: 20px 10px; + margin: 20px auto 0; + text-align: center; + background-color: var(--color-dark-background); +} + +footer .faq { + display: block; + padding: 1em 2em 2em; + border-bottom: 1px solid #333; +} + +footer .faq h3 { + font-size: 1.3em; + font-weight: 500; + line-height: 1.5em; + margin-bottom: 1em; +} + +footer .faq-items { + display: block; + max-width: 100%; + margin: 0 auto; +} + +@media only screen and (min-width: 600px) { + footer .faq-items { + display: flex; + flex: 1; + flex-wrap: wrap; + justify-content: center; + align-items: center; + width: var(--max-width); + } +} + +footer .faq-item { + display: block; + margin: 1em 1em 2em; + text-align: left; + line-height: 1.4em; + font-size: 0.9em; + text-align: center; +} + +@media only screen and (min-width: 600px) { + footer .faq-item { + margin: 1em; + width: 45%; + } +} + +footer .faq-item h4 { + font-size: 1.1em; + font-weight: 500; + margin-bottom: 0.2em; +} + +footer .links { + font-size: 0.8rem; + line-height: 1rem; + font-weight: 400; + margin-top: 1.5em; +} + +footer .links a { + text-decoration: underline; + margin: 0 0.5rem; +} + +footer .links a:hover, +footer .links a:focus { + text-decoration: none; +} + +footer .links span.by { + margin-left: 0.5rem; + margin-right: -0.4rem; +} + +#loading { + position: fixed; + top: 0; + left: 0; + display: flex; + align-items: center; + justify-content: center; + width: 100%; + height: 100%; + z-index: 10000; + background: rgba(0, 0, 0, 0.7); + transition: all 200ms ease-in-out; + visibility: visible; + opacity: 1; +} + +#loading svg path, +#loading svg rect { + fill: rgba(255, 255, 255, 0.8); +} + +#loading.hide { + opacity: 0; + visibility: hidden; +} + +hr { + border: 0; + height: 1px; + width: 20%; + position: relative; + margin: 5rem auto; + background: var(--color-link-hover); +} + +hr:before { + content: ""; + width: 6px; + height: 6px; + background: var(--color-link-hover); + display: inline-block; + border: 2px solid var(--color-link-hover); + position: absolute; + top: -5px; + left: 50%; + margin: 0 0 0 -3px; + transform:rotate(45deg); +} + +button, a.button { + margin: 1rem auto; + padding: 1rem 1.5rem; + font-size: 1.2rem; + border: none; + border-radius: 3px; + color: var(--color-text); + background: var(--color-link-hover-dark); + cursor: pointer; + transition: all 80ms ease-in-out; + text-decoration: none; +} + +button:hover, +button:active, +button:focus, +a.button:hover, +a.button:active, +a.button:focus { + background: var(--color-link); + color: var(--color-background); +} + +button.secondary, +a.button.secondary { + padding: 0.8rem 1.2rem; + font-size: 1.1rem; + background-color: #666; +} +button.secondary:hover, +button.secondary:active, +button.secondary:focus, +a.button.secondary:hover, +a.button.secondary:active, +a.button.secondary:focus { + background-color: #999; +} + +.delete-button { + background:rgb(161, 0, 0); + color: #fff; + margin-left: 1rem; + margin-right: 1rem; +} + +.input-wrapper { + display: block; + border: none; + margin: 2rem 0 1rem; + transition: all 100ms ease-in-out; +} + +.input-wrapper > label { + font-size: 1rem; + display: block; + margin-bottom: 0.5rem; + font-weight: bold; + color: var(--color-link-hover-dark); + text-align: left; +} + +.input-wrapper > label.checkbox { + cursor: pointer; + display: inline-block; +} + +#add-expense-form .input-wrapper>label { + color: var(--color-link); +} + +.input-wrapper input[type="text"], +.input-wrapper input[type="date"], +.input-wrapper input[type="datetime"], +.input-wrapper input[type="email"], +.input-wrapper input[type="number"], +.input-wrapper input[type="search"], +.input-wrapper input[type="time"], +.input-wrapper input[type="url"], +.input-wrapper input[type="password"], +.input-wrapper textarea, +.input-wrapper select +{ + box-sizing: border-box; + width: 100%; + display: block; + outline: none; + border: none; + height: 2.5rem; + line-height: 2.5rem; + font-size: 1.1rem; + padding: 0.5rem 1rem; + border: 1px solid #fff; + background: #fff; + border-radius: 3px; + transition: all 80ms ease-in-out; +} +.input-wrapper input[type="text"]:focus, +.input-wrapper input[type="date"]:focus, +.input-wrapper input[type="datetime"]:focus, +.input-wrapper input[type="email"]:focus, +.input-wrapper input[type="number"]:focus, +.input-wrapper input[type="search"]:focus, +.input-wrapper input[type="time"]:focus, +.input-wrapper input[type="url"]:focus, +.input-wrapper input[type="password"]:focus, +.input-wrapper textarea:focus, +.input-wrapper select:focus +{ + border-color: var(--color-link-hover); +} + +.input-wrapper textarea { + min-height: 10rem; + resize: vertical; +} + +.hidden { + display: none !important; +} + +.error, +.success, +.warning { + padding: 1.5rem; + margin-bottom: 1.5rem; + border-radius: 3px; + border-bottom: 3px solid rgb(161, 0, 0); + color: var(--color-text); + background-image: linear-gradient(rgb(255, 166, 166), #faa); + box-shadow: 0 5px 10px rgba(0, 0, 0, .3); +} + +.success { + border-color: rgb(0, 161, 0); + background-image: linear-gradient(rgb(166, 255, 166), #afa); +} + +.warning { + border-color: rgb(161, 158, 0); + background-image: linear-gradient(rgb(251, 255, 170), rgb(245, 245, 133)); +} + +.error h3, +.success h3, +.warning h3, +.error p, +.success p, +.warning p { + font-size: 1.1rem; + font-weight: bold; + color: var(--color-text); + margin-bottom: 1rem; +} + +.error p, +.success p, +.warning p { + font-size: 1rem; + font-weight: normal; +} + +.no-data { + color: #ccc; + text-align: center; + font-size: 0.9rem; + display: block; +} + +/* Index */ +.main-section { + margin: 2rem auto; + padding: 0 1rem 2rem; + min-height: 50vh; +} + +@media only screen and (min-width: 600px) { + .main-section { + padding: 0 0 2rem; + } +} + +.main-section p { + font-size: 1rem; + line-height: 1.7rem; + margin-bottom: 1rem; +} + +.main-section ul { + font-size: 1rem; + line-height: 1.7rem; + margin-bottom: 1rem; + list-style: none; +} + +.main-section h1 { + font-size: 2rem; + line-height: 3rem; + margin-bottom: 2rem; + font-weight: bold; + color: var(--color-link); +} + +.main-section h2 { + font-size: 1.5rem; + line-height: 2rem; + margin-bottom: 1rem; + font-weight: bold; + color: var(--color-link-hover); +} + +.buttons-wrapper { + margin: 0 auto; + display: flex; + align-items: center; + width: fit-content; +} + +.or { + margin: 0 1.5rem; +} + +.expense-item, +.budget-item { + display: flex; + flex: 1; + flex-direction: row; + justify-content: space-between; + align-items: flex-start; + padding: 1rem 1.5rem; + border-radius: 3px; + box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.1); + background-color: #f0f0f0; + margin: 0.5rem; + cursor: pointer; + min-width: 200px; +} + +.expense-item:hover, +.budget-item:hover { + box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.3); +} + +.expense-item article, +.budget-item article { + display: flex; + flex: 1; + flex-direction: column; + text-align: left; +} + +.budget-item article { + flex-grow: 2; +} + +.expense-item article span, +.budget-item article span { + color: #333; + font-size: 0.9rem; + font-weight: normal; + text-align: left; + margin-top: 5px; +} + +.expense-item span.description { + color: #333; + font-size: 1rem; + font-weight: normal; + text-align: left; + flex: 1; + flex-grow: 2; +} + +.expense-item article span.cost, +.budget-item article span.cost { + font-size: 1rem; + font-weight: bold; + margin-top: 0; +} + +.budget-item.total { + background-color: #fff; + cursor: inherit; +} + +.budget-item span.missing { + color: #666; + text-align: right; + flex: 1; + font-size: 1rem; +} + +.expense-item time { + color: #666; + font-size: 0.9rem; + font-weight: normal; + text-align: right; + text-transform: uppercase; +} + +.panels { + display: flex; + flex: 1; + justify-content: center; + align-items: flex-start; + flex-direction: column-reverse; + max-width: 100vw; +} + +@media only screen and (min-width: 600px) { + .panels { + flex-direction: row; + } +} + +.left-panel { + display: flex; + flex: 1; + justify-content: flex-start; + align-items: center; + /* flex-direction: column; */ +} + +.expenses-wrapper { + display: flex; + flex-direction: column; + flex: 1; + margin: 20px 10px; + max-height: 100vh; + overflow: auto; + min-height: 30vh; + min-width: calc(80vw - 20px); + width: calc(100vw - 50px); +} + +@media only screen and (min-width: 600px) { + .expenses-wrapper { + margin: 0 20px; + min-width: auto; + width: auto; + } +} + +.expenses-wrapper .expenses-filter-wrapper { + display: flex; + margin: 20px 0.5rem; +} + +#expenses-filter .input-wrapper { + margin: 0 1rem 0 0; +} + +#expenses-filter .input-wrapper input { + font-size: 1rem; +} + +#budgets-filter-button { + padding: 0.5rem 1rem; + margin: 0; +} + +#budgets-filter-button.active { + background-color: var(--color-link); + color: var(--color-dark-background); +} + +#budgets-filter-form .input-wrapper { + margin: 0.5rem 0; +} + +#budgets-filter-form .input-wrapper > label { + display: flex; + justify-content: space-between; + padding: 0.5rem; + transition: all 60ms ease-in-out; +} + +#budgets-filter-form .input-wrapper > label:hover { + background-color: var(--color-link); +} + +#add-expense { + display: flex; + flex-direction: column; + flex: 1; + padding: 0; + margin: 10px 0 30px; +} + +@media only screen and (min-width: 600px) { + #add-expense { + max-width: 320px; + margin-top: 5px; + margin-bottom: 10px; + } +} + +#add-expense-form { + display: flex; + flex-direction: column; + flex: 1; + background-color: rgba(0, 0, 0, 0.1); + padding: 0 16px; + border-radius: 5px; + margin-top: 20px; + margin-right: -2px; +} + +#month-navigation { + display: flex; + margin: 20px 0; + align-items: center; + flex-direction: row; + justify-content: space-between; + user-select: none; +} + +#month-navigation-previous, #month-navigation-next { + width: 16px; + cursor: pointer; + padding: 5px 10px; + fill: var(--color-link); +} + +#current-month { + color: var(--color-link); + flex: 1; + padding: 0 20px; + font-size: 24px; + line-height: 24px; + font-weight: bold; + text-align: center; + cursor: pointer; +} + +.budgets-wrapper { + display: flex; + flex-direction: column; + flex: 1; + margin: 20px 10px; + width: calc(100vw - 50px); +} + +@media only screen and (min-width: 600px) { + .budgets-wrapper { + width: auto; + margin: 0 15px 0 0; + } +} + +#budgets { + margin-top: 5px; +} + +.text { + color: #ccc; + text-align: center; + align-items: center; + flex: 1; + display: flex; + font-size: 14px; + margin: 1rem 2rem; +} diff --git a/public/js/index.js b/public/js/index.js new file mode 100644 index 0000000..ef375a9 --- /dev/null +++ b/public/js/index.js @@ -0,0 +1,695 @@ +(() => { + document.addEventListener('app-loaded', () => { + const loginForm = document.getElementById('login-form'); + const emailInput = document.getElementById('email'); + const passwordInput = document.getElementById('password'); + const loginButton = document.getElementById('login-button'); + const signupButton = document.getElementById('signup-button'); + const expensesFilterSearchInput = document.getElementById('expenses-filter-search'); + const budgetsFilterButton = document.getElementById('budgets-filter-button'); + const addBudgetButton = document.getElementById('add-budget-button'); + + const expensesList = document.getElementById('expenses'); + const budgetsList = document.getElementById('budgets'); + const addExpenseForm = document.getElementById('add-expense-form'); + const addExpenseButton = document.getElementById('add-expense-button'); + const expenseCostInput = document.getElementById('expense-cost'); + const expenseDescriptionInput = document.getElementById('expense-description'); + const expenseBudgetSelect = document.getElementById('expense-budget'); + const expenseDateInput = document.getElementById('expense-date'); + + const monthNavigationPreviousButton = document.getElementById('month-navigation-previous'); + const monthNavigationNextButton = document.getElementById('month-navigation-next'); + const monthNavigationLabel = document.getElementById('current-month'); + + let currentMonth = (new Date().toISOString()).substring(0, 7); + let currency = '$'; + const budgetFilters = new Set(); + + async function login(event) { + loginButton.textContent = 'Logging in...'; + await loginOrSignup(event, false); + loginButton.textContent = 'Login'; + } + + async function signup(event) { + signupButton.textContent = 'Signing up...'; + await loginOrSignup(event, true); + signupButton.textContent = 'Signup'; + } + + let isLoggingInOrSigningUp = false; + + async function loginOrSignup(event, isSigningUp) { + event.preventDefault(); + event.stopPropagation(); + + if (isLoggingInOrSigningUp) { + return; + } + + isLoggingInOrSigningUp = true; + window.app.showLoading(); + + const email = emailInput.value; + const password = passwordInput.value; + + const loginOrSignupMethod = isSigningUp ? window.app.dataUtils.createAccount : window.app.dataUtils.validateLogin; + + const { success, error } = await loginOrSignupMethod(email, password); + + if (success) { + const { Swal } = window; + + Swal.fire( + 'Alright!', + 'That looks alright. Let\'s get on with it!', + 'success', + ); + + window.app.showValidSessionElements(); + loginForm.reset(); + await initializePage(); + } else { + if (error) { + window.app.showNotification(error, 'error'); + } + } + + window.app.hideLoading(); + isLoggingInOrSigningUp = false; + } + + function getExpenseItemHtmlElement(expense) { + const template = document.getElementById('expense-item'); + + const clonedElement = template.content.firstElementChild.cloneNode(true); + clonedElement.dataset.id = expense.id; + + const costElement = clonedElement.querySelector('article span.cost'); + costElement.textContent = window.app.utils.formatNumber(currency, expense.cost); + + const budgetElement = clonedElement.querySelector('article span.budget'); + budgetElement.textContent = expense.budget; + + const descriptionElement = clonedElement.querySelector('span.description'); + descriptionElement.textContent = expense.description; + + const dateElement = clonedElement.querySelector('time'); + dateElement.textContent = window.app.utils.showFormattedDate(expense.date); + + return clonedElement; + } + + function getBudgetItemHtmlElement(budget) { + const template = document.getElementById('budget-item'); + + const clonedElement = template.content.firstElementChild.cloneNode(true); + clonedElement.dataset.name = budget.name; + + const costElement = clonedElement.querySelector('article span.cost'); + costElement.textContent = `${window.app.utils.formatNumber(currency, budget.expensesCost)} of ${ + window.app.utils.formatNumber(currency, budget.value) + }`; + + const nameElement = clonedElement.querySelector('article span.name'); + nameElement.textContent = budget.name; + + const missingElement = clonedElement.querySelector('span.missing'); + missingElement.textContent = window.app.utils.formatNumber(currency, budget.value - budget.expensesCost); + + if (budget.id === 'total') { + clonedElement.classList.add('total'); + } + + return clonedElement; + } + + function getBudgetSelectOptionHtmlElement(budgetName) { + const template = document.getElementById('budget-select-option'); + + const clonedElement = template.content.firstElementChild.cloneNode(true); + clonedElement.textContent = budgetName; + + return clonedElement; + } + + function getBudgetsFilterModalBudgetItemHtmlElement(budget) { + const template = document.getElementById('budgets-filter-modal-budget-item'); + + const clonedElement = template.content.firstElementChild.cloneNode(true); + + const labelElement = clonedElement.querySelector('label'); + labelElement.attributes[0].value = `budget-filter-name-${budget.id}`; + + const nameElement = clonedElement.querySelector('label span'); + nameElement.textContent = budget.name; + + const inputElement = clonedElement.querySelector('input'); + inputElement.value = budget.name; + inputElement.id = `budget-filter-name-${budget.id}`; + + if (budgetFilters.has(budget.name)) { + inputElement.checked = true; + } + + return clonedElement; + } + + async function showData(isComingFromEmptyState = false) { + monthNavigationLabel.textContent = window.app.utils.showFormattedDate(currentMonth, { + showDay: false, + showYear: true, + longMonth: true, + longYear: true, + }); + + const allBudgets = await window.app.dataUtils.fetchBudgets(); + const budgets = await window.app.dataUtils.fetchBudgets(currentMonth); + const expenses = await window.app.dataUtils.fetchExpenses(currentMonth); + + const budgetOptions = new Set([{ name: 'Misc' }, ...allBudgets].map((budget) => budget.name)); + + let totalCost = 0; + let totalBudget = 0; + + const budgetsToShow = [...budgets] + .map((budget) => { + const budgetToShow = { + expensesCost: 0, + ...budget, + }; + + // Calculate expenses cost + expenses.forEach((expense) => { + if (expense.budget === budget.name) { + budgetToShow.expensesCost += expense.cost; + } + }); + + totalCost += budgetToShow.expensesCost; + totalBudget += budgetToShow.value; + + return budgetToShow; + }) + .sort(window.app.utils.sortByMissingBudget); + + // Add Total budget + if (budgetsToShow.length > 0) { + budgetsToShow.unshift({ + id: 'total', + name: 'Total', + value: totalBudget, + expensesCost: totalCost, + month: currentMonth, + }); + } + + // If this is for the current or next month and there are no budgets, create budgets based on the previous/current month. + if (budgets.length === 0 && !isComingFromEmptyState) { + const currentMonthDate = new Date(`${currentMonth}-15`); + currentMonthDate.setMonth(currentMonthDate.getMonth() + 1); + const actualCurrentMonth = currentMonthDate.toISOString().substring(0, 7); + + const nextMonthDate = new Date(); + nextMonthDate.setMonth(nextMonthDate.getMonth() + 1); + const nextMonth = nextMonthDate.toISOString().substring(0, 7); + + if (currentMonth === nextMonth || currentMonth === actualCurrentMonth) { + const previousMonthDate = new Date(`${currentMonth}-15`); + previousMonthDate.setMonth(previousMonthDate.getMonth() - 1); + const previousMonth = previousMonthDate.toISOString().substring(0, 7); + + await window.app.dataUtils.copyBudgets(previousMonth, currentMonth); + await showData(true); + return; + } + } + + let expensesToShow = expenses; + + if (expensesFilterSearchInput.value) { + expensesToShow = expensesToShow.filter((expense) => + expense.description + .toLowerCase() + .includes(expensesFilterSearchInput.value.toLowerCase()) + ); + } + + if (budgetFilters.size > 0) { + budgetsFilterButton.classList.add('active'); + expensesToShow = expensesToShow.filter((expense) => budgetFilters.has(expense.budget)); + } else { + budgetsFilterButton.classList.remove('active'); + } + + // Show month's budgets + budgetsList.replaceChildren(); + for (const budget of budgetsToShow) { + const element = getBudgetItemHtmlElement(budget); + + if (budget.id !== 'total') { + element.addEventListener('click', () => showEditBudgetModal(budget)); + } + + budgetsList.appendChild(element); + } + + if (budgetsToShow.length === 0) { + budgetsList.innerHTML = '<span class="no-data">There are no budgets yet. Add some!</span>'; + } + + // Show month's expenses + expensesList.replaceChildren(); + for (const expense of expensesToShow) { + const element = getExpenseItemHtmlElement(expense); + + element.addEventListener('click', () => showEditExpenseModal(expense)); + + expensesList.appendChild(element); + } + + if (expensesToShow.length === 0) { + expensesList.innerHTML = '<span class="no-data">No expenses found for this month. Add some!</span>'; + } + + // Show all budgets in expenseBudgetSelect + expenseBudgetSelect.replaceChildren(); + for (const budgetName of budgetOptions.values()) { + const element = getBudgetSelectOptionHtmlElement(budgetName); + + expenseBudgetSelect.appendChild(element); + } + } + + async function navigateToMonth(month) { + currentMonth = month; + await showData(); + } + + async function navigateToPreviousMonth() { + const previousMonthDate = new Date(`${currentMonth}-15`); + previousMonthDate.setMonth(previousMonthDate.getMonth() - 1); + const month = previousMonthDate.toISOString().substring(0, 7); + + await navigateToMonth(month); + } + + async function navigateToNextMonth() { + const currentMonthDate = new Date(`${currentMonth}-15`); + currentMonthDate.setMonth(currentMonthDate.getMonth() + 1); + const month = currentMonthDate.toISOString().substring(0, 7); + + const nextMonthDate = new Date(); + nextMonthDate.setMonth(nextMonthDate.getMonth() + 1); + const nextMonth = nextMonthDate.toISOString().substring(0, 7); + + if (month > nextMonth) { + window.app.showNotification('Cannot travel further into the future!', 'error'); + return; + } + + await navigateToMonth(month); + } + + async function initializePage() { + await window.app.dataUtils.initializeDb(); + + const userSession = await window.app.getUserSession(); + currency = userSession.profile?.currency || '$'; + + showData(); + } + + let isAddingExpense = false; + + async function addExpense(event) { + event.preventDefault(); + event.stopPropagation(); + + if (isAddingExpense) { + return; + } + + addExpenseButton.textContent = 'Adding...'; + isAddingExpense = true; + window.app.showLoading(); + + const cost = Number.parseFloat(expenseCostInput.value.replace(',', '.')); + const description = expenseDescriptionInput.value; + const budget = expenseBudgetSelect.value; + const date = expenseDateInput.value; + + const parsedExpense = { + id: 'newExpense', + cost, + description, + budget, + date, + }; + + const success = await window.app.dataUtils.saveExpense(parsedExpense); + + if (success) { + window.app.showNotification('Expense added successfully.'); + addExpenseForm.reset(); + } + + await showData(); + + window.app.hideLoading(); + isAddingExpense = false; + addExpenseButton.textContent = 'Add Expense'; + } + + async function showEditExpenseModal(expense) { + const { Swal } = window; + + let isUpdating = false; + + await Swal.fire({ + template: '#edit-expense-modal', + focusConfirm: false, + allowEscapeKey: true, + preConfirm: async () => { + const updatedExpense = { + id: expense.id, + cost: Number.parseFloat(document.getElementById('edit-expense-cost').value.replace(',', '.')), + description: document.getElementById('edit-expense-description').value, + budget: document.getElementById('edit-expense-budget').value, + date: document.getElementById('edit-expense-date').value, + }; + + const saveExpenseButton = Swal.getConfirmButton(); + + if (isUpdating) { + return false; + } + + saveExpenseButton.textContent = 'Saving...'; + isUpdating = true; + window.app.showLoading(); + + const success = await window.app.dataUtils.saveExpense(updatedExpense); + + if (success) { + window.app.showNotification('Expense updated successfully.'); + } + + await showData(); + + window.app.hideLoading(); + isUpdating = false; + saveExpenseButton.textContent = 'Save'; + + return Boolean(success); + }, + preDeny: async () => { + const deleteExpenseButton = Swal.getDenyButton(); + + if (isUpdating) { + return false; + } + + const { isConfirmed } = await Swal.fire({ + title: 'Are you sure?', + text: 'You won\'t be able to recover this expense!', + icon: 'warning', + showCancelButton: true, + confirmButtonColor: 'red', + confirmButtonText: 'Yes, delete it!', + }); + + if (isConfirmed) { + deleteExpenseButton.textContent = 'Deleting...'; + isUpdating = true; + window.app.showLoading(); + + const success = await window.app.dataUtils.deleteExpense(expense.id); + + if (success) { + window.app.showNotification('Expense deleted successfully.'); + } + + await showData(); + + window.app.hideLoading(); + isUpdating = false; + deleteExpenseButton.textContent = 'Delete'; + + return Boolean(success); + } + + return false; + }, + willOpen: async () => { + // Show all budgets in expenseBudgetSelect + const allBudgets = await window.app.dataUtils.fetchBudgets(); + const budgetOptions = new Set([{ name: 'Misc' }, ...allBudgets].map((budget) => budget.name)); + const budgetSelect = document.getElementById('edit-expense-budget'); + budgetSelect.replaceChildren(); + for (const budgetName of budgetOptions.values()) { + const element = getBudgetSelectOptionHtmlElement(budgetName); + + budgetSelect.appendChild(element); + } + + document.getElementById('edit-expense-cost').value = expense.cost; + document.getElementById('edit-expense-description').value = expense.description; + document.getElementById('edit-expense-budget').value = expense.budget; + document.getElementById('edit-expense-date').value = expense.date; + }, + }); + } + + async function showEditBudgetModal(budget) { + const { Swal } = window; + + let isUpdating = false; + + await Swal.fire({ + template: '#edit-budget-modal', + focusConfirm: false, + allowEscapeKey: true, + preConfirm: async () => { + const updatedBudget = { + id: budget.id, + name: document.getElementById('edit-budget-name').value, + value: Number.parseFloat(document.getElementById('edit-budget-value').value.replace(',', '.')), + month: document.getElementById('edit-budget-month').value.substring(0, 7), + }; + + const saveBudgetButton = Swal.getConfirmButton(); + + if (isUpdating) { + return false; + } + + saveBudgetButton.textContent = 'Saving...'; + isUpdating = true; + window.app.showLoading(); + + const success = await window.app.dataUtils.saveBudget(updatedBudget); + + if (success) { + window.app.showNotification('Budget updated successfully.'); + } + + await showData(); + + window.app.hideLoading(); + isUpdating = false; + saveBudgetButton.textContent = 'Save'; + + return Boolean(success); + }, + preDeny: async () => { + const deleteBudgetButton = Swal.getDenyButton(); + + if (isUpdating) { + return false; + } + + const { isConfirmed } = await Swal.fire({ + title: 'Are you sure?', + text: 'You won\'t be able to recover this budget!', + icon: 'warning', + showCancelButton: true, + confirmButtonColor: 'red', + confirmButtonText: 'Yes, delete it!', + }); + + if (isConfirmed) { + deleteBudgetButton.textContent = 'Deleting...'; + isUpdating = true; + window.app.showLoading(); + + const success = await window.app.dataUtils.deleteBudget(budget.id); + + if (success) { + window.app.showNotification('Budget deleted successfully.'); + } + + await showData(); + + window.app.hideLoading(); + isUpdating = false; + deleteBudgetButton.textContent = 'Delete'; + + return Boolean(success); + } + + return false; + }, + willOpen: () => { + document.getElementById('edit-budget-name').value = budget.name; + document.getElementById('edit-budget-value').value = budget.value; + document.getElementById('edit-budget-month').value = `${budget.month}-15`; + }, + }); + } + + async function showAddBudgetModal() { + const { Swal } = window; + + let isAdding = false; + + await Swal.fire({ + template: '#edit-budget-modal', + focusConfirm: false, + allowEscapeKey: true, + showDenyButton: false, + title: 'Add Budget', + preConfirm: async () => { + const newBudget = { + id: 'newBudget', + name: document.getElementById('edit-budget-name').value, + value: Number.parseFloat(document.getElementById('edit-budget-value').value.replace(',', '.')), + month: document.getElementById('edit-budget-month').value.substring(0, 7), + }; + + const saveBudgetButton = Swal.getConfirmButton(); + + if (isAdding) { + return false; + } + + saveBudgetButton.textContent = 'Adding...'; + isAdding = true; + window.app.showLoading(); + + const success = await window.app.dataUtils.saveBudget(newBudget); + + if (success) { + window.app.showNotification('Budget added successfully.'); + } + + await showData(); + + window.app.hideLoading(); + isAdding = false; + saveBudgetButton.textContent = 'Add'; + + return Boolean(success); + }, + willOpen: () => { + const saveBudgetButton = Swal.getConfirmButton(); + saveBudgetButton.textContent = 'Add'; + + document.getElementById('edit-budget-name').value = ''; + document.getElementById('edit-budget-value').value = 100; + document.getElementById('edit-budget-month').value = `${currentMonth}-15`; + }, + }); + } + + async function showBudgetsFilterModal() { + const { Swal } = window; + + await Swal.fire({ + template: '#budgets-filter-modal', + focusConfirm: false, + allowEscapeKey: true, + didClose: () => { + budgetsFilterButton.blur(); + }, + willOpen: async () => { + // Show all budgets in #budgets-filter-form + const allBudgets = await window.app.dataUtils.fetchBudgets(); + const allUniquelyNamedBudgets = allBudgets.reduce((budgetsList, budget) => { + if (!budgetsList.some((_budget) => budget.name === _budget.name)) { + budgetsList.push(budget); + } + + return budgetsList; + }, []); + const budgetsFilterForm = document.getElementById('budgets-filter-form'); + budgetsFilterForm.replaceChildren(); + for (const budget of allUniquelyNamedBudgets) { + const element = getBudgetsFilterModalBudgetItemHtmlElement(budget); + + const inputElement = element.querySelector('input'); + + inputElement.addEventListener('change', () => { + if (!inputElement.checked) { + budgetFilters.delete(budget.name); + } else { + budgetFilters.add(budget.name); + } + + showData(); + }); + + budgetsFilterForm.appendChild(element); + } + }, + }); + } + + async function chooseMonthModal() { + const { Swal } = window; + + const { value: newMonth } = await Swal.fire({ + template: '#choose-month-modal', + focusConfirm: false, + allowEscapeKey: true, + preConfirm: () => { + const monthInput = document.getElementById('choose-month-input').value; + const month = monthInput.substring(0, 7); + + const nextMonthDate = new Date(); + nextMonthDate.setMonth(nextMonthDate.getMonth() + 1); + const nextMonth = nextMonthDate.toISOString().substring(0, 7); + + if (month > nextMonth) { + window.app.showNotification('Cannot travel further into the future!', 'error'); + return false; + } + + return month; + }, + willOpen: () => { + document.getElementById('choose-month-input').value = `${currentMonth}-15`; + }, + }); + + if (newMonth) { + await navigateToMonth(newMonth); + } + } + + if (window.app.isLoggedIn) { + initializePage(); + } + + loginForm.addEventListener('submit', login); + signupButton.addEventListener('click', signup); + addExpenseForm.addEventListener('submit', addExpense); + addBudgetButton.addEventListener('click', showAddBudgetModal); + budgetsFilterButton.addEventListener('click', showBudgetsFilterModal); + expensesFilterSearchInput.addEventListener('keyup', window.app.utils.debounce(showData, 150)); + monthNavigationPreviousButton.addEventListener('click', navigateToPreviousMonth); + monthNavigationNextButton.addEventListener('click', navigateToNextMonth); + monthNavigationLabel.addEventListener('click', chooseMonthModal); + }); +})(); diff --git a/public/js/script.js b/public/js/script.js new file mode 100644 index 0000000..8ea0d3d --- /dev/null +++ b/public/js/script.js @@ -0,0 +1,1027 @@ +(() => { + const cachedData = { + budgets: [], + expenses: [], + }; + + async function initializeApp() { + window.app = window.app || {}; + initializeLoading(); + + // if (navigator && navigator.serviceWorker) { + // navigator.serviceWorker.register('/public/js/sw.js'); + // } + + // Expose helper functions + window.app.isLoggedIn = false; + window.app.showNotification = showNotification; + window.app.doLogout = doLogout; + window.app.getUserSession = getUserSession; + window.app.showValidSessionElements = showValidSessionElements; + window.app.hideValidSessionElements = hideValidSessionElements; + window.app.dataUtils = { + validateLogin, + createAccount, + initializeDb, + fetchExpenses, + saveExpense, + deleteExpense, + fetchBudgets, + saveBudget, + deleteBudget, + copyBudgets, + deleteAllData, + exportAllData, + importData, + generateId, + }; + window.app.utils = { + formatNumber, + showFormattedDate, + sortByDate, + sortByCount, + sortByName, + sortByMissingBudget, + dateDiffInDays, + debounce, + }; + + const checkForValidSession = async () => { + const isUserLoggedIn = await isLoggedIn(); + + if (isUserLoggedIn) { + window.app.isLoggedIn = true; + showValidSessionElements(); + + const userSession = await getUserSession(); + + if (userSession.trialExpirationDate) { + const trialExpirationDate = new Date(userSession.trialExpirationDate); + const now = new Date(); + + if (userSession.subscriptionStatus !== 'active' && trialExpirationDate < now) { + showNotification('Your trial has expired!', 'error'); + + // Give people some time to logout or export + setTimeout(() => { + window.location.href = '/pricing'; + }, 10000); + } + } + } + }; + + await checkForValidSession(); + + document.dispatchEvent(new Event('app-loaded')); + + window.app.hideLoading(); + } + + function initializeLoading() { + const loadingComponent = document.getElementById('loading'); + + window.app.showLoading = () => loadingComponent.classList.remove('hide'); + window.app.hideLoading = () => loadingComponent.classList.add('hide'); + } + + function showValidSessionElements() { + const elementsToShow = document.querySelectorAll('[data-has-valid-session]'); + const elementsToHide = document.querySelectorAll('[data-has-invalid-session]'); + + elementsToShow.forEach((element) => element.classList.remove('hidden')); + elementsToHide.forEach((element) => element.classList.add('hidden')); + } + + function hideValidSessionElements() { + const elementsToShow = document.querySelectorAll('[data-has-invalid-session]'); + const elementsToHide = document.querySelectorAll('[data-has-valid-session]'); + + elementsToShow.forEach((element) => element.classList.remove('hidden')); + elementsToHide.forEach((element) => element.classList.add('hidden')); + } + + function showNotification(message, type = 'success') { + const { Swal } = window; + + const Toast = window.Swal.mixin({ + toast: true, + position: 'top-end', + showConfirmButton: false, + timer: type === 'success' ? 2500 : 0, + timerProgressBar: type === 'success', + didOpen: (toast) => { + toast.addEventListener('mouseenter', Swal.stopTimer); + toast.addEventListener('mouseleave', Swal.resumeTimer); + }, + }); + + Toast.fire({ + icon: type, + title: message, + }); + } + + async function doLogout() { + try { + const { userbase } = window; + await userbase.signOut(); + hideValidSessionElements(); + + Swal.fire('Alright!', 'No idea who you are right now.', 'success'); + return true; + } catch (error) { + const { Swal } = window; + + Swal.fire( + 'Something went wrong!', + `Uh oh! Something wrong happened: ${error && error.message}`, + 'error', + ); + } + + return false; + } + + async function isLoggedIn() { + try { + const { userbase } = window; + const { userbaseConfig } = window.app; + const session = await userbase.init(userbaseConfig); + if (session.user) { + return true; + } + } catch (_error) { + // Do nothing + } + + return false; + } + + async function getUserSession() { + try { + const { userbase } = window; + const { userbaseConfig } = window.app; + const session = await userbase.init(userbaseConfig); + return session.user; + } catch (_error) { + // Do nothing + } + + return null; + } + + async function validateLogin(email, password) { + try { + const { userbase } = window; + const { userbaseConfig } = window.app; + await userbase.signIn({ + username: email, + password, + sessionLength: userbaseConfig.sessionLength, + rememberMe: 'local', + }); + return { success: true }; + } catch (error) { + console.log(error); + return { success: false, error }; + } + } + + async function createAccount(email, password) { + try { + const { userbase } = window; + const { userbaseConfig } = window.app; + await userbase.signUp({ + username: email, + password, + sessionLength: userbaseConfig.sessionLength, + rememberMe: 'local', + email, + }); + return { success: true }; + } catch (error) { + console.log(error); + return { success: false, error }; + } + } + + function getExpenseFromItem(item) { + try { + return { + id: item.itemId, + cost: item.item.cost, + description: item.item.description, + budget: item.item.budget, + date: item.item.date, + }; + } catch (_error) { + return null; + } + } + + function getBudgetFromItem(item) { + try { + return { + id: item.itemId, + name: item.item.name, + month: item.item.month, + value: item.item.value, + }; + } catch (_error) { + return null; + } + } + + async function loadItemsAsync() { + const { userbase } = window; + await userbase.openDatabase({ + databaseName: 'expenses', + changeHandler: (items) => { + const expenses = items + .map(getExpenseFromItem) + .filter((expense) => Boolean(expense)); + + hasFinishedLoading.expenses = true; + + cachedData.expenses = expenses; + }, + }); + + await userbase.openDatabase({ + databaseName: 'budgets', + changeHandler: (items) => { + const budgets = items + .map(getBudgetFromItem) + .filter((budget) => Boolean(budget)); + + hasFinishedLoading.budgets = true; + + cachedData.budgets = budgets; + }, + }); + } + + async function initializeDb() { + try { + const { userbase } = window; + const { userbaseConfig } = window.app; + await userbase.init(userbaseConfig); + + await loadItemsAsync(); + } catch (error) { + console.log(error); + showNotification(error, 'error'); + } + } + + const hasFinishedLoading = { + budgets: false, + expenses: false, + }; + + async function fetchBudgets(month) { + try { + // Very ugly, but... works. + while (!hasFinishedLoading.budgets) { + await new Promise((resolve) => { + setTimeout(resolve, 100); + }); + } + + const sortedBudgets = cachedData.budgets + .filter((budget) => { + if (!month) { + return true; + } + + if (budget.month === month) { + return true; + } + + return false; + }) + .sort(sortByName); + + return sortedBudgets; + } catch (error) { + const { Swal } = window; + + Swal.fire({ + title: 'Uh-oh', + text: 'Something went wrong fetching budgets.', + }); + + console.error(error); + } + + return []; + } + + async function fetchExpenses(month) { + try { + // Very ugly, but... works. + while (!hasFinishedLoading.expenses) { + await new Promise((resolve) => { + setTimeout(resolve, 100); + }); + } + + const sortedExpenses = cachedData.expenses + .filter((expense) => { + if (!month) { + return true; + } + + if (expense.date >= `${month}-01` && expense.date <= `${month}-31`) { + return true; + } + + return false; + }) + .sort(sortByDate) + .reverse(); + + return sortedExpenses; + } catch (error) { + const { Swal } = window; + + Swal.fire({ + title: 'Uh-oh', + text: 'Something went wrong fetching expenses.', + }); + + console.error(error); + } + + return []; + } + + async function saveBudget(budget) { + try { + if (budget.name === 'Total') { + showNotification('Cannot create budget named "Total".', 'error'); + return false; + } + + if (budget.name.trim().length === 0) { + showNotification('The budget needs a valid name.', 'error'); + return false; + } + + if (budget.value <= 0 || Number.isNaN(budget.value)) { + showNotification('The budget needs a valid value.', 'error'); + return false; + } + + if (!isValidDate(budget.month)) { + budget.month = new Date().toISOString().substring(0, 7); + } + + // Check if the name is unique for the given month + const existingBudgetsInMonth = await fetchBudgets(budget.month); + const duplicateBudget = existingBudgetsInMonth.find( + (existingBudget) => existingBudget.name === budget.name && existingBudget.id !== budget.id, + ); + + if (duplicateBudget) { + showNotification( + 'A budget with the same name for the same month already exists.', + 'error', + ); + return false; + } + + const { userbase } = window; + + if (budget.id === 'newBudget') { + budget.id = `${generateId()}`; + + await userbase.insertItem({ + databaseName: 'budgets', + item: { + name: budget.name, + value: budget.value, + month: budget.month, + }, + itemId: budget.id, + }); + } else { + const existingBudget = cachedData.budgets.find( + (_budget) => _budget.id === budget.id, + ); + const oldName = existingBudget.name; + const newName = budget.name; + + await userbase.updateItem({ + databaseName: 'budgets', + item: { + name: budget.name, + value: budget.value, + month: existingBudget.month, // Don't allow changing a budget's month + }, + itemId: budget.id, + }); + + // Update all expenses with the previous budget name to the new one, if it changed + if (oldName !== newName) { + const matchingExpenses = ( + await fetchExpenses(existingBudget.month) + ).filter((expense) => expense.budget === oldName); + + const updateChunks = splitArrayInChunks( + matchingExpenses, + 10, + ); + + for (const machingExpensesChunk of updateChunks) { + await userbase.putTransaction({ + databaseName: 'expenses', + operations: machingExpensesChunk.map((expense) => ({ + command: 'Update', + item: { + cost: expense.cost, + description: expense.description, + budget: newName, + date: expense.date, + }, + itemId: expense.id, + })), + }); + } + } + } + + return true; + } catch (error) { + const { Swal } = window; + + Swal.fire({ + title: 'Uh-oh', + text: 'Something went wrong saving that budget.', + }); + + console.error(error); + } + + return false; + } + + async function saveExpense(expense) { + try { + if (!expense.cost || typeof expense.cost !== 'number') { + showNotification('Cost missing or invalid', 'error'); + return false; + } + + if (expense.description.trim().length === 0) { + showNotification('The expense needs a valid description.', 'error'); + return false; + } + + if (!isValidDate(expense.date)) { + expense.date = new Date().toISOString().substring(0, 10); + } + + // Check if there's an existing expense with a better budget + if ( + (!expense.budget || expense.budget === 'Misc') && + expense.id === 'newExpense' + ) { + const matchingExpense = (await fetchExpenses()).find( + (_expense) => _expense.description === expense.description, + ); + + if (matchingExpense && matchingExpense.budget) { + expense.budget = matchingExpense.budget; + } + } + + if (!expense.budget || typeof expense.budget !== 'string') { + expense.budget = 'Misc'; + } + + // Check if the budget exists for the expense in that given month, otherwise create one + const existingBudget = ( + await fetchBudgets(expense.date.substring(0, 7)) + ).find((budget) => budget.name === expense.budget); + + if (!existingBudget) { + const newBudgetId = `${generateId()}`; + + await userbase.insertItem({ + databaseName: 'budgets', + item: { + name: expense.budget, + month: expense.date.substring(0, 7), + value: 100, + }, + itemId: newBudgetId, + }); + } + + const { userbase } = window; + + if (expense.id === 'newExpense') { + expense.id = `${generateId()}`; + + await userbase.insertItem({ + databaseName: 'expenses', + item: { + cost: expense.cost, + description: expense.description, + budget: expense.budget, + date: expense.date, + }, + itemId: expense.id, + }); + } else { + await userbase.updateItem({ + databaseName: 'expenses', + item: { + cost: expense.cost, + description: expense.description, + budget: expense.budget, + date: expense.date, + }, + itemId: expense.id, + }); + } + + return true; + } catch (error) { + const { Swal } = window; + + Swal.fire({ + title: 'Uh-oh', + text: 'Something went wrong saving that expense.', + }); + + console.error(error); + } + + return false; + } + + async function deleteBudget(budgetId) { + try { + const existingBudget = cachedData.budgets.find( + (budget) => budget.id === budgetId, + ); + + // Check if the budget has no expenses, if so, don't delete + const matchingExpenses = (await fetchExpenses(existingBudget.month)).filter( + (expense) => expense.budget === existingBudget.name, + ); + + if (matchingExpenses.length > 0) { + // Check if there are duplicate budgets (can happen on slow sync) + const matchingBudgets = (await fetchBudgets(existingBudget.month)).filter( + (budget) => budget.name === existingBudget.name, + ); + + if (matchingBudgets.length === 1) { + showNotification( + 'There are expenses using this budget. You can\'t delete a budget with expenses', + 'error', + ); + return false; + } + } + + const { userbase } = window; + + await userbase.deleteItem({ + databaseName: 'budgets', + itemId: budgetId, + }); + + const cachedItemIndex = cachedData.budgets.findIndex( + (budget) => budget.id === budgetId, + ); + if (cachedItemIndex !== -1) { + cachedData.budgets.splice(cachedItemIndex, 1); + } + + return true; + } catch (error) { + const { Swal } = window; + + Swal.fire({ + title: 'Uh-oh', + text: 'Something went wrong deleting that budget.', + }); + + console.error(error); + } + + return false; + } + + async function deleteExpense(expenseId) { + try { + const { userbase } = window; + + await userbase.deleteItem({ + databaseName: 'expenses', + itemId: expenseId, + }); + + const cachedItemIndex = cachedData.expenses.findIndex( + (expense) => expense.id === expenseId, + ); + if (cachedItemIndex !== -1) { + cachedData.expenses.splice(cachedItemIndex, 1); + } + + return true; + } catch (error) { + const { Swal } = window; + + Swal.fire({ + title: 'Uh-oh', + text: 'Something went wrong deleting that expense.', + }); + + console.error(error); + } + + return false; + } + + async function deleteAllData() { + const budgets = await fetchBudgets(); + const expenses = await fetchExpenses(); + + const deleteBudgetChunks = splitArrayInChunks(budgets, 10); + const deleteExpenseChunks = splitArrayInChunks(expenses, 10); + + const { userbase } = window; + + for (const budgetsToDelete of deleteBudgetChunks) { + await userbase.putTransaction({ + databaseName: 'budgets', + operations: budgetsToDelete.map((budget) => ({ + command: 'Delete', + itemId: budget.id, + })), + }); + + // Wait a second, to avoid hitting rate limits + await new Promise((resolve) => { + setTimeout(resolve, 1000); + }); + } + + for (const expensesToDelete of deleteExpenseChunks) { + await userbase.putTransaction({ + databaseName: 'expenses', + operations: expensesToDelete.map((expense) => ({ + command: 'Delete', + itemId: expense.id, + })), + }); + + // Wait a second, to avoid hitting rate limits + await new Promise((resolve) => { + setTimeout(resolve, 1000); + }); + } + + cachedData.budgets.length = 0; + cachedData.expenses.length = 0; + hasFinishedLoading.budgets = false; + hasFinishedLoading.expenses = false; + } + + async function exportAllData() { + // Don't export anything until we're done with the first full load + if (!hasFinishedLoading.budgets || !hasFinishedLoading.expenses) { + return {}; + } + + try { + const budgets = (await fetchBudgets()).sort(sortByName); + const expenses = (await fetchExpenses()).sort(sortByDate); + + return { budgets, expenses }; + } catch (error) { + const { Swal } = window; + + Swal.fire({ + title: 'Uh-oh', + text: 'Something went wrong exporting data.', + }); + + console.error(error); + } + + return {}; + } + + async function importData(replaceData, budgets, expenses) { + // Don't import anything until we're done with the first full load + if (!hasFinishedLoading.budgets || !hasFinishedLoading.expenses) { + return false; + } + + try { + if (replaceData) { + await deleteAllData(); + + await initializeDb(); + + // Very ugly, but... works. + while (!hasFinishedLoading.budgets || !hasFinishedLoading.expenses) { + await new Promise((resolve) => { + setTimeout(resolve, 100); + }); + } + } + + const finalBudgetsToAdd = []; + + for (const budget of budgets) { + const newBudgetId = `${generateId()}`; + const newBudget = { + id: newBudgetId, + name: budget.name, + value: budget.value, + month: budget.month, + }; + + finalBudgetsToAdd.push(newBudget); + } + + const addBudgetChunks = splitArrayInChunks( + finalBudgetsToAdd, + 10, + ); + + const { userbase } = window; + + for (const budgetsToAdd of addBudgetChunks) { + await userbase.putTransaction({ + databaseName: 'budgets', + operations: budgetsToAdd.map((budget) => ({ + command: 'Insert', + item: { + name: budget.name, + value: budget.value, + month: budget.month, + }, + itemId: budget.id, + })), + }); + + // Wait a second, to avoid hitting rate limits + await new Promise((resolve) => { + setTimeout(resolve, 1000); + }); + } + + const finalExpensesToAdd = []; + + for (const expense of expenses) { + const newExpenseId = `${generateId()}`; + const newExpense = { + id: newExpenseId, + cost: expense.cost, + budget: expense.budget, + description: expense.description, + date: expense.date, + }; + + finalExpensesToAdd.push(newExpense); + } + + const addExpenseChunks = splitArrayInChunks( + finalExpensesToAdd, + 10, + ); + + for (const expensesToAdd of addExpenseChunks) { + await userbase.putTransaction({ + databaseName: 'expenses', + operations: expensesToAdd.map((expense) => ({ + command: 'Insert', + item: { + cost: expense.cost, + budget: expense.budget, + description: expense.description, + date: expense.date, + }, + itemId: expense.id, + })), + }); + + // Wait a second, to avoid hitting rate limits + await new Promise((resolve) => { + setTimeout(resolve, 1000); + }); + } + + return true; + } catch (error) { + const { Swal } = window; + + Swal.fire({ + title: 'Uh-oh', + text: 'Something went wrong importing data.', + }); + + console.error(error); + } + + return false; + } + + async function copyBudgets(originalMonth, destinationMonth) { + // Don't copy anything until we're done with the first full load + if (!hasFinishedLoading.budgets || !hasFinishedLoading.expenses) { + return; + } + + const originalBudgets = await fetchBudgets(originalMonth); + const destinationBudgets = originalBudgets.map((budget) => { + const newBudget = { ...budget }; + newBudget.id = `${generateId()}`; + newBudget.month = destinationMonth; + return newBudget; + }); + if (destinationBudgets.length > 0) { + try { + const finalBudgetsToAdd = []; + + for (const budget of destinationBudgets) { + const newBudget = { + id: budget.id, + name: budget.name, + value: budget.value, + month: budget.month, + }; + + finalBudgetsToAdd.push(newBudget); + } + + const addBudgetChunks = splitArrayInChunks( + finalBudgetsToAdd, + 10, + ); + + for (const budgetsToAdd of addBudgetChunks) { + await userbase.putTransaction({ + databaseName: 'budgets', + operations: budgetsToAdd.map((budget) => ({ + command: 'Insert', + item: { + name: budget.name, + value: budget.value, + month: budget.month, + }, + itemId: budget.id, + })), + }); + } + } catch (error) { + Swal.fire({ + title: 'Uh-oh', + text: 'Something went wrong copying budgets.', + }); + + console.error(error); + } + } + } + + function generateId() { + return `${Date.now().toString()}:${Math.random()}`; + } + + function splitArrayInChunks(array, chunkLength) { + const chunks = []; + let chunkIndex = 0; + const arrayLength = array.length; + + while (chunkIndex < arrayLength) { + chunks.push(array.slice(chunkIndex, chunkIndex += chunkLength)); + } + + return chunks; + } + + function sortByDate(objectA, objectB) { + if (objectA.date < objectB.date) { + return -1; + } + if (objectA.date > objectB.date) { + return 1; + } + return 0; + } + + function sortByCount(objectA, objectB) { + if (objectA.count < objectB.count) { + return 1; + } + if (objectA.count > objectB.count) { + return -1; + } + return 0; + } + + function sortByName(objectA, objectB) { + const nameA = objectA.name.toUpperCase(); + const nameB = objectB.name.toUpperCase(); + if (nameA < nameB) { + return -1; + } + if (nameA > nameB) { + return 1; + } + return 0; + } + + function sortByMissingBudget(objectA, objectB) { + const valueA = objectA.value - objectA.expensesCost; + const valueB = objectB.value - objectB.expensesCost; + return valueB - valueA; + } + + const currencyMap = new Map([ + ['$', 'USD'], + ['€', 'EUR'], + ['£', 'GBP'], + ['¥', 'JPY'], + ['₹', 'INR'], + ]); + + function formatNumber(currency, number) { + return new Intl.NumberFormat('en-US', { + style: 'currency', + currency: currencyMap.get(currency) || 'USD', + minimumFractionDigits: 0, + maximumFractionDigits: 2, + }).format(Number.parseFloat(`${number}`.replace(',', '.'))); + } + + const months = [ + 'January', + 'February', + 'March', + 'April', + 'May', + 'June', + 'July', + 'August', + 'September', + 'October', + 'November', + 'December', + ]; + + function showFormattedDate( + stringDate, + { showDay = true, showYear = false, longMonth = false, longYear = false } = {}, + ) { + const dateYear = parseInt(stringDate.substring(0, 4)); + const dateMonth = parseInt(stringDate.substring(5, 7), 10) - 1; + const dateDay = parseInt(stringDate.substring(8, 10), 10); + + const monthName = longMonth ? months[dateMonth] : months[dateMonth].substring(0, 3); + const yearName = longYear ? dateYear.toString() : `'${dateYear.toString().substring(2, 4)}`; + + if (showYear) { + if (showDay) { + return `${dateDay} ${monthName} ${yearName}`; + } + + return `${monthName} ${yearName}`; + } + + return `${dateDay} ${monthName}`; + } + + function dateDiffInDays(startDate, endDate) { + return Math.round((endDate.getTime() - startDate.getTime()) / (1000 * 60 * 60 * 24)); + } + + function isValidDate(dateObject) { + return new Date(dateObject).toString() !== 'Invalid Date'; + } + + function debounce(callback, waitInMs) { + let timeoutId = null; + return (...args) => { + window.clearTimeout(timeoutId); + + timeoutId = window.setTimeout(() => { + callback.apply(null, args); + }, waitInMs); + }; + } + + document.addEventListener('DOMContentLoaded', () => { + initializeApp(); + }); +})(); diff --git a/public/js/settings.js b/public/js/settings.js new file mode 100644 index 0000000..d0a942d --- /dev/null +++ b/public/js/settings.js @@ -0,0 +1,250 @@ +(() => { + document.addEventListener('app-loaded', () => { + const changeCurrencyForm = document.getElementById('change-currency-form'); + const newCurrencySelect = document.getElementById('new-currency'); + const changeCurrencyButton = document.getElementById('change-currency-button'); + + const importDataButton = document.getElementById('import-button'); + const exportDataButton = document.getElementById('export-button'); + + const changeEmailForm = document.getElementById('change-email-form'); + const newEmailInput = document.getElementById('new-email'); + const changeEmailButton = document.getElementById('change-email-button'); + + const changePasswordForm = document.getElementById('change-password-form'); + const currentPasswordInput = document.getElementById('current-password'); + const newPasswordInput = document.getElementById('new-password'); + const changePasswordButton = document.getElementById('change-password-button'); + + let isUpdating = false; + + async function changeCurrency(event) { + event.preventDefault(); + event.stopPropagation(); + + if (isUpdating) { + return; + } + + isUpdating = true; + window.app.showLoading(); + changeCurrencyButton.textContent = 'Changing...'; + + const currency = newCurrencySelect.value; + + try { + await userbase.updateUser({ + profile: { + currency, + }, + }); + + window.app.showNotification('Currency changed successfully!'); + } catch (error) { + window.app.showNotification(error, 'error'); + } + + isUpdating = false; + window.app.hideLoading(); + changeCurrencyButton.textContent = 'Change currency'; + } + + async function importData() { + const { Swal } = window; + + if (isUpdating) { + return; + } + + const importFileDialogResult = await Swal.fire({ + icon: 'warning', + input: 'file', + title: 'Choose JSON File', + inputAttributes: { + accept: 'text/pain,application/json,.json', + 'aria-label': 'Import your budgets and expenses', + }, + }); + + if (!importFileDialogResult || !importFileDialogResult.value) { + return; + } + + const reader = new FileReader(); + reader.onload = async (fileRead) => { + const importFileContents = fileRead.target.result; + + let importedFileData = {}; + + try { + importedFileData = JSON.parse(importFileContents.toString()); + } catch (_error) { + importedFileData = {}; + } + + if ( + !Object.prototype.hasOwnProperty.call(importedFileData, 'budgets') && + !Object.prototype.hasOwnProperty.call(importedFileData, 'expenses') + ) { + window.app.showNotification( + 'Could not parse the file. Please confirm what you chose is correct.', + 'error', + ); + return; + } + + const budgets = importedFileData.budgets || []; + const expenses = importedFileData.expenses || []; + + const mergeOrReplaceDialogResult = await Swal.fire({ + icon: 'question', + title: 'Merge or Replace?', + text: 'Do you want to merge this with your existing data, or replace it?', + showCancelButton: true, + showDenyButton: true, + confirmButtonText: 'Merge', + denyButtonText: 'Replace', + cancelButtonText: 'Wait, cancel.', + }); + + if ( + mergeOrReplaceDialogResult.isConfirmed || + mergeOrReplaceDialogResult.isDenied + ) { + isUpdating = true; + window.app.showLoading(); + + const success = await window.app.dataUtils.importData( + mergeOrReplaceDialogResult.isDenied, + budgets, + expenses, + ); + + isUpdating = false; + window.app.hideLoading(); + + if (success) { + window.app.showNotification('Data imported successfully!'); + } + } + }; + + reader.readAsText(importFileDialogResult.value); + } + + async function exportData() { + if (isUpdating) { + return; + } + + isUpdating = true; + window.app.showLoading(); + + const fileName = [ + 'budget-zen-data-export-', + new Date().toISOString().substring(0, 19).replace(/:/g, '-'), + '.json', + ] + .join(''); + + const exportData = await window.app.dataUtils.exportAllData(); + + const exportContents = JSON.stringify(exportData, null, 2); + + // Add content-type + const jsonContent = ['data:application/json; charset=utf-8,', exportContents].join(''); + + // Download the file + const data = encodeURI(jsonContent); + const link = document.createElement('a'); + link.setAttribute('href', data); + link.setAttribute('download', fileName); + link.click(); + link.remove(); + + isUpdating = false; + window.app.hideLoading(); + + window.app.showNotification('Data exported successfully!'); + } + + async function changeEmail(event) { + event.preventDefault(); + event.stopPropagation(); + + if (isUpdating) { + return; + } + + isUpdating = true; + window.app.showLoading(); + changeEmailButton.textContent = 'Changing...'; + + const email = newEmailInput.value; + + try { + await userbase.updateUser({ + username: email, + email, + }); + + window.location.reload(); + } catch (error) { + isUpdating = false; + window.app.hideLoading(); + changeEmailButton.textContent = 'Change email'; + window.app.showNotification(error, 'error'); + } + } + + async function changePassword(event) { + event.preventDefault(); + event.stopPropagation(); + + if (isUpdating) { + return; + } + + isUpdating = true; + window.app.showLoading(); + changePasswordButton.textContent = 'Changing...'; + + const currentPassword = currentPasswordInput.value; + const newPassword = newPasswordInput.value; + + try { + await userbase.updateUser({ + currentPassword, + newPassword, + }); + + window.location.reload(); + } catch (error) { + isUpdating = false; + window.app.hideLoading(); + changePasswordButton.textContent = 'Change password / encryption key'; + window.app.showNotification(error, 'error'); + } + } + + async function initializePage() { + await window.app.dataUtils.initializeDb(); + + const userSession = await window.app.getUserSession(); + const currentCurrency = userSession.profile?.currency || '$'; + newCurrencySelect.value = currentCurrency; + } + + if (window.app.isLoggedIn) { + initializePage(); + } + + changeCurrencyForm.addEventListener('submit', changeCurrency); + + importDataButton.addEventListener('click', importData); + exportDataButton.addEventListener('click', exportData); + + changeEmailForm.addEventListener('submit', changeEmail); + changePasswordForm.addEventListener('submit', changePassword); + }); +})(); diff --git a/public/js/stripe.js b/public/js/stripe.js new file mode 100644 index 0000000..7798f2c --- /dev/null +++ b/public/js/stripe.js @@ -0,0 +1 @@ +!function(e){function t(t){for(var n,a,o=t[0],i=t[1],c=0,u=[];c<o.length;c++)a=o[c],Object.prototype.hasOwnProperty.call(r,a)&&r[a]&&u.push(r[a][0]),r[a]=0;for(n in i)Object.prototype.hasOwnProperty.call(i,n)&&(e[n]=i[n]);for(s&&s(t);u.length;)u.shift()()}var n={},r={12:0};function a(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,a),r.l=!0,r.exports}a.e=function(e){var t=[],n=r[e];if(0!==n)if(n)t.push(n[2]);else{var o=new Promise((function(t,a){n=r[e]=[t,a]}));t.push(n[2]=o);var i,c=document.createElement("script");c.charset="utf-8",c.timeout=120,a.nc&&c.setAttribute("nonce",a.nc),c.src=function(e){return a.p+"fingerprinted/js/"+({2:"elements-affirm-message",3:"elements-affirm-modal",4:"elements-afterpay-clearpay-message",5:"elements-afterpay-clearpay-modal",6:"orders-outer",7:"payment-intent-outer-actions-cardimageverification",13:"trusted-types-checker"}[e]||e)+"-"+{2:"4b6af45d90b61505b87d352cdf1875b5",3:"078320ff3871964a6885cc4b757842e4",4:"8c26f336e8d6b15ffaa896906a4ef893",5:"85cf80c70ff3dccaad47aec1bb8f44fa",6:"b25075565159f2045a40e615c25980cd",7:"a4b4d543133799e244f9f79344652bcb",13:"8f145f1c4f05a13814c9d72ead77e23d"}[e]+".js"}(e);var s=new Error;i=function(t){c.onerror=c.onload=null,clearTimeout(u);var n=r[e];if(0!==n){if(n){var a=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;s.message="Loading chunk "+e+" failed.\n("+a+": "+o+")",s.name="ChunkLoadError",s.type=a,s.request=o,n[1](s)}r[e]=void 0}};var u=setTimeout((function(){i({type:"timeout",target:c})}),12e4);c.onerror=c.onload=i,document.head.appendChild(c)}return Promise.all(t)},a.m=e,a.c=n,a.d=function(e,t,n){a.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},a.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.t=function(e,t){if(1&t&&(e=a(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(a.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)a.d(n,r,function(t){return e[t]}.bind(null,r));return n},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,"a",t),t},a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},a.p="https://js.stripe.com/v3/",a.oe=function(e){throw console.error(e),e};var o=window.__webpackStripeJSv3Jsonp=window.__webpackStripeJSv3Jsonp||[],i=o.push.bind(o);o.push=t,o=o.slice();for(var c=0;c<o.length;c++)t(o[c]);var s=i;a(a.s=74)}([function(e,t,n){"use strict";n.d(t,"a",(function(){return r})),n.d(t,"g",(function(){return J})),n.d(t,"c",(function(){return X})),n.d(t,"d",(function(){return te})),n.d(t,"E",(function(){return f})),n.d(t,"G",(function(){return m})),n.d(t,"j",(function(){return h})),n.d(t,"k",(function(){return _})),n.d(t,"m",(function(){return b})),n.d(t,"i",(function(){return y})),n.d(t,"w",(function(){return v})),n.d(t,"q",(function(){return O})),n.d(t,"x",(function(){return g})),n.d(t,"l",(function(){return j})),n.d(t,"A",(function(){return k})),n.d(t,"z",(function(){return E})),n.d(t,"u",(function(){return S})),n.d(t,"v",(function(){return P})),n.d(t,"C",(function(){return A})),n.d(t,"D",(function(){return I})),n.d(t,"B",(function(){return C})),n.d(t,"J",(function(){return T})),n.d(t,"e",(function(){return N})),n.d(t,"r",(function(){return M})),n.d(t,"s",(function(){return R})),n.d(t,"f",(function(){return B})),n.d(t,"o",(function(){return L})),n.d(t,"t",(function(){return D})),n.d(t,"b",(function(){return q})),n.d(t,"F",(function(){return F})),n.d(t,"n",(function(){return U})),n.d(t,"p",(function(){return H})),n.d(t,"h",(function(){return z})),n.d(t,"y",(function(){return K})),n.d(t,"I",(function(){return Y})),n.d(t,"H",(function(){return W}));var r=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"absurd";throw new Error(t)},a=n(5),o=n(7),i=n(1),c=n(2),s=n(13),u=n(45),l={AE:"AE",AT:"AT",AU:"AU",BE:"BE",BG:"BG",BR:"BR",CA:"CA",CH:"CH",CI:"CI",CR:"CR",CY:"CY",CZ:"CZ",DE:"DE",DK:"DK",DO:"DO",EE:"EE",ES:"ES",FI:"FI",FR:"FR",GB:"GB",GI:"GI",GR:"GR",GT:"GT",HK:"HK",HR:"HR",HU:"HU",ID:"ID",IE:"IE",IN:"IN",IT:"IT",JP:"JP",LI:"LI",LT:"LT",LU:"LU",LV:"LV",MT:"MT",MX:"MX",MY:"MY",NL:"NL",NO:"NO",NZ:"NZ",PE:"PE",PH:"PH",PL:"PL",PT:"PT",RO:"RO",SE:"SE",SG:"SG",SI:"SI",SK:"SK",SN:"SN",TH:"TH",TT:"TT",US:"US",UY:"UY"},d=Object.keys(l),p=n(29),f=(n(15),function(e,t,n){var r=n.path.reduce((function(e,t,n){return 0===n?t:0===t.indexOf(".")?"".concat(e,'["').concat(t,'"]'):"".concat(e,".").concat(t)}),"");return"undefined"===t?"Missing value for ".concat(n.label,": ").concat(r||"value"," should be ").concat(e,"."):"Invalid value for ".concat(n.label,": ").concat(r||"value"," should be ").concat(e,". You specified: ").concat(t,".")}),m=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return{type:"valid",value:e,warnings:t}},h=function(e){return{error:e,errorType:"full",type:"error"}},_=function(e,t,n){var r=new c.b(f(e,t,n));return h(r)},b=function(e,t,n){return{expected:e,actual:String(t),options:n,errorType:"mismatch",type:"error"}},y=function(e,t){return Object(i.a)(Object(i.a)({},e),{},{path:[].concat(Object(o.a)(e.path),[t])})},v=function(e){return function(t,n){return void 0===t?m(t):e(t,n)}},O=function(e){return function(t,n){return null===t?m(t):e(t,n)}},g=function(e,t){return function(n,r){var a=function(e){var t=e.options.path.join(".")||"value";return{error:"".concat(t," should be ").concat(e.expected),actual:"".concat(t," as ").concat(e.actual)}},o=function(e,t,n){return h(new c.b("Invalid value for ".concat(e,": ").concat(t,". You specified ").concat(n,".")))},i=e(n,r),s=t(n,r);if("error"===i.type&&"error"===s.type){if("mismatch"===i.errorType&&"mismatch"===s.errorType){var u=a(i),l=u.error,d=u.actual,p=a(s),f=p.error,m=p.actual;return o(r.label,l===f?l:"".concat(l," or ").concat(f),d===m?d:"".concat(d," and ").concat(m))}if("mismatch"===i.errorType){var _=a(i),b=_.error,y=_.actual;return o(r.label,b,y)}if("mismatch"===s.errorType){var v=a(s),O=v.error,g=v.actual;return o(r.label,O,g)}return h(i.error)}return"valid"===i.type?i:s}},j=function(e,t){return function(n,r){return n instanceof e?m(n):b("a ".concat(t," instance"),n,r)}},w=function(e,t){return function(n,r){var a=Object(s.a)(e,(function(e){return e===n}));if(void 0===a){var o=t?"a recognized string.":"one of the following strings: ".concat(e.join(", "));return b(o,n,r)}return m(a)}},k=function(e){return function(t,n){return"string"==typeof t&&0===t.indexOf(e)?m(t):b("a string starting with ".concat(e),t,n)}},E=function(e,t){return function(n,r){return"string"==typeof n&&n.length>=e&&n.length<=t?m(n):b(e===t?"a string of ".concat(e," characters"):"a string with ".concat(e," to ").concat(t," characters"),n,r)}},S=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return w(t,!1)},P=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return w(t,!0)},A=S.apply(void 0,Object(o.a)(d)),I=S.apply(void 0,Object(o.a)(u.a)),C=(S.apply(void 0,Object(o.a)(Object.keys(p.a))),function(e,t){return"string"==typeof e?m(e):b("a string",e,t)}),T=function(e,t){return function(n,r){return void 0===n?m(t()):e(n,r)}},N=function(e,t){return"boolean"==typeof e?m(e):b("a boolean",e,t)},M=function(e,t){return"number"==typeof e?m(e):b("a number",e,t)},R=function(e){return function(t,n){return"number"==typeof t&&t>e?m(t):b("a number greater than ".concat(e),t,n)}},x=function(e){return function(t,n){return"number"==typeof t&&t===parseInt(t,10)&&(!e||t>=0)?m(t):b(e?"a positive amount in the currency's subunit":"an amount in the currency's subunit",t,n)}},B=function(e,t){return x(!1)(e,t)},L=function(e,t){return x(!0)(e,t)},D=function(e,t){return e&&"object"==typeof e?m(e):b("an object",e,t)},q=function(e){return function(t,n){return Array.isArray(t)?t.map((function(t,r){return e(t,y(n,String(r)))})).reduce((function(e,t){return"error"===e.type?e:"error"===t.type?t:m([].concat(Object(o.a)(e.value),[t.value]),[].concat(Object(o.a)(e.warnings),Object(o.a)(t.warnings)))}),m([])):b("array",t,n)}},F=function(e){return function(t){return function(n,r){if(Array.isArray(n)){var a=t(n,r);if("valid"===a.type)for(var o={},i=0;i<a.value.length;i+=1){var s=a.value[i];if("object"==typeof s&&s&&"string"==typeof s[e]){var u=s[e],l="_".concat(u);if(o[l])return h(new c.b("Duplicate value for ".concat(e,": ").concat(u,". The property '").concat(e,"' of '").concat(r.path.join("."),"' has to be unique.")));o[l]=!0}}return a}return b("array",n,r)}}},U=function(e){return function(t,n){return void 0===t?m(void 0):b("used in ".concat(e," instead"),t,n)}},H=function(e){return function(t,n){return void 0===t?m(void 0):h(new c.b(e))}},G=function(e){return function(t){return function(n,r){if(n&&"object"==typeof n&&!Array.isArray(n)){var u=n,l=Object(s.a)(Object.keys(u),(function(e){return!t[e]}));if(l&&e)return h(new c.b("Invalid ".concat(r.label," parameter: ").concat([].concat(Object(o.a)(r.path),[l]).join(".")," is not an accepted parameter.")));var d=Object.keys(u),p=m({});return l&&(p=d.reduce((function(e,n){return t[n]?e:m(e.value,[].concat(Object(o.a)(e.warnings),["Unrecognized ".concat(r.label," parameter: ").concat([].concat(Object(o.a)(r.path),[n]).join(".")," is not a recognized parameter. This may cause issues with your integration in the future.")]))}),p)),Object.keys(t).reduce((function(e,n){if("error"===e.type)return e;var c=(0,t[n])(u[n],y(r,n));return"valid"===c.type&&void 0!==c.value?m(Object(i.a)(Object(i.a)({},e.value),{},Object(a.a)({},n,c.value)),[].concat(Object(o.a)(e.warnings),Object(o.a)(c.warnings))):"valid"===c.type?m(e.value,[].concat(Object(o.a)(e.warnings),Object(o.a)(c.warnings))):c}),p)}return b("an object",n,r)}}},z=G(!0),K=G(!1),Y=function(e,t,n,r){var a=r||{},o=e(t,{authenticatedOrigin:a.authenticatedOrigin||"",element:a.element||"",label:n,path:a.path||[]});return"valid"===o.type||"full"===o.errorType?o:{type:"error",errorType:"full",error:new c.b(f(o.expected,o.actual,o.options))}},W=function(e,t,n,a){var o=Y(e,t,n,a);switch(o.type){case"valid":return{value:o.value,warnings:o.warnings};case"error":throw o.error;default:return r(o)}},V={_componentName:C,_implementation:K({_frame:K({id:C})})},J=K(V),X=function(e){var t=Y(J,e,"");return"error"===t.type?null:t.value},$={clientSecret:v(K({id:C,clientSecret:C,type:C}))},Q=K($),Z={_elements:q(J),_id:C,_commonOptions:Q},ee=K(Z),te=function(e){var t=Y(ee,e,"");return"error"===t.type?null:t.value}},function(e,t,n){"use strict";n.d(t,"a",(function(){return o}));var r=n(5);function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){Object(r.a)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}},function(e,t,n){"use strict";n.d(t,"a",(function(){return c})),n.d(t,"b",(function(){return u})),n.d(t,"c",(function(){return l}));var r=n(9),a=n(17),o=n(18),i=n(30),c=function(e){Object(a.a)(n,e);var t=Object(o.a)(n);function n(e,a){var o;return Object(r.a)(this,n),(o=t.call(this)).name="FetchError",o.type="fetch_error",o.message="Error fetching ".concat(a),o.requestUrl=a,"string"==typeof e?o.message+=": ".concat(e):(o.originalError=e,o.message+=": ".concat(e.message)),o}return n}(Object(i.a)(Error)),s=n(21),u=function(e){Object(a.a)(n,e);var t=Object(o.a)(n);function n(e){var a;return Object(r.a)(this,n),a=t.call(this,e),window.__stripeElementsController&&window.__stripeElementsController.reportIntegrationError(e),a.name="IntegrationError",Object.defineProperty(Object(s.a)(a),"message",{value:a.message,enumerable:!0}),a}return n}(Object(i.a)(Error)),l=(Error,function(e){Object(a.a)(n,e);var t=Object(o.a)(n);function n(e){var a;return Object(r.a)(this,n),(a=t.call(this,e)).name="NetworkError",a.type="network_error",a.requestUrl=e,a}return n}(Object(i.a)(Error)))},function(e,t,n){"use strict";n.d(t,"a",(function(){return o}));var r=n(50),a=n.n(r),o=(n(55),window.Promise?Promise:a.a)},function(e,t,n){"use strict";n.d(t,"e",(function(){return r})),n.d(t,"m",(function(){return a})),n.d(t,"n",(function(){return i})),n.d(t,"k",(function(){return s})),n.d(t,"i",(function(){return u})),n.d(t,"j",(function(){return l})),n.d(t,"f",(function(){return d})),n.d(t,"g",(function(){return p})),n.d(t,"h",(function(){return f})),n.d(t,"c",(function(){return m})),n.d(t,"l",(function(){return h})),n.d(t,"a",(function(){return _})),n.d(t,"b",(function(){return b})),n.d(t,"d",(function(){return j}));var r={card:"card",cardNumber:"cardNumber",cardExpiry:"cardExpiry",cardCvc:"cardCvc",postalCode:"postalCode",iban:"iban",idealBank:"idealBank",p24Bank:"p24Bank",paymentRequestButton:"paymentRequestButton",auBankAccount:"auBankAccount",fpxBank:"fpxBank",netbankingBank:"netbankingBank",epsBank:"epsBank",affirmMessage:"affirmMessage",afterpayClearpayMessage:"afterpayClearpayMessage",linkAuthentication:"linkAuthentication",payment:"payment",shippingAddress:"shippingAddress",cart:"cart",idealBankSecondary:"idealBankSecondary",p24BankSecondary:"p24BankSecondary",auBankAccountNumber:"auBankAccountNumber",auBsb:"auBsb",fpxBankSecondary:"fpxBankSecondary",netbankingBankSecondary:"netbankingBankSecondary",issuingCardNumberDisplay:"issuingCardNumberDisplay",issuingCardCopyButton:"issuingCardCopyButton",issuingCardCvcDisplay:"issuingCardCvcDisplay",issuingCardExpiryDisplay:"issuingCardExpiryDisplay",issuingCardPinDisplay:"issuingCardPinDisplay",epsBankSecondary:"epsBankSecondary",affirmMessageModal:"affirmMessageModal",afterpayClearpayMessageModal:"afterpayClearpayMessageModal",autocompleteSuggestions:"autocompleteSuggestions",achBankSearchResults:"achBankSearchResults",linkInfoModal:"linkInfoModal",loaderUi:"loaderUi"},a=[r.card,r.cardNumber,r.cardExpiry,r.cardCvc,r.postalCode],o=n(15),i="https://js.stripe.com/v3/",c=Object(o.i)(i),s=c?c.origin:"",u=5,l=["stripe_3ds2_challenge","stripe_3ds2_fingerprint","three_d_secure_redirect","intent_cardimageverification_challenge"],d="https://verify.stripe.com/",p={PAYMENT_INTENT:"PAYMENT_INTENT",SETUP_INTENT:"SETUP_INTENT"},f={family:"font-family",src:"src",unicodeRange:"unicode-range",style:"font-style",variant:"font-variant",stretch:"font-stretch",weight:"font-weight",display:"font-display"},m=Object.keys(f).reduce((function(e,t){return e[f[t]]=t,e}),{}),h=[r.issuingCardCopyButton,r.idealBank,r.p24Bank,r.netbankingBank,r.idealBankSecondary,r.p24BankSecondary,r.netbankingBankSecondary,r.fpxBank,r.fpxBankSecondary,r.epsBank,r.epsBankSecondary],_=(Object.keys({visa:"visa",amex:"amex",discover:"discover",mastercard:"mastercard",jcb:"jcb",diners:"diners",unionpay:"unionpay",elo:"elo",unknown:"unknown"}),{VISA:"visa",MASTERCARD:"mastercard",AMEX:"amex",DISCOVER:"discover",JCB:"jcb",DINERS:"diners",UNIONPAY:"unionpay",ELO:"elo"}),b=Object.keys(_).map((function(e){return _[e]})),y="13d9fd9c4",v="stripe.js/".concat(y),O="".concat(v,"; stripe-js-v3/").concat(y),g=("".concat(O,"; raw-card"),"".concat(O,"; create-source-card-data"),"checkout"),j=("".concat(O,"; ").concat(g),"".concat(O,"; ").concat("payment-link","; ").concat(g),"".concat(O,"; hip"),"".concat(O,"; payment-element"),"dashboard")},function(e,t,n){"use strict";function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}n.d(t,"a",(function(){return r}))},function(e,t,n){"use strict";n.d(t,"a",(function(){return c})),n.d(t,"b",(function(){return s})),n.d(t,"c",(function(){return u})),n.d(t,"d",(function(){return l})),n.d(t,"e",(function(){return f})),n.d(t,"f",(function(){return m}));var r,a=n(7),o=n(15),i=n(0),c={checkout_beta_2:"checkout_beta_2",checkout_beta_3:"checkout_beta_3",checkout_beta_4:"checkout_beta_4",checkout_beta_testcards:"checkout_beta_testcards",payment_intent_beta_1:"payment_intent_beta_1",payment_intent_beta_2:"payment_intent_beta_2",payment_intent_beta_3:"payment_intent_beta_3",google_pay_beta_1:"google_pay_beta_1",acss_debit_beta_1:"acss_debit_beta_1",acss_debit_beta_2:"acss_debit_beta_2",afterpay_clearpay_setup_intents_beta:"afterpay_clearpay_setup_intents_beta",bacs_debit_beta:"bacs_debit_beta",fpx_bank_beta_1:"fpx_bank_beta_1",ideal_pm_beta_1:"ideal_pm_beta_1",line_items_beta_1:"line_items_beta_1",oxxo_pm_beta_1:"oxxo_pm_beta_1",paypal_pm_beta_1:"paypal_pm_beta_1",sepa_pm_beta_1:"sepa_pm_beta_1",tax_product_beta_1:"tax_product_beta_1",wechat_pay_pm_beta_1:"wechat_pay_pm_beta_1",wechat_pay_pm_beta_2:"wechat_pay_pm_beta_2",checkout_beta_locales:"checkout_beta_locales",stripe_js_beta_locales:"stripe_js_beta_locales",upi_beta_1:"upi_beta_1",blik_beta_1:"blik_beta_1",issuing_elements_1:"issuing_elements_1",issuing_elements_2:"issuing_elements_2",return_intents_beta_1:"return_intents_beta_1",netbanking_beta_1:"netbanking_beta_1",netbanking_bank_beta_1:"netbanking_bank_beta_1",instant_debits_beta_1:"instant_debits_beta_1",link_beta_1:"link_beta_1",link_beta_2:"link_beta_2",link_beta_3:"link_beta_3",link_default_integration_beta_1:"link_default_integration_beta_1",payment_element_beta_1:"payment_element_beta_1",elements_customers_beta_1:"elements_customers_beta_1",card_country_event_beta_1:"card_country_event_beta_1",id_bank_transfer_beta_1:"id_bank_transfer_beta_1",id_bank_transfer_beta_2:"id_bank_transfer_beta_2",us_bank_account_beta_2:"us_bank_account_beta_2",cup_apple_pay_beta_1:"cup_apple_pay_beta_1",nz_bank_account_beta_1:"nz_bank_account_beta_1",customer_balance_beta_1:"customer_balance_beta_1",payment_element_apple_pay_beta_1:"payment_element_apple_pay_beta_1",link_autofill_modal_beta_1:"link_autofill_modal_beta_1",pix_beta_1:"pix_beta_1",pix_beta_2:"pix_beta_2",shipping_address_element_beta_1:"shipping_address_element_beta_1",process_order_beta_1:"process_order_beta_1",update_order_beta_1:"update_order_beta_1",server_side_confirmation_beta_1:"server_side_confirmation_beta_1",cart_beta_1:"cart_beta_1",pay_by_bank_beta_1:"pay_by_bank_beta_1",blocked_card_brands_beta_1:"blocked_card_brands_beta_1",qris_beta_1:"qris_beta_1",networks_change_1:"networks_change_1"},s=Object.freeze({netbankingBank:"netbanking_bank_beta_1",shippingAddress:["shipping_address_element_beta_1","link_beta_1","link_beta_2","link_beta_3"],cart:"cart_beta_1"}),u=Object.keys(c),l=function(e,t){return Array.isArray(t)?t.some((function(t){return e.indexOf(t)>-1})):e.indexOf(t)>-1},d=window.location.hash.substring(1).split("?")[0],p=Object(i.I)(Object(i.y)({betas:Object(i.J)(Object(i.b)(i.u.apply(void 0,Object(a.a)(u))),(function(){return[]}))}),Object(o.a)(d),"internal"),f=("valid"===p.type&&p.value.betas,function(e){var t=[],n=[];if(e&&e.forEach((function(e){u.indexOf(e)>-1?t.push(c[e]):n.push(e)})),n.length>0){var r="The following betas are unrecognized for Stripe() parameter:\n\n- ".concat(n.join("\n- "),"\n\n They are either invalid or expired betas, please remove these beta flags to prevent future integration issues.");return{validBetas:t,betaWarning:r}}return{validBetas:t}}),m=(r=[],function(e,t){return l(t,c.stripe_js_beta_locales)||-1===r.indexOf(e)?e:"auto"})},function(e,t,n){"use strict";n.d(t,"a",(function(){return i}));var r=n(31);var a=n(34),o=n(28);function i(e){return function(e){if(Array.isArray(e))return Object(r.a)(e)}(e)||Object(a.a)(e)||Object(o.a)(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}},function(e,t,n){"use strict";n.d(t,"b",(function(){return o})),n.d(t,"c",(function(){return i.a})),n.d(t,"a",(function(){return c})),n.d(t,"d",(function(){return a.a})),n.d(t,"f",(function(){return d})),n.d(t,"e",(function(){return p})),n.d(t,"g",(function(){return f}));var r=n(25),a=n(16),o=function(e){var t={frameborder:"0",allowTransparency:"true",scrolling:"no"},n=!r.f;if(n&&(t.allow="payment *"),"STRIPE_3DS2_CHALLENGE"===e){var o="publickey-credentials-get ".concat(Object(a.a)());t.allow=n?"payment *; ".concat(o):o}if("PAYMENT_REQUEST_GOOGLE_PAY"===e){t.sandbox=["allow-scripts","allow-forms","allow-popups","allow-popups-to-escape-sandbox","allow-same-origin"].join(" "),t.referrerpolicy="origin"}return t},i=n(66),c={ADDRESS_AUTOCOMPLETE:"ADDRESS_AUTOCOMPLETE",CARD_ELEMENT:"CARD_ELEMENT",CONTROLLER:"CONTROLLER",METRICS_CONTROLLER:"METRICS_CONTROLLER",PAYMENT_REQUEST_ELEMENT:"PAYMENT_REQUEST_ELEMENT",PAYMENT_REQUEST_BROWSER:"PAYMENT_REQUEST_BROWSER",PAYMENT_REQUEST_GOOGLE_PAY:"PAYMENT_REQUEST_GOOGLE_PAY",IBAN_ELEMENT:"IBAN_ELEMENT",IDEAL_BANK_ELEMENT:"IDEAL_BANK_ELEMENT",P24_BANK_ELEMENT:"P24_BANK_ELEMENT",AUTHORIZE_WITH_URL:"AUTHORIZE_WITH_URL",STRIPE_3DS2_CHALLENGE:"STRIPE_3DS2_CHALLENGE",STRIPE_3DS2_FINGERPRINT:"STRIPE_3DS2_FINGERPRINT",AU_BANK_ACCOUNT_ELEMENT:"AU_BANK_ACCOUNT_ELEMENT",FPX_BANK_ELEMENT:"FPX_BANK_ELEMENT",LIGHTBOX_APP:"LIGHTBOX_APP",ISSUING_CARD_NUMBER_DISPLAY_ELEMENT:"ISSUING_CARD_NUMBER_DISPLAY_ELEMENT",ISSUING_CARD_COPY_BUTTON_ELEMENT:"ISSUING_CARD_COPY_BUTTON_ELEMENT",ISSUING_CARD_CVC_DISPLAY_ELEMENT:"ISSUING_CARD_CVC_DISPLAY_ELEMENT",ISSUING_CARD_EXPIRY_DISPLAY_ELEMENT:"ISSUING_CARD_EXPIRY_DISPLAY_ELEMENT",ISSUING_CARD_PIN_DISPLAY_ELEMENT:"ISSUING_CARD_PIN_DISPLAY_ELEMENT",EPS_BANK_ELEMENT:"EPS_BANK_ELEMENT",HCAPTCHA_APP:"HCAPTCHA_APP",LINK_LOGIN:"LINK_LOGIN",NETBANKING_BANK_ELEMENT:"NETBANKING_BANK_ELEMENT",AFFIRM_MESSAGE_ELEMENT:"AFFIRM_MESSAGE_ELEMENT",AFFIRM_MESSAGE_MODAL_ELEMENT:"AFFIRM_MESSAGE_MODAL_ELEMENT",AFTERPAY_MESSAGE_MODAL_ELEMENT:"AFTERPAY_MESSAGE_MODAL_ELEMENT",AUTOCOMPLETE_SUGGESTIONS_ELEMENT:"AUTOCOMPLETE_SUGGESTIONS_ELEMENT",ACH_BANK_SEARCH_RESULTS_ELEMENT:"ACH_BANK_SEARCH_RESULTS_ELEMENT",INSTANT_DEBITS_APP:"INSTANT_DEBITS_APP",LINK_AUTHENTICATION_ELEMENT:"LINK_AUTHENTICATION_ELEMENT",PAYMENT_ELEMENT:"PAYMENT_ELEMENT",LINKED_ACCOUNTS_INNER:"LINKED_ACCOUNTS_INNER",WECHAT_PAY_INNER:"WECHAT_PAY_INNER",PAYNOW_INNER:"PAYNOW_INNER",PIX_INNER:"PIX_INNER",PROMPTPAY_INNER:"PROMPTPAY_INNER",SHIPPING_ADDRESS_ELEMENT:"SHIPPING_ADDRESS_ELEMENT",LINK_AUTOFILL_MODAL:"LINK_AUTOFILL_MODAL",LINK_INFO_MODAL:"LINK_INFO_MODAL",GOOGLE_MAPS_APP:"GOOGLE_MAPS_APP",LOADER_UI_APP:"LOADER_UI_APP",CART_ELEMENT:"CART_ELEMENT",BACS_MANDATE_CONFIRMATION_APP:"BACS_MANDATE_CONFIRMATION_APP",BACS_CONFIRMATION_INNER:"BACS_CONFIRMATION_INNER"},s=(n(9),n(23),n(1)),u=(n(0),n(4)),l=n(12),d=function(e){var t,n=e.controllerId,r=e.frameId,a=e.targetOrigin,o=e.type,i=a;if("controller"===o?t=Object(l.m)(r):"group"===o?t=Object(l.m)(n):"outer"===o||"hosted"===o?t=window.frames[r]:"inner"===o&&(i=i||"*",t=window.parent),i=i||u.k,t&&"function"==typeof t.postMessage){var c=e.message.delegate?{targetOrigin:i,delegate:e.message.delegate}:i;t.postMessage(JSON.stringify(Object(s.a)(Object(s.a)({},e),{},{__stripeJsV3:!0})),c)}},p=function(e){try{var t="string"==typeof e?JSON.parse(e):e;return t.__stripeJsV3?t:null}catch(e){return null}},f=function(e){return e}},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}n.d(t,"a",(function(){return r}))},function(e,t,n){"use strict";n.d(t,"b",(function(){return o})),n.d(t,"a",(function(){return i})),n.d(t,"g",(function(){return c})),n.d(t,"h",(function(){return s})),n.d(t,"d",(function(){return u})),n.d(t,"e",(function(){return l})),n.d(t,"f",(function(){return d})),n.d(t,"c",(function(){return p}));var r=n(1),a=n(0),o=(n(4),"webauthn"),i="spc",c=function(e,t){switch(e.type){case"object":return{paymentIntent:e.object};case"error":var n=t?{payment_intent:t}:{};return{error:Object(r.a)(Object(r.a)({},n),e.error)};default:return Object(a.a)(e)}},s=function(e,t){switch(e.type){case"error":return{error:Object(r.a)(Object(r.a)({},t?{setup_intent:t}:{}),e.error)};case"object":return{setupIntent:e.object};default:return Object(a.a)(e)}},u=function(e){var t=e.trim().match(/^((seti|pi)_[^_]+)_secret_[^-]+$/);return t?"pi"===t[2]?{id:t[1],clientSecret:t[0],type:"PAYMENT_INTENT"}:{id:t[1],clientSecret:t[0],type:"SETUP_INTENT"}:null},l=function(e){return"payment_intent"===e.object?{id:e.id,clientSecret:e.client_secret,type:"PAYMENT_INTENT"}:{id:e.id,clientSecret:e.client_secret,type:"SETUP_INTENT"}},d=function(e){return"requires_source_action"===e||"requires_action"===e},p=function(e){return"requires_source_action"===e.status||"requires_action"===e.status?e.next_action:null}},function(e,t,n){"use strict";n.d(t,"b",(function(){return i})),n.d(t,"a",(function(){return c})),n.d(t,"c",(function(){return s})),n.d(t,"d",(function(){return u}));var r,a=n(5),o=n(4),i={alipay:"alipay",affirm:"affirm",afterpay_clearpay:"afterpay_clearpay",au_becs_debit:"au_becs_debit",acss_debit:"acss_debit",bacs_debit:"bacs_debit",bancontact:"bancontact",blik:"blik",boleto:"boleto",card:"card",customer_balance:"customer_balance",eps:"eps",fpx:"fpx",giropay:"giropay",grabpay:"grabpay",ideal:"ideal",klarna:"klarna",konbini:"konbini",nz_bank_account:"nz_bank_account",oxxo:"oxxo",p24:"p24",pay_by_bank:"pay_by_bank",paypal:"paypal",sepa_debit:"sepa_debit",sofort:"sofort",three_d_secure:"three_d_secure",upi:"upi",us_bank_account:"us_bank_account",wechat_pay:"wechat_pay",paynow:"paynow",pix:"pix",promptpay:"promptpay",qris:"qris",netbanking:"netbanking",id_bank_transfer:"id_bank_transfer",link:"link",apple_pay:"apple_pay",google_pay:"google_pay"},c=(r={},Object(a.a)(r,o.e.auBankAccount,i.au_becs_debit),Object(a.a)(r,o.e.card,i.card),Object(a.a)(r,o.e.cardNumber,i.card),Object(a.a)(r,o.e.cardExpiry,i.card),Object(a.a)(r,o.e.cardCvc,i.card),Object(a.a)(r,o.e.postalCode,i.card),Object(a.a)(r,o.e.iban,i.sepa_debit),Object(a.a)(r,o.e.idealBank,i.ideal),Object(a.a)(r,o.e.fpxBank,i.fpx),Object(a.a)(r,o.e.p24Bank,i.p24),Object(a.a)(r,o.e.netbankingBank,i.netbanking),Object(a.a)(r,o.e.epsBank,i.eps),r),s=function(e){return-1===o.m.indexOf(e)},u=function(e,t){return null!=t?t:s(e)?null:c[e]||null}},function(e,t,n){"use strict";n.d(t,"a",(function(){return i})),n.d(t,"d",(function(){return d})),n.d(t,"j",(function(){return p})),n.d(t,"b",(function(){return f})),n.d(t,"e",(function(){return u})),n.d(t,"n",(function(){return _})),n.d(t,"l",(function(){return b})),n.d(t,"k",(function(){return v})),n.d(t,"m",(function(){return O})),n.d(t,"c",(function(){return g})),n.d(t,"q",(function(){return j})),n.d(t,"g",(function(){return E})),n.d(t,"h",(function(){return P})),n.d(t,"i",(function(){return A})),n.d(t,"f",(function(){return I})),n.d(t,"p",(function(){return T})),n.d(t,"o",(function(){return N}));var r="1.2em",a="14px",o=function(e){var t=e.split(" ").map((function(e){return parseInt(e.trim(),10)}));return 1===t.length||2===t.length?2*t[0]:3===t.length||4===t.length?t[0]+t[2]:0},i=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:r,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:a,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"0",i=o(n);if("string"==typeof e&&/^[0-9.]+px$/.test(e)){var c=parseFloat(e.toString().replace(/[^0-9.]/g,""));return"".concat(c+i,"px")}var s,u=parseFloat(e.toString().replace(/[^0-9.]/g,"")),l=parseFloat(a.replace(/[^0-9.]/g,"")),d=parseFloat(t.toString().replace(/[^0-9.]/g,""));if("string"==typeof t&&/^(\d+|\d*\.\d+)px$/.test(t))s=d;else if("string"==typeof t&&/^(\d+|\d*\.\d+)em$/.test(t))s=d*l;else if("string"==typeof t&&/^(\d+|\d*\.\d+)%$/.test(t))s=d/100*l;else{if("string"!=typeof t||!/^[\d.]+$/.test(t)&&!/^\d*\.(px|em|%)$/.test(t))return"100%";s=l}var p=u*s+i,f="".concat(p,"px");return/^[0-9.]+px$/.test(f)?f:"100%"},c=n(39),s=n(13),u=function(e,t){return e?window.getComputedStyle(e,t):null},l=function(){return Array.prototype.slice.call(document.querySelectorAll("a[href], area[href], input:not([disabled]),\n select:not([disabled]), textarea:not([disabled]), button:not([disabled]),\n object, embed, *[tabindex], *[contenteditable]")).filter((function(e){var t=e.getAttribute("tabindex"),n=!t||parseInt(t,10)>=0,r=e.getBoundingClientRect(),a=u(e),o=r.width>0&&r.height>0&&a&&"hidden"!==a.getPropertyValue("visibility");return n&&o}))},d=function(e,t){var n=l();return n[Object(s.b)(n,(function(t){return t===e||e.contains(t)}))+("previous"===t?-1:1)]},p=function(e,t){return e.then((function(){return Object(s.f)(t,(function(e){var t=e.element,n=e.tabIndex;""===n?t.removeAttribute("tabindex"):t.setAttribute("tabindex",n)}))}))},f=function(e){var t=[],n=Object(s.f)(document.querySelectorAll("*"),(function(n){var r=n.getAttribute("tabindex")||"";e!==n&&(n.tabIndex=-1),t.push({element:n,tabIndex:r})})),r=Object(c.d)((function(){p(n,t)}));return{lockedPromise:n,lockedElements:t,restoreFocus:r}},m=(n(15),n(20)),h=n(2),_=function(e,t){var n={},r={};e.className.split(/\s+/).forEach((function(e){e&&(n[e]=!0)})),t.forEach((function(e){var t=Object(m.a)(e,2),a=t[0],o=t[1];a.split(/\s+/).forEach((function(e){e&&(r[e]=r[e]||o,n[e]=r[e])}))})),e.className=Object.keys(n).filter((function(e){return n[e]})).join(" ")},b=function(e,t){e.style.cssText=Object.keys(t).map((function(e){return"".concat(e,": ").concat(t[e]," !important;")})).join(" ")},y={border:"none",margin:"0",padding:"0",width:"1px","min-width":"100%",overflow:"hidden",display:"block",visibility:"hidden",position:"fixed",height:"1px","pointer-events":"none","user-select":"none"},v=function(e){b(e,y)},O=function(e){try{return window.parent.frames[e]}catch(e){return null}},g=function(){if(!document.body)throw new h.b("Stripe.js requires that your page has a <body> element.");return document.body},j=function(e){return setTimeout(e,16)},w=function(e,t){return!!e.documentElement&&e.documentElement.contains(t)},k="isConnected"in window.Node.prototype?function(e,t){return t.isConnected&&t.ownerDocument===e}:w,E=function(e,t){return!w(e,t)&&k(e,t)},S=["button","checkbox","file","hidden","image","submit","radio","reset"],P=function(e){var t=e.tagName;if(e.isContentEditable||"TEXTAREA"===t)return!0;if("INPUT"!==t)return!1;var n=e.getAttribute("type");return-1===S.indexOf(n)},A=function(){var e=g(),t=e.style.overflow;e.style.overflow="hidden";var n={passive:!1},r=function(e){return e.preventDefault()},a=function(){};return window.addEventListener("touchmove",a,n),e.addEventListener("touchstart",a,n),e.addEventListener("touchmove",r,n),Object(c.d)((function(){e.style.overflow=t||"",window.removeEventListener("touchmove",a,n),e.removeEventListener("touchstart",a,n),e.removeEventListener("touchmove",r,n)}))},I=function(){var e=document.querySelectorAll("meta[name=viewport][content]"),t=e[e.length-1];return t&&t instanceof HTMLMetaElement?t.content:""},C=function(e){return I().match(e)},T=function(e){C("width=device-width")||e('Elements requires "width=device-width" be set in your page\'s viewport meta tag.\n For more information: https://stripe.com/docs/js/appendix/viewport_meta_requirements')},N=function(e){C("minimum-scale=1")||e('The Financial Connections authentication flow requires "minimum-scale=1" to be set in your page\'s viewport meta tag.')}},function(e,t,n){"use strict";function r(){return(r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}n.d(t,"a",(function(){return o})),n.d(t,"b",(function(){return i})),n.d(t,"c",(function(){return s})),n.d(t,"j",(function(){return u})),n.d(t,"i",(function(){return l})),n.d(t,"f",(function(){return d})),n.d(t,"h",(function(){return p})),n.d(t,"g",(function(){return f})),n.d(t,"d",(function(){return b})),n.d(t,"e",(function(){return y}));n(35),n(34),n(28),n(36);n(20);var a=n(3),o=function(e,t){for(var n=0;n<e.length;n++)if(t(e[n]))return e[n]},i=function(e,t){for(var n=0;n<e.length;n++)if(t(e[n]))return n;return-1},c="[object Object]",s=function e(t,n){if("object"!=typeof t||"object"!=typeof n)return t===n;if(null===t||null===n)return t===n;var r=Array.isArray(t);if(r!==Array.isArray(n))return!1;var a=Object.prototype.toString.call(t)===c;if(a!==(Object.prototype.toString.call(n)===c))return!1;if(!a&&!r)return!1;var o=Object.keys(t),i=Object.keys(n);if(o.length!==i.length)return!1;for(var s={},u=0;u<o.length;u++)s[o[u]]=!0;for(var l=0;l<i.length;l++)s[i[l]]=!0;var d=Object.keys(s);if(d.length!==o.length)return!1;var p=t,f=n;return d.every((function(t){return e(p[t],f[t])}))},u=function(e){return Object.keys(e).map((function(t){return e[t]}))},l=function(e,t){for(var n={},r=0;r<t.length;r++)n[t[r]]=!0;for(var a=[],o=0;o<e.length;o++)n[e[o]]&&a.push(e[o]);return a},d=function(e,t){var n=0,r=function r(a){for(var o=Date.now();n<e.length&&Date.now()-o<50;)t(e[n]),n++;n===e.length?a():setTimeout((function(){return r(a)}))};return new a.a((function(e){return r(e)}))},p=function(e,t){for(var n={},r=0;r<t.length;r++)void 0!==e[t[r]]&&(n[t[r]]=e[t[r]]);return n},f=function(e,t){return function(e,t){for(var n={},r=Object.keys(e),a=0;a<r.length;a++)t(r[a],e[r[a]])&&(n[r[a]]=e[r[a]]);return n}(e,(function(e,n){return-1===t.indexOf(e)}))},m=function(e){return e&&"object"==typeof e&&(e.constructor===Array||e.constructor===Object)},h=function(e){return m(e)?Array.isArray(e)?e.slice(0,e.length):r({},e):e},_=function e(t){return function(){for(var n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];if(Array.isArray(r[0])&&t)return h(r[0]);var o=Array.isArray(r[0])?[]:{};return r.forEach((function(n){n&&Object.keys(n).forEach((function(r){var a=o[r],i=n[r],c=m(a)&&!(t&&Array.isArray(a));"object"==typeof i&&c?o[r]=e(t)(a,h(i)):void 0!==i?o[r]=m(i)?e(t)(i):h(i):void 0!==a&&(o[r]=a)}))})),o}},b=_(!1),y=_(!0)},function(e,t,n){"use strict";function r(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}n.d(t,"a",(function(){return r}))},function(e,t,n){"use strict";n.d(t,"a",(function(){return a})),n.d(t,"j",(function(){return i})),n.d(t,"d",(function(){return s})),n.d(t,"c",(function(){return u})),n.d(t,"i",(function(){return l})),n.d(t,"b",(function(){return d})),n.d(t,"h",(function(){return p})),n.d(t,"e",(function(){return m})),n.d(t,"f",(function(){return h})),n.d(t,"g",(function(){return _}));var r=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},a=function(e){var t={};return e.replace(/\+/g," ").split("&").forEach((function(e,n){var a,o=e.split("="),i=decodeURIComponent(o[0]),c=t,s=0,u=i.split("]["),l=u.length-1;if(/\[/.test(u[0])&&/\]$/.test(u[l])?(u[l]=u[l].replace(/\]$/,""),l=(u=u.shift().split("[").concat(u)).length-1):l=0,!(u.indexOf("__proto__")>=0))if(2===o.length)if(a=decodeURIComponent(o[1]),l)for(;s<=l;s++){if(i=""===u[s]?c.length:u[s],!r(c,i)&&c[i])return;c[i]=s<l?c[i]||(u[s+1]&&isNaN(u[s+1])?{}:[]):a,c=c[i]}else if(Array.isArray(t[i]))t[i].push(a);else if(void 0!==t[i]){if(!r(t,i))return;t[i]=[t[i],a]}else t[i]=a;else i&&(t[i]="")})),t},o=n(7),i=function e(t,n){var r=[];return Object.keys(t).forEach((function(a){var i=t[a],c=n?"".concat(n,"[").concat(a,"]"):a;if(i&&"object"==typeof i){var s=e(i,c);""!==s&&(r=[].concat(Object(o.a)(r),[s]))}else null!=i&&(r=[].concat(Object(o.a)(r),["".concat(c,"=").concat(encodeURIComponent(String(i)))]))})),r.join("&").replace(/%20/g,"+")},c=/^(http(s)?):\/\//,s=function(e){return c.test(e)},u=function(e){var t=e.match(c);return t&&t.length?t[1]:null},l=function(e){if(!s(e))return null;var t=document.createElement("a");t.href=e;var n=t.protocol,r=t.host,a=t.pathname,o=/:80$/,i=/:443$/;return"http:"===n&&o.test(r)?r=r.replace(o,""):"https:"===n&&i.test(r)&&(r=r.replace(i,"")),{host:r,protocol:n,origin:"".concat(n,"//").concat(r),path:a}},d=function(e){var t=l(e);return t?t.origin:null},p=function(e,t){if("/"===t[0]){var n=l(e);return n?"".concat(n.origin).concat(t):t}var r=e.replace(/\/[^/]*$/,"/");return"".concat(r).concat(t)},f=l("https://payments.stripe.com"),m=(f&&f.origin,function(e,t){var n=l(e),r=l(t);return!(!n||!r)&&n.origin===r.origin}),h=function(e){return m(e,"https://js.stripe.com/v3/")},_=function(e){return h(e)||function(e){var t=l(e),n=t?t.host:"";return"stripe.com"===n||!!n.match(/\.stripe\.(com|me)$/)}(e)}},function(e,t,n){"use strict";n.d(t,"a",(function(){return r}));var r=function(e){return"".concat("https://js.stripe.com/v3/").concat(e||"")}},function(e,t,n){"use strict";n.d(t,"a",(function(){return a}));var r=n(32);function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&Object(r.a)(e,t)}},function(e,t,n){"use strict";n.d(t,"a",(function(){return s}));var r=n(24),a=n(37),o=n(41),i=n(21);function c(e,t){return!t||"object"!==Object(o.a)(t)&&"function"!=typeof t?Object(i.a)(e):t}function s(e){var t=Object(a.a)();return function(){var n,a=Object(r.a)(e);if(t){var o=Object(r.a)(this).constructor;n=Reflect.construct(a,arguments,o)}else n=a.apply(this,arguments);return c(this,n)}}},function(e,t,n){"use strict";n.d(t,"k",(function(){return u})),n.d(t,"l",(function(){return l})),n.d(t,"h",(function(){return d})),n.d(t,"i",(function(){return p})),n.d(t,"j",(function(){return f})),n.d(t,"m",(function(){return m})),n.d(t,"g",(function(){return h})),n.d(t,"c",(function(){return _})),n.d(t,"d",(function(){return b})),n.d(t,"f",(function(){return y})),n.d(t,"b",(function(){return v})),n.d(t,"a",(function(){return O})),n.d(t,"e",(function(){return g}));var r=n(20),a=n(0),o=n(2),i=n(11),c=n(26),s=function(e){var t=e.split(/(?=[A-Z])/).join("-").toLowerCase();return"https://stripe.com/docs/stripe-js/reference#stripe-".concat(t)},u=function(e,t){return Object(a.H)(c.h,e,"stripe.".concat(t," intent secret")).value},l=function(e,t){return Object(a.H)(c.i,e,"stripe.".concat(t," intent secret")).value},d=function(e){if(!e||!e.payment_method||!e.payment_method.type||"string"!=typeof e.payment_method.type)return null;var t=e.payment_method.type;return i.b[t]||null},p=function(e,t){return Object(a.H)(c.c,t,e).value},f=function(e,t,n,r){if("valid"===Object(a.I)(a.g,n,t).type)throw new o.b("Do not pass an Element to stripe.".concat(t,"() directly.\n")+"For more information: ".concat(s(t)));var i=Object(a.H)(Object(c.d)(e,t),n,t).value,u=i.source,l=i.paymentMethodData,d=i.paymentMethodOptions,p=i.paymentMethod,f=i.otherParams;if(null!=u&&(null!=l||null!=p))throw new o.b("".concat(t,": Expected either source or payment_method, but not both."));if(l){if(l.element)return{mode:{tag:"paymentMethod-from-element",type:e,elementName:l.element._componentName,frameId:l.element._implementation._frame.id,data:l.data,options:d,intentSecret:r},otherParams:f};if(e)return{mode:{tag:"paymentMethod-from-data",type:e,data:l.data,options:d,intentSecret:r},otherParams:f}}else{if(p)return{mode:{tag:"paymentMethod",paymentMethod:p,options:d,intentSecret:r},otherParams:f};if(u)return{mode:{tag:"source",source:u,intentSecret:r},otherParams:f}}return{mode:{tag:"none",intentSecret:r},otherParams:f}},m=function(e,t){if("object"==typeof e&&null!==e&&void 0!==e.handleActions)throw new o.b("stripe.".concat(t," does not support a handleActions option. For more information, see ").concat(s(t)))},h=function(e,t){var n=e.split("#"),a=Object(r.a)(n,2),o=a[0],i=a[1],c=o.split("?"),s=Object(r.a)(c,2),u=s[0],l=s[1],d="?",p="payment_intent"===t.object?["payment_intent","payment_intent_client_secret","redirect_status"]:["setup_intent","setup_intent_client_secret","redirect_status"];(l||"").split("&").forEach((function(e,t){var n=e.split("="),a=Object(r.a)(n,1)[0];-1===p.indexOf(a)&&(d+="".concat("?"===d?"":"&").concat(e))}));var f="payment_intent"===t.object?"payment":"setup";d+="".concat("?"===d?"":"&").concat(f,"_intent=").concat(t.id),d+="&".concat(f,"_intent_client_secret=").concat(t.client_secret);var m=u+(d+="&redirect_status=succeeded");return i?"".concat(m,"#").concat(i):m},_={type:"validation_error",code:"incomplete_payment_details"},b={type:"instant_verification_error",code:"instant_verification"},y={type:"validation_error",code:"unexpected"},v={type:"validation_error",code:"civ_unexpected"},O={type:"validation_error",code:"payment_intent_authentication_failure"},g={type:"instant_verification_incomplete_error",code:"instant_verification_incomplete"}},function(e,t,n){"use strict";n.d(t,"a",(function(){return i}));var r=n(35);var a=n(28),o=n(36);function i(e,t){return Object(r.a)(e)||function(e,t){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e)){var n=[],r=!0,a=!1,o=void 0;try{for(var i,c=e[Symbol.iterator]();!(r=(i=c.next()).done)&&(n.push(i.value),!t||n.length!==t);r=!0);}catch(e){a=!0,o=e}finally{try{r||null==c.return||c.return()}finally{if(a)throw o}}return n}}(e,t)||Object(a.a)(e,t)||Object(o.a)()}},function(e,t,n){"use strict";function r(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}n.d(t,"a",(function(){return r}))},function(e,t,n){"use strict";n.d(t,"b",(function(){return a})),n.d(t,"a",(function(){return o}));var r=n(8),a=function(e,t){var n=e.createLightboxFrame({type:r.a.LIGHTBOX_APP,options:t});return n.show(),n._on("nested-frame-loaded",(function(){n.fadeInBackdrop(),setTimeout((function(){n.action.openLightboxFrame()}),200)})),n},o=function(e){return e.action.closeLightboxFrame(),e.destroy()}},function(e,t,n){"use strict";function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function a(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),e}n.d(t,"a",(function(){return a}))},function(e,t,n){"use strict";function r(e){return(r=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}n.d(t,"a",(function(){return r}))},function(e,t,n){"use strict";n.d(t,"e",(function(){return d})),n.d(t,"d",(function(){return p})),n.d(t,"g",(function(){return f})),n.d(t,"i",(function(){return m})),n.d(t,"h",(function(){return h})),n.d(t,"a",(function(){return _})),n.d(t,"j",(function(){return b})),n.d(t,"f",(function(){return y})),n.d(t,"l",(function(){return v})),n.d(t,"c",(function(){return O})),n.d(t,"m",(function(){return g})),n.d(t,"b",(function(){return j})),n.d(t,"k",(function(){return w}));var r=function(e){return/Edge\//i.test(e)},a=function(e){return/Edg\//i.test(e)},o=function(e){return/(MSIE ([0-9]{1,}[.0-9]{0,})|Trident\/)/i.test(e)},i=function(e){return/SamsungBrowser/.test(e)},c=function(e){return/iPad|iPhone/i.test(e)&&!o(e)},s=function(e){return/^((?!chrome|android).)*safari/i.test(e)&&!i(e)},u=function(e){return/Android/i.test(e)&&!o(e)},l=window.navigator.userAgent,d=r(l),p=a(l),f=(/Edge\/((1[0-6]\.)|0\.)/i.test(l),o(l)),m=(function(e){/MSIE ([0-9]{1,}[.0-9]{0,})/i.test(e)}(l),c(l)),h=(function(e){/iPad/i.test(e)&&o(e)}(l),function(e){return c(e)||u(e)}(l)),_=u(l),b=(function(e){/Android 4\./i.test(e)&&!/Chrome/i.test(e)&&u(e)}(l),s(l)),y=(function(e){s(e)&&c(e)}(l),function(e){return/Firefox\//i.test(e)}(l)),v=(function(e){/Firefox\/(50|51|[0-4]?\d)([^\d]|$)/i.test(e)}(l),i(l)),O=function(e){return/Chrome\//i.test(e)}(l),g=(function(e){/Chrome\/(6[6-9]|[7-9]\d+|[1-9]\d{2,})/i.test(e)}(l),function(e){return/AppleWebKit/i.test(e)&&!/Chrome/i.test(e)&&!r(e)&&!o(e)}(l)),j=function(e){return/Chrome/i.test(e)&&!r(e)}(l),w=(function(e){/CriOS/i.test(e)}(l),b&&"download"in document.createElement("a"));!!window.navigator.brave&&window.navigator.brave.isBrave},function(e,t,n){"use strict";n.d(t,"g",(function(){return f})),n.d(t,"h",(function(){return m})),n.d(t,"i",(function(){return h})),n.d(t,"f",(function(){return _})),n.d(t,"e",(function(){return b})),n.d(t,"c",(function(){return y})),n.d(t,"b",(function(){return v})),n.d(t,"a",(function(){return O})),n.d(t,"d",(function(){return g}));var r=n(1),a=n(7),o=n(41);function i(e){var t=function(e,t){if("object"!==Object(o.a)(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Object(o.a)(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Object(o.a)(t)?t:String(t)}var c=n(14),s=n(2),u=n(0),l=n(4),d=n(11),p=n(10),f=function(e,t){if("string"!=typeof e)return Object(u.m)("a client_secret string",e,t);var n=Object(p.d)(e);return null===n?Object(u.m)("a client secret of the form ${id}_secret_${secret}",e,t):Object(u.G)(n,[])},m=function(e,t){var n=f(e,t);return"error"===n.type?n:n.value.type===l.g.SETUP_INTENT?Object(u.j)(new s.b(Object(u.E)("a PaymentIntent client secret","a SetupIntent client secret",t))):Object(u.G)(n.value,[])},h=function(e,t){var n=f(e,t);return"error"===n.type?n:n.value.type===l.g.PAYMENT_INTENT?Object(u.j)(new s.b(Object(u.E)("a SetupIntent client secret","a PaymentIntent client secret",t))):Object(u.G)(n.value,[])},_=function(e,t){if(null===e)return Object(u.k)("object","null",t);if("object"!=typeof e)return Object(u.k)("object",typeof e,t);var n=e.client_secret,r=e.status,a=e.next_action,o=f(n,Object(u.i)(t,"client_secret"));if("error"===o.type)return o;if("string"!=typeof r)return Object(u.k)("string",typeof r,Object(u.i)(t,"status"));if(("requires_source_action"===r||"requires_action"===r)&&"object"!=typeof a)return Object(u.k)("object",typeof a,Object(u.i)(t,"next_action"));if("payment_intent"===e.object){var i=e;return Object(u.G)(i,[])}var c=e;return Object(u.G)(c,[])},b=function(e){return function(t,n){if("object"!=typeof t)return Object(u.k)("object",typeof t,n);if(null===t)return Object(u.k)("object","null",n);var r,o=t.type,l=Object(c.a)(t,["type"]);if(null===e){if("string"!=typeof o)return Object(u.k)("a string such as 'card', 'ideal', or 'sepa_debit'",typeof o,Object(u.i)(n,"type"));r=o}else{if(void 0!==o&&o!==e)return"string"!=typeof o?Object(u.k)("a string such as 'card', 'ideal', or 'sepa_debit'",typeof o,Object(u.i)(n,"type")):Object(u.k)('"'.concat(o,'"'),'"'.concat(e,'"'),Object(u.i)(n,"type"));r=e}var p=l[r],f=(l[r],Object(c.a)(l,[r].map(i)));if(-1!==["acss_debit","affirm","afterpay_clearpay","alipay","bancontact","customer_balance","eps","giropay","grabpay","klarna","konbini","oxxo","p24","paynow","paypal","pix","us_bank_account","wechat_pay","pay_by_bank","paynow","promptpay","qris"].indexOf(r)&&void 0===p&&(p={}),"object"!=typeof p)return Object(u.k)("an object or element",typeof t[r],Object(u.i)(n,r));if(null===p)return Object(u.k)("an object or element","null",Object(u.i)(n,r));var m=Object(u.c)(p);if(m){var h=m._componentName;if(d.a[h]!==r){var _=[].concat(Object(a.a)(n.path),[r]).join("."),b=n.label,y=new s.b("Invalid value for ".concat(b,": ").concat(_," was `").concat(h,"` Element, which cannot be used to create ").concat(r," PaymentMethods."));return Object(u.j)(y)}return Object(u.G)({type:r,element:m,data:f})}return Object(u.G)({type:r,element:null,data:l})}},y=Object(u.J)(Object(u.y)({handleActions:Object(u.J)(u.e,(function(){return!0}))}),(function(){return{handleActions:!0}})),v=function(e){return function(t,n){if("object"!=typeof t)return Object(u.k)("object",typeof t,n);if(null===t)return Object(u.k)("object","null",n);var r=t.billing_details,a=Object(c.a)(t,["billing_details"]);return Object(u.G)({paymentMethodData:{type:"".concat(e),billing_details:r},otherParams:a})}},O=function(e){return function(t,n){if("object"!=typeof t)return Object(u.k)("object",typeof t,n);if(null===t)return Object(u.k)("object","null",n);var a=t.clientSecret,o=t.params,i=Object(c.a)(t,["clientSecret","params"]),s=Object(u.I)(e,a,n.label,{path:["clientSecret"]});if("error"===s.type)return s;if("object"!=typeof o)return Object(u.k)("object",typeof o,Object(u.i)(n,"params"));if(null===o)return Object(u.k)("object","null",Object(u.i)(n,"params"));var l=o.payment_method_type,d=o.payment_method_data;return"string"!=typeof l?Object(u.k)("string",typeof l,Object(u.i)(Object(u.i)(n,"params"),"payment_method_type")):"object"!=typeof d&&void 0!==d?Object(u.k)("object",typeof d,Object(u.i)(Object(u.i)(n,"params"),"payment_method_data")):Object(u.G)({clientSecret:s.value,paymentMethodData:Object(r.a)({type:l},(null==d?void 0:d.billing_details)&&{billing_details:null==d?void 0:d.billing_details}),otherParams:i})}},g=function(e,t){return function(n,o){if(void 0===n)return Object(u.G)({paymentMethodData:null,paymentMethodOptions:null,source:null,paymentMethod:null,otherParams:{}});if("object"!=typeof n)return Object(u.k)("object",typeof n,o);if(null===n)return Object(u.k)("object","null",o);var i=n.source,d=n.source_data,p=n.payment_method_data,f=n.payment_method_options,m=n.payment_method,h=Object(c.a)(n,["source","source_data","payment_method_data","payment_method_options","payment_method"]);if(null!=d)throw new s.b("".concat(t,": Expected payment_method, or source, not source_data."));if(null!=p)throw new s.b("".concat(t,": Expected payment_method, or source, not payment_method_data."));if(null!=i&&null!=m)throw new s.b("".concat(t,": Expected either payment_method or source, but not both."));if(null===e&&null!=m&&"string"!=typeof m)throw new s.b("".concat(t,": Expected payment_method[type] to be set if payment_method is passed."));if(null!=i){if("string"!=typeof i)return Object(u.k)("string",typeof i,Object(u.i)(o,"source"));if("updatePaymentIntent"===t)throw new s.b("".concat(t,": Expected payment_method, not source to be passed."));return Object(u.G)({source:i,paymentMethodData:null,paymentMethodOptions:null,paymentMethod:null,otherParams:h})}if(null!=m&&"string"!=typeof m&&"object"!=typeof m)return Object(u.k)("string or object",typeof m,Object(u.i)(o,"payment_method"));var _,y=Object(u.I)((_=e,function(e,t){if(null==e)return Object(u.G)(null);if("object"!=typeof e)return Object(u.k)("object",typeof e,t);var n=e.card,a=Object(c.a)(e,["card"]);if(!n||"object"!=typeof n)return Object(u.G)(e);var o=n.cvc,i=Object(c.a)(n,["cvc"]);if(null==o)return Object(u.G)(e);var s=Object(u.c)(o),d=s?s._componentName:"";return l.e.cardCvc!==d?Object(u.k)("`".concat(l.e.cardCvc,"` Element"),d?"`".concat(d,"` Element"):typeof o,Object(u.i)(t,"".concat(_||"card",".cvc"))):Object(u.G)(Object(r.a)(Object(r.a)({},a),{},{card:Object(r.a)(Object(r.a)({},i),{},{cvc:s})}))}),f,t,{path:[].concat(Object(a.a)(o.path),["payment_method_options"])});if("error"===y.type)return y;if("string"==typeof m)return Object(u.G)({source:null,paymentMethodData:null,paymentMethodOptions:y.value,paymentMethod:m,otherParams:h});if("object"==typeof m&&null!==m){var v=Object(u.I)(b(e),m,t,{path:[].concat(Object(a.a)(o.path),["payment_method"])});if("error"===v.type)return v;var O=v.value;return Object(u.G)({source:null,paymentMethod:null,paymentMethodOptions:y.value,paymentMethodData:O,otherParams:h})}return Object(u.G)({source:null,paymentMethodData:null,paymentMethodOptions:null,paymentMethod:null,otherParams:h})}}},function(e,t,n){"use strict";n.d(t,"a",(function(){return s}));var r=n(9),a=n(23),o=Date.now?function(){return Date.now()}:function(){return(new Date).getTime()},i=o(),c=window.performance&&window.performance.now?function(){return window.performance.now()}:function(){return o()-i},s=function(){function e(t){Object(r.a)(this,e),this.timestampValue=null!=t?t:c()}return Object(a.a)(e,[{key:"getAsPosixTime",value:function(){return o()-this.getElapsedTime()}},{key:"getElapsedTime",value:function(e){return Math.round((e?e.timestampValue:c())-this.timestampValue)}},{key:"valueOf",value:function(){return Math.round(this.timestampValue)}}],[{key:"fromPosixTime",value:function(t){return new e(t-o()+c())}}]),e}()},function(e,t,n){"use strict";n.d(t,"a",(function(){return a}));var r=n(31);function a(e,t){if(e){if("string"==typeof e)return Object(r.a)(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Object(r.a)(e,t):void 0}}},function(e,t,n){"use strict";n.d(t,"a",(function(){return a})),n.d(t,"c",(function(){return o})),n.d(t,"b",(function(){return i})),n.d(t,"d",(function(){return p}));var r=n(2),a={live:"live",test:"test",unknown:"unknown"},o=function(e){return/^pk_test_/.test(e)?a.test:/^pk_live_/.test(e)?a.live:a.unknown},i=function(e){if(e===a.unknown)throw new r.b("It looks like you're using an older Stripe key. In order to use this API, you'll need to use a modern API key, which is prefixed with 'pk_live_' or 'pk_test_'.\n You can roll your publishable key here: https://dashboard.stripe.com/account/apikeys")},c="publishable",s="secret",u="ephemeral",l="restricted",d="unknown",p=function(e){if(""===e)throw new r.b("Please call Stripe() with your publishable key. You used an empty string.");switch(function(e){switch(e.split("_",1)[0]){case"pk":return c;case"sk":return s;case"ek":return u;case"rk":return l;default:return d}}(e)){case s:throw new r.b("You should not use your secret key with Stripe.js.\n Please pass a publishable key instead.");case u:throw new r.b("You should not use an ephemeral key with Stripe.js.\n Please pass a publishable key instead.");case l:throw new r.b("You should not use a restricted key with Stripe.js.\n Please pass a publishable key instead.")}}},function(e,t,n){"use strict";n.d(t,"a",(function(){return c}));var r=n(24),a=n(32);var o=n(37);function i(e,t,n){return(i=Object(o.a)()?Reflect.construct:function(e,t,n){var r=[null];r.push.apply(r,t);var o=new(Function.bind.apply(e,r));return n&&Object(a.a)(o,n.prototype),o}).apply(null,arguments)}function c(e){var t="function"==typeof Map?new Map:void 0;return(c=function(e){if(null===e||(n=e,-1===Function.toString.call(n).indexOf("[native code]")))return e;var n;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,o)}function o(){return i(e,arguments,Object(r.a)(this).constructor)}return o.prototype=Object.create(e.prototype,{constructor:{value:o,enumerable:!1,writable:!0,configurable:!0}}),Object(a.a)(o,e)})(e)}},function(e,t,n){"use strict";function r(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}n.d(t,"a",(function(){return r}))},function(e,t,n){"use strict";function r(e,t){return(r=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}n.d(t,"a",(function(){return r}))},function(e,t,n){"use strict";n.d(t,"e",(function(){return u})),n.d(t,"a",(function(){return l})),n.d(t,"b",(function(){return d})),n.d(t,"c",(function(){return p})),n.d(t,"d",(function(){return f}));var r=n(0),a=n(4),o=n(3),i=n(10),c=n(19),s=function(e){switch(e.type){case"error":return{error:e.error};case"object":switch(e.object.object){case"payment_intent":return{paymentIntent:e.object};case"setup_intent":return{setupIntent:e.object};default:return Object(r.a)(e.object)}default:return Object(r.a)(e)}},u=function(e,t,n,r,o){return t===a.g.PAYMENT_INTENT?n.action.retrievePaymentIntent({hosted:false,intentSecret:e,locale:r,asErrorIfNotSucceeded:true,expandParam:o||[]}).then(s):n.action.retrieveSetupIntent({hosted:false,intentSecret:e,locale:r,asErrorIfNotSucceeded:true,expandParam:o||[]}).then(s)},l=function(e,t,n,r,o,i,c){return t===a.g.PAYMENT_INTENT?n.action.cancelPaymentIntentSource({intentSecret:e,locale:o,sourceId:r,sourceIntentId:i,publishableKey:c}).then(s):n.action.cancelSetupIntentSource({intentSecret:e,locale:o,sourceId:r,sourceIntentId:i,publishableKey:c}).then(s)},d=function(e){return(e.error?e.error.payment_intent||e.error.setup_intent:e.paymentIntent||e.setupIntent)||null},p=function(e,t,n,r,a,o){var i,c=!0,s=3,l=0;return function p(){l+=1,u(e,t,n,r,a).then((function(e){if(c){var t=d(e);if(null!==t)switch(s=3,t.status){case"requires_action":case"requires_source_action":return void(i=setTimeout(p,5e3));case"processing":return void(i=setTimeout(p,1e3));default:o(e,l)}else if(s>0){var n=500*Math.pow(2,3-s);i=setTimeout(p,n),s-=1}else o(e,l)}}))}(),function(){clearTimeout(i),c=!1}},f=function(e){var t=e.initialDelay,n=e.pollTimeGap,r=e.checkIntent,a=e.locale,u=e.controller,l=e.intent,d=e.expandParam,p=void 0===d?[]:d,f=e.shouldPoll,m=void 0===f?function(){return!0}:f,h="payment_intent"===l.object?{paymentIntent:l}:{setupIntent:l};return new o.a((function(e,o){setTimeout((function(){var t=setInterval((function(){if(!m())return e(h),void clearInterval(t);var n;(n={hosted:!1,intentSecret:Object(i.e)(l),locale:a,expandParam:p},"payment_intent"===l.object?u.action.retrievePaymentIntent(n):u.action.retrieveSetupIntent(n)).then((function(n){h=s(n),n.error?(u.action.localizeError(c.f).then((function(e){return{error:e}})).then(e),clearInterval(t)):r(n.object)&&(e(h),clearInterval(t))}))}),n)}),t-n)}))}},function(e,t,n){"use strict";function r(e){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e))return Array.from(e)}n.d(t,"a",(function(){return r}))},function(e,t,n){"use strict";function r(e){if(Array.isArray(e))return e}n.d(t,"a",(function(){return r}))},function(e,t,n){"use strict";function r(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}n.d(t,"a",(function(){return r}))},function(e,t,n){"use strict";function r(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}n.d(t,"a",(function(){return r}))},function(e,t,n){"use strict";n.d(t,"b",(function(){return s})),n.d(t,"d",(function(){return u})),n.d(t,"a",(function(){return d})),n.d(t,"c",(function(){return p}));var r,a,o,i=n(5),c=n(4),s=(r={},Object(i.a)(r,c.e.card,{unique:!0,conflict:[c.e.cardNumber,c.e.cardExpiry,c.e.cardCvc,c.e.postalCode],beta:!1,implementation:"legacy"}),Object(i.a)(r,c.e.cardNumber,{unique:!0,conflict:[c.e.card],beta:!1,implementation:"legacy"}),Object(i.a)(r,c.e.cardExpiry,{unique:!0,conflict:[c.e.card],beta:!1,implementation:"legacy"}),Object(i.a)(r,c.e.cardCvc,{unique:!0,conflict:[c.e.card],beta:!1,implementation:"legacy"}),Object(i.a)(r,c.e.postalCode,{unique:!0,conflict:[c.e.card],beta:!1,implementation:"legacy"}),Object(i.a)(r,c.e.paymentRequestButton,{unique:!0,conflict:[],beta:!1,implementation:"legacy"}),Object(i.a)(r,c.e.iban,{unique:!0,conflict:[],beta:!1,implementation:"legacy"}),Object(i.a)(r,c.e.idealBank,{unique:!0,conflict:[],beta:!1,implementation:"legacy"}),Object(i.a)(r,c.e.p24Bank,{unique:!0,conflict:[],beta:!1,implementation:"legacy"}),Object(i.a)(r,c.e.auBankAccount,{unique:!0,beta:!1,conflict:[],implementation:"legacy"}),Object(i.a)(r,c.e.fpxBank,{unique:!0,beta:!1,conflict:[],implementation:"legacy"}),Object(i.a)(r,c.e.netbankingBank,{unique:!0,beta:!0,conflict:[],implementation:"legacy"}),Object(i.a)(r,c.e.issuingCardCopyButton,{unique:!1,beta:!0,conflict:[],implementation:"legacy"}),Object(i.a)(r,c.e.issuingCardNumberDisplay,{unique:!1,beta:!0,conflict:[],implementation:"legacy"}),Object(i.a)(r,c.e.issuingCardCvcDisplay,{unique:!1,beta:!0,conflict:[],implementation:"legacy"}),Object(i.a)(r,c.e.issuingCardExpiryDisplay,{unique:!1,beta:!0,conflict:[],implementation:"legacy"}),Object(i.a)(r,c.e.issuingCardPinDisplay,{unique:!1,beta:!0,conflict:[],implementation:"legacy"}),Object(i.a)(r,c.e.epsBank,{unique:!0,conflict:[],beta:!0,implementation:"legacy"}),Object(i.a)(r,c.e.affirmMessage,{unique:!1,conflict:[],beta:!0,implementation:"affirm_message"}),Object(i.a)(r,c.e.afterpayClearpayMessage,{unique:!1,conflict:[],beta:!1,implementation:"afterpay_message"}),Object(i.a)(r,c.e.linkAuthentication,{unique:!0,conflict:[],beta:!0,implementation:"frame"}),Object(i.a)(r,c.e.payment,{unique:!0,conflict:[],beta:!0,implementation:"frame"}),Object(i.a)(r,c.e.shippingAddress,{unique:!0,conflict:[],beta:!0,implementation:"frame"}),Object(i.a)(r,c.e.cart,{unique:!0,conflict:[],beta:!0,implementation:"cart"}),r),u="__PrivateStripeElement",l=["brand"],d=(a={},Object(i.a)(a,c.e.card,l),Object(i.a)(a,c.e.cardNumber,l),Object(i.a)(a,c.e.iban,["country","bankName"]),Object(i.a)(a,c.e.auBankAccount,["bankName","branchName"]),a),p=(o={},Object(i.a)(o,c.e.idealBank,{secondary:c.e.idealBankSecondary}),Object(i.a)(o,c.e.p24Bank,{secondary:c.e.p24BankSecondary}),Object(i.a)(o,c.e.fpxBank,{secondary:c.e.fpxBankSecondary}),Object(i.a)(o,c.e.netbankingBank,{secondary:c.e.netbankingBankSecondary}),Object(i.a)(o,c.e.epsBank,{secondary:c.e.epsBankSecondary}),o)},function(e,t,n){"use strict";n.d(t,"b",(function(){return o})),n.d(t,"a",(function(){return i})),n.d(t,"d",(function(){return c})),n.d(t,"c",(function(){return s}));var r=n(2),a=n(3),o=function(e){var t={},n={};return function(r){var a="_".concat(r);if("string"==typeof r&&void 0!==t[a])return t[a];if("number"==typeof r&&void 0!==n[a])return n[a];var o=e(r);return"string"==typeof r&&(t[a]=o),"number"==typeof r&&(n[a]=o),o}},i=function(e,t){var n=!1;return function(){if(n)throw new r.b(t);n=!0;try{return e.apply(void 0,arguments).then((function(e){return n=!1,e}),(function(e){throw n=!1,e}))}catch(e){throw n=!1,e}}},c=function(e){var t=e;return function(){t&&(t.apply(void 0,arguments),t=null)}},s=function(e,t){return e.reduce((function(e,n){return e.then((function(e){return"SATISFIED"===e.type?e:n().then((function(e){return t(e)?{type:"SATISFIED",value:e}:{type:"UNSATISFIED"}}))}))}),a.a.resolve({type:"UNSATISFIED"}))}},,function(e,t,n){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}n.d(t,"a",(function(){return r}))},function(e,t,n){"use strict";n.d(t,"a",(function(){return g})),n.d(t,"c",(function(){return w})),n.d(t,"b",(function(){return k}));var r=n(10),a=n(60),o=n(61),i=n(65),c=n(3),s=n(22),u=n(8),l=n(62),d=n(33),p=n(25),f=function(e){return"requires_action"!==e.status&&"requires_source_action"!==e.status},m=n(56),h=function(e){return"requires_action"!==e.status&&"requires_source_action"!==e.status},_=n(0),b=n(4),y=n(2),v=n(6),O=function(e){return["id_bank_account","id_bank_transfer"].indexOf(e.bankTransferType)>-1},g=function(e){switch(e.type){case"error":var t=e.error;if("payment_intent_unexpected_state"===t.code&&"object"==typeof t.payment_intent&&null!=t.payment_intent&&"string"==typeof t.payment_intent.status&&Object(r.f)(t.payment_intent.status)){var n=t.payment_intent;return{type:"object",locale:e.locale,object:n}}return e;case"object":return e;default:return Object(_.a)(e)}},j=function(e,t,_,g,j){var w=Object(a.a)(Object(r.c)(t)),k=Object(r.e)(t);if(!w)return c.a.resolve({paymentIntent:t});switch(w.type){case"cardimageverification-challenge":return n.e(7).then(n.bind(null,91)).then((function(n){return(0,n.performCardImageVerification)(w,t,e,_)}));case"captcha-challenge":return Object(l.a)(w,t,e,_);case"3ds1-modal":return Object(o.a)(w,k,b.g.PAYMENT_INTENT,e,_,j);case"3ds2-fingerprint":case"3ds2-challenge":return Object(i.a)(w,{intentSecret:k,intentType:b.g.PAYMENT_INTENT,controller:e,locale:_,hosted:g},j);case"redirect":return Object(m.a)(t,w.redirectUrl,e);case"blik_authorize":return function(e){var t=e.controller,n=e.intent,r=e.locale;return Object(d.d)({controller:t,initialDelay:8e3,pollTimeGap:5e3,intent:n,checkIntent:function(e){return"requires_action"!==e.status||"blik_authorize"!==e.next_action.type},locale:r})}({controller:e,intent:t,locale:_});case"boleto-display":if(void 0===w.hostedVoucherUrl)throw new y.b("Expect `next_action.boleto_display_details.hosted_voucher_url` of `PaymentIntent` to be not undefined. Please refer to \n\nhttps://stripe.com/docs/api/payment_intents/object#payment_intent_object-next_action-boleto_display_details-hosted_voucher_url");return function(e){var t=e.controller,n=e.url,r=e.intent,a=e.locale,o=Object(s.b)(t,{url:Object(u.g)(n),size:"600x700",locale:a,frameTitle:"boleto.voucher_frame_title",useLightboxHostedCloseButton:!1});return new c.a((function(e){o._on("request-close",(function(){Object(s.a)(o).then((function(){e({paymentIntent:r})}))}))}))}({controller:e,locale:_,url:w.hostedVoucherUrl,intent:t});case"konbini-display":if(void 0===w.hostedVoucherUrl)throw new y.b("Expected option `handleActions` to be `false`. The Konbini pilot does not handle the next actions for you automatically yet (e.g. displaying Konbini payment details). Please refer to the Stripe Konbini integration guide for more info: \n\nhttps://stripe.com/docs/payments/konbini");return function(e){var t=e.controller,n=e.url,r=e.intent,a=e.locale,o=Object(s.b)(t,{url:Object(u.g)(n),size:"600x900",locale:a,frameTitle:"konbini.voucher_frame_title",useLightboxHostedCloseButton:!1});return new c.a((function(e){o._on("request-close",(function(){Object(s.a)(o).then((function(){e({paymentIntent:r})}))}))}))}({controller:e,locale:_,url:w.hostedVoucherUrl,intent:t});case"oxxo-display":if(void 0===w.hostedVoucherUrl)throw new y.b("To handle the next actions automatically, set the API version to oxxo_beta=v2. Please refer to the Stripe OXXO integration guide for more info: \n\nhttps://stripe.com/docs/payments/oxxo");return function(e){var t=e.controller,n=e.url,r=e.intent,a=e.locale,o=Object(s.b)(t,{url:Object(u.g)(n),size:"600x700",locale:a,frameTitle:"oxxo.voucher_frame_title",useLightboxHostedCloseButton:!1});return new c.a((function(e){o._on("request-close",(function(){Object(s.a)(o).then((function(){e({paymentIntent:r})}))}))}))}({controller:e,locale:_,url:w.hostedVoucherUrl,intent:t});case"upi_await_notification":return function(e){var t=e.controller,n=e.intentSecret,r=e.intentType,a=e.locale;return new c.a((function(e){setTimeout((function o(){Object(d.e)(n,r,t,a).then((function(t){var n=Object(d.b)(t);if(null!==n)switch(n.status){case"requires_action":return void setTimeout(o,1e4);default:e(t)}}))}),5e3)}))}({controller:e,intentSecret:k,intentType:b.g.PAYMENT_INTENT,locale:_});case"wechat_pay_display_qr_code":return function(e){var t=e.controller,n=e.intent,a=e.locale,o=Object(r.c)(n);if(!o||"wechat_pay_display_qr_code"!==o.type)throw new Error("Expected next_action.wechat_pay_display_qr_code");var i=t.createLightboxFrame({type:u.a.WECHAT_PAY_INNER,options:{qrCodeData:o.wechat_pay_display_qr_code.data,qrCodeUrl:o.wechat_pay_display_qr_code.image_url_png,locale:a}}),l=!1;return new c.a((function(e,r){i._on("load",(function(){i.show(),i.fadeInBackdrop()})),i._once("request-close",(function(){Object(s.a)(i).then((function(){l=!0,e({paymentIntent:n})}))})),Object(d.d)({controller:t,initialDelay:5e3,pollTimeGap:2e3,intent:n,checkIntent:function(e){return"requires_action"!==e.status},shouldPoll:function(){return!l},locale:a}).then((function(t){t.error||i.destroy(!0).then((function(){e(t)}))}))}))}({controller:e,locale:_,intent:t});case"paynow_display_qr_code":return function(e){var t=e.controller,n=e.intent,a=e.intentType,o=e.intentSecret,i=e.locale,l=Object(r.c)(n);if(!l||"paynow_display_qr_code"!==l.type)throw new Error("Expected next_action.paynow_display_qr_code");var p=t.createLightboxFrame({type:u.a.PAYNOW_INNER,options:{qrCodeUrl:l.paynow_display_qr_code.image_url_png,qrCodeData:l.paynow_display_qr_code.data,locale:i}}),f=null;return new c.a((function(e,r){p._on("load",(function(){p.show(),p.fadeInBackdrop()})),p._once("request-close",(function(){Object(s.a)(p).then((function(){f&&clearTimeout(f),e({paymentIntent:n})}))})),p._on("complete",(function(t){Object(s.a)(p).then((function(){f&&clearTimeout(f),e(t)}))})),f=setTimeout((function n(){Object(d.e)(o,a,t,i).then((function(t){var r=Object(d.b)(t);if(null!==r)switch(r.status){case"requires_action":return void(f=setTimeout(n,2e3));default:p.destroy(!0).then((function(){"payment_intent"===r.object?e({paymentIntent:r}):e({setupIntent:r})}))}}))}),5e3)}))}({controller:e,locale:_,intent:t,intentSecret:k,intentType:b.g.PAYMENT_INTENT});case"pix_display_qr_code":if(void 0===w.hostedInstructionsUrl)throw new y.b("Expect `next_action.pix_display_qr_code.hosted_instructions_url` of `PaymentIntent` to be not undefined. Please refer to \n\nhttps://stripe.com/docs/api/payment_intents/object#payment_intent_object-next_action-pix_display_qr_code-hosted_instructions_url");return function(e){var t=e.controller,n=e.intent,r=e.intentSecret,a=e.intentType,o=e.locale,i=e.url,l=Object(s.b)(t,{url:Object(u.g)(i),size:"450x600",locale:o,frameTitle:"pix.instructions_frame_title",useLightboxHostedCloseButton:!1}),p=null;return new c.a((function(e,i){l._on("load",(function(){l.show(),l.fadeInBackdrop()})),l._once("request-close",(function(){Object(s.a)(l).then((function(){p&&clearTimeout(p),e({paymentIntent:n})}))})),l._on("complete",(function(t){Object(s.a)(l).then((function(){p&&clearTimeout(p),e(t)}))})),p=setTimeout((function n(){Object(d.e)(r,a,t,o).then((function(t){var r=Object(d.b)(t);if(r)switch(r.status){case"requires_action":return void(p=setTimeout(n,2e3));default:l.destroy(!0).then((function(){"payment_intent"===r.object?e({paymentIntent:r}):e({setupIntent:r})}))}}))}),5e3)}))}({controller:e,locale:_,url:w.hostedInstructionsUrl,intent:t,intentSecret:k,intentType:b.g.PAYMENT_INTENT});case"promptpay_display_qr_code":return function(e){var t,n=e.controller,r=e.intent,a=e.locale,o=e.url,i=Object(s.b)(n,{url:Object(u.g)(o),size:(t=p.h,t?"fullScreen":"400x600"),locale:a,frameTitle:"hosted_qr_code_instructions.promptpay.frame_title",useLightboxHostedCloseButton:!1}),l=!1;return new c.a((function(e){return i._on("load",(function(){i.show(),i.fadeInBackdrop()})),i._once("request-close",(function(){Object(s.a)(i).then((function(){l=!0,e({paymentIntent:r})}))})),i._on("complete",(function(t){Object(s.a)(i).then((function(){l=!0,e(t)}))})),Object(d.d)({controller:n,initialDelay:5e3,pollTimeGap:2e3,intent:r,checkIntent:f,shouldPoll:function(){return!l},locale:a}).then((function(t){t.error||l||i.destroy(!0).then((function(){e(t)}))}))}))}({controller:e,locale:_,intent:t,intentSecret:k,url:w.hostedInstructionsUrl,intentType:b.g.PAYMENT_INTENT});case"display_bank_transfer_instructions":return function(e,t){return!!O(e)&&(Object(v.d)(t||[],v.a.id_bank_transfer_beta_2)||Object(v.d)(t||[],v.a.customer_balance_beta_1))}(w,e._betas)?Object(m.a)(t,w.hostedInstructionsUrl,e):function(e){return!O(e)}(w)?function(e){var t=e.controller,n=e.url,r=e.intent,a=e.locale,o=Object(s.b)(t,{url:Object(u.g)(n),size:"600x700",locale:a,frameTitle:"display_bank_transfer_instructions.voucher_frame_title",useLightboxHostedCloseButton:!1});return new c.a((function(e){o._on("request-close",(function(){Object(s.a)(o).then((function(){e({paymentIntent:r})}))}))}))}({controller:e,url:w.hostedInstructionsUrl,intent:t,locale:_}):c.a.resolve({paymentIntent:t});case"qris_display_qr_code":return function(e){var t=e.controller,n=e.intent,r=e.locale,a=e.url,o=Object(s.b)(t,{url:Object(u.g)(a),size:p.h?"fullScreen":"400x600",locale:r,frameTitle:"hosted_qr_code_instructions.qris.frame_title",useLightboxHostedCloseButton:!1}),i=!1;return new c.a((function(e){return o._on("load",(function(){o.show(),o.fadeInBackdrop()})),o._once("request-close",(function(){Object(s.a)(o).then((function(){i=!0,e({paymentIntent:n})}))})),o._on("complete",(function(t){Object(s.a)(o).then((function(){i=!0,e(t)}))})),Object(d.d)({controller:t,initialDelay:5e3,pollTimeGap:2e3,intent:n,checkIntent:h,shouldPoll:function(){return!i},locale:r}).then((function(t){"error"in t&&t.error||i||o.destroy(!0).then((function(){e(t)}))}))}))}({controller:e,locale:_,intent:t,intentSecret:k,url:w.hostedInstructionsUrl,intentType:b.g.PAYMENT_INTENT});default:return c.a.resolve({paymentIntent:t})}},w=function e(t,n,r,a,o){var i=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;if(b.i<i)throw new Error("max action recursion depth reached");return j(t,n,r,a,o||[]).then((function(n){if(n.setupIntent)throw new Error("Got unexpected SetupIntent response");if(n.paymentIntent&&null!=n.paymentIntent.next_action&&"use_stripe_sdk"===n.paymentIntent.next_action.type&&-1!==b.j.indexOf(n.paymentIntent.next_action.use_stripe_sdk.type)){var c=i;return e(t,n.paymentIntent,r,a,o,++c)}return n}))},k=function(e,t,n,a){return function(o){var i=g(o);switch(i.type){case"error":var s=i.error,u=s.payment_intent;return t&&u&&"payment_intent_unexpected_state"===s.code&&("succeeded"===u.status||"requires_capture"===u.status)?c.a.resolve({paymentIntent:u}):c.a.resolve(Object(r.g)(o));case"object":var l=i.object;return w(e,l,i.locale,n,a||[]);default:return Object(_.a)(i)}}}},function(e,t,n){"use strict";n.d(t,"a",(function(){return a})),n.d(t,"b",(function(){return o}));var r=n(3),a=function(e){return new r.a((function(t,n){var r=setTimeout((function(){t({type:"error",error:{code:"redirect_error",message:"Failed to redirect to ".concat(e)},locale:"en"})}),6e4);window.addEventListener("pagehide",(function(){clearTimeout(r)})),window.top.location.href=e}))},o=function(e,t,n){e.report("redirect_error",{initiator:t,error:n.error})}},function(e,t,n){"use strict";n.d(t,"c",(function(){return s})),n.d(t,"d",(function(){return u})),n.d(t,"a",(function(){return l})),n.d(t,"e",(function(){return d})),n.d(t,"b",(function(){return p}));var r,a=n(5),o=n(38),i=n(4),c=n(8),s="".concat(o.d,"-input"),u=("".concat(o.d,"-inputAfter"),"".concat(o.d,"-safariInput")),l="StripeElement",d=["ready","focus","blur","escape","change"],p=(r={},Object(a.a)(r,i.e.linkAuthentication,c.a.LINK_AUTHENTICATION_ELEMENT),Object(a.a)(r,i.e.payment,c.a.PAYMENT_ELEMENT),Object(a.a)(r,i.e.shippingAddress,c.a.SHIPPING_ADDRESS_ELEMENT),Object(a.a)(r,i.e.autocompleteSuggestions,c.a.AUTOCOMPLETE_SUGGESTIONS_ELEMENT),Object(a.a)(r,i.e.achBankSearchResults,c.a.ACH_BANK_SEARCH_RESULTS_ELEMENT),r)},function(e,t,n){"use strict";n.d(t,"b",(function(){return a})),n.d(t,"a",(function(){return o}));var r={bif:1,clp:1,djf:1,gnf:1,jpy:1,kmf:1,krw:1,mga:1,pyg:1,rwf:1,vnd:1,vuv:1,xaf:1,xof:1,xpf:1,bhd:1e3,jod:1e3,kwd:1e3,omr:1e3,tnd:1e3},a=function(e,t){var n=function(e){var t=r[e.toLowerCase()]||100;return{unitSize:1/t,fractionDigits:Math.ceil(Math.log(t)/Math.log(10))}}(t),a=n.unitSize,o=n.fractionDigits;return(e*a).toFixed(o)},o=["aed","afn","all","amd","ang","aoa","ars","aud","awg","azn","bam","bbd","bdt","bgn","bhd","bif","bmd","bnd","bob","brl","bsd","btn","bwp","byn","byr","bzd","cad","cdf","chf","clf","clp","cny","cop","crc","cuc","cup","cve","czk","djf","dkk","dop","dzd","egp","ern","etb","eur","fjd","fkp","gbp","gel","ghs","gip","gmd","gnf","gtq","gyd","hkd","hnl","hrk","htg","huf","idr","ils","inr","iqd","irr","isk","jmd","jod","jpy","kes","kgs","khr","kmf","kpw","krw","kwd","kyd","kzt","lak","lbp","lkr","lrd","lsl","ltl","lvl","lyd","mad","mdl","mga","mkd","mmk","mnt","mop","mro","mur","mvr","mwk","mxn","myr","mzn","nad","ngn","nio","nok","npr","nzd","omr","pab","pen","pgk","php","pkr","pln","pyg","qar","ron","rsd","rub","rwf","sar","sbd","scr","sdg","sek","sgd","shp","skk","sll","sos","srd","ssp","std","svc","syp","szl","thb","tjs","tmt","tnd","top","try","ttd","twd","tzs","uah","ugx","usd","uyu","uzs","vef","vnd","vuv","wst","xaf","xag","xau","xcd","xdr","xof","xpf","yer","zar","zmk","zmw","btc","jep","eek","ghc","mtl","tmm","yen","zwd","zwl","zwn","zwr"]},function(e,t,n){"use strict";n.d(t,"a",(function(){return a}));var r=n(20),a=function(){var e=[];return{addEventListener:function(t,n,r,a){t.addEventListener(n,r,a),e.push([t,n,r,a])},removeEventListener:function(t,n,a,o){t.removeEventListener(n,a,o),e=e.filter((function(e){return function(e,t){var n=Object(r.a)(e,4),a=n[0],o=n[1],i=n[2],c=n[3],s=Object(r.a)(t,4),u=s[0],l=s[1],d=s[2],p=s[3];return u!==a||l!==o||d!==i||!0===("object"==typeof c&&c?c.capture:c)!=(!0===("object"==typeof p&&p?p.capture:p))}([t,n,a,o],e)}))}}}},function(e,t,n){"use strict";n.d(t,"a",(function(){return u})),n.d(t,"c",(function(){return p})),n.d(t,"d",(function(){return f})),n.d(t,"e",(function(){return m})),n.d(t,"f",(function(){return h})),n.d(t,"b",(function(){return _}));var r,a=n(7),o=n(5),i=n(4),c=n(0),s={VISA:"visa",MASTERCARD:"mastercard",AMEX:"amex",DISCOVER_NETWORK:"discover_global_network"},u=(r={},Object(o.a)(r,s.VISA,[i.a.VISA]),Object(o.a)(r,s.MASTERCARD,[i.a.MASTERCARD]),Object(o.a)(r,s.AMEX,[i.a.AMEX]),Object(o.a)(r,s.DISCOVER_NETWORK,[i.a.DISCOVER,i.a.DINERS,i.a.JCB,i.a.UNIONPAY,i.a.ELO]),Object.keys(s).map((function(e){return s[e]}))),l=c.u.apply(void 0,Object(a.a)(u)),d=Object(c.y)({email:Object(c.w)(Object(c.q)(c.B)),name:Object(c.w)(Object(c.q)(c.B)),phone:Object(c.w)(Object(c.q)(c.B)),address:Object(c.w)(Object(c.y)({city:Object(c.w)(Object(c.q)(c.B)),country:Object(c.w)(Object(c.q)(c.B)),line1:Object(c.w)(Object(c.q)(c.B)),line2:Object(c.w)(Object(c.q)(c.B)),postal_code:Object(c.w)(Object(c.q)(c.B)),state:Object(c.w)(Object(c.q)(c.B))}))}),p=Object(c.y)({billingDetails:Object(c.w)(d)}),f=Object(c.y)({billingDetails:Object(c.w)(Object(c.x)(Object(c.u)("never","auto"),Object(c.y)({name:Object(c.w)(Object(c.u)("never","auto")),phone:Object(c.w)(Object(c.u)("never","auto")),email:Object(c.w)(Object(c.u)("never","auto")),address:Object(c.w)(Object(c.x)(Object(c.u)("never","auto"),Object(c.y)({country:Object(c.w)(Object(c.u)("never","auto")),postalCode:Object(c.w)(Object(c.u)("never","auto")),state:Object(c.w)(Object(c.u)("never","auto")),city:Object(c.w)(Object(c.u)("never","auto")),line1:Object(c.w)(Object(c.u)("never","auto")),line2:Object(c.w)(Object(c.u)("never","auto"))})))})))}),m=Object(c.y)({bancontact:Object(c.w)(Object(c.u)("auto","always","never")),card:Object(c.w)(Object(c.u)("auto","always","never")),ideal:Object(c.w)(Object(c.u)("auto","always","never")),sepaDebit:Object(c.w)(Object(c.u)("auto","always","never")),sofort:Object(c.w)(Object(c.u)("auto","always","never")),auBecsDebit:Object(c.w)(Object(c.u)("auto","always","never")),usBankAccount:Object(c.w)(Object(c.u)("auto","always","never"))}),h=Object(c.y)({applePay:Object(c.w)(Object(c.u)("auto","never")),googlePay:Object(c.w)(Object(c.u)("auto","never"))}),_=Object(c.b)(l)},function(e,t,n){"use strict";var r=n(53);function a(){}var o=null,i={};function c(e){if("object"!=typeof this)throw new TypeError("Promises must be constructed via new");if("function"!=typeof e)throw new TypeError("not a function");this._45=0,this._81=0,this._65=null,this._54=null,e!==a&&f(e,this)}function s(e,t){for(;3===e._81;)e=e._65;if(c._10&&c._10(e),0===e._81)return 0===e._45?(e._45=1,void(e._54=t)):1===e._45?(e._45=2,void(e._54=[e._54,t])):void e._54.push(t);!function(e,t){r((function(){var n=1===e._81?t.onFulfilled:t.onRejected;if(null!==n){var r=function(e,t){try{return e(t)}catch(e){return o=e,i}}(n,e._65);r===i?l(t.promise,o):u(t.promise,r)}else 1===e._81?u(t.promise,e._65):l(t.promise,e._65)}))}(e,t)}function u(e,t){if(t===e)return l(e,new TypeError("A promise cannot be resolved with itself."));if(t&&("object"==typeof t||"function"==typeof t)){var n=function(e){try{return e.then}catch(e){return o=e,i}}(t);if(n===i)return l(e,o);if(n===e.then&&t instanceof c)return e._81=3,e._65=t,void d(e);if("function"==typeof n)return void f(n.bind(t),e)}e._81=1,e._65=t,d(e)}function l(e,t){e._81=2,e._65=t,c._97&&c._97(e,t),d(e)}function d(e){if(1===e._45&&(s(e,e._54),e._54=null),2===e._45){for(var t=0;t<e._54.length;t++)s(e,e._54[t]);e._54=null}}function p(e,t,n){this.onFulfilled="function"==typeof e?e:null,this.onRejected="function"==typeof t?t:null,this.promise=n}function f(e,t){var n=!1,r=function(e,t,n){try{e(t,n)}catch(e){return o=e,i}}(e,(function(e){n||(n=!0,u(t,e))}),(function(e){n||(n=!0,l(t,e))}));n||r!==i||(n=!0,l(t,o))}e.exports=c,c._10=null,c._97=null,c._61=a,c.prototype.then=function(e,t){if(this.constructor!==c)return function(e,t,n){return new e.constructor((function(r,o){var i=new c(a);i.then(r,o),s(e,new p(t,n,i))}))}(this,e,t);var n=new c(a);return s(this,new p(e,t,n)),n}},function(e,t){var n,r,a=e.exports={};function o(){throw new Error("setTimeout has not been defined")}function i(){throw new Error("clearTimeout has not been defined")}function c(e){if(n===setTimeout)return setTimeout(e,0);if((n===o||!n)&&setTimeout)return n=setTimeout,setTimeout(e,0);try{return n(e,0)}catch(t){try{return n.call(null,e,0)}catch(t){return n.call(this,e,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:o}catch(e){n=o}try{r="function"==typeof clearTimeout?clearTimeout:i}catch(e){r=i}}();var s,u=[],l=!1,d=-1;function p(){l&&s&&(l=!1,s.length?u=s.concat(u):d=-1,u.length&&f())}function f(){if(!l){var e=c(p);l=!0;for(var t=u.length;t;){for(s=u,u=[];++d<t;)s&&s[d].run();d=-1,t=u.length}s=null,l=!1,function(e){if(r===clearTimeout)return clearTimeout(e);if((r===i||!r)&&clearTimeout)return r=clearTimeout,clearTimeout(e);try{r(e)}catch(t){try{return r.call(null,e)}catch(t){return r.call(this,e)}}}(e)}}function m(e,t){this.fun=e,this.array=t}function h(){}a.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];u.push(new m(e,t)),1!==u.length||l||c(f)},m.prototype.run=function(){this.fun.apply(null,this.array)},a.title="browser",a.browser=!0,a.env={},a.argv=[],a.version="",a.versions={},a.on=h,a.addListener=h,a.once=h,a.off=h,a.removeListener=h,a.removeAllListeners=h,a.emit=h,a.prependListener=h,a.prependOnceListener=h,a.listeners=function(e){return[]},a.binding=function(e){throw new Error("process.binding is not supported")},a.cwd=function(){return"/"},a.chdir=function(e){throw new Error("process.chdir is not supported")},a.umask=function(){return 0}},function(e,t,n){"use strict";var r=n(48);e.exports=r;var a=l(!0),o=l(!1),i=l(null),c=l(void 0),s=l(0),u=l("");function l(e){var t=new r(r._61);return t._81=1,t._65=e,t}r.resolve=function(e){if(e instanceof r)return e;if(null===e)return i;if(void 0===e)return c;if(!0===e)return a;if(!1===e)return o;if(0===e)return s;if(""===e)return u;if("object"==typeof e||"function"==typeof e)try{var t=e.then;if("function"==typeof t)return new r(t.bind(e))}catch(e){return new r((function(t,n){n(e)}))}return l(e)},r.all=function(e){var t=Array.prototype.slice.call(e);return new r((function(e,n){if(0===t.length)return e([]);var a=t.length;function o(i,c){if(c&&("object"==typeof c||"function"==typeof c)){if(c instanceof r&&c.then===r.prototype.then){for(;3===c._81;)c=c._65;return 1===c._81?o(i,c._65):(2===c._81&&n(c._65),void c.then((function(e){o(i,e)}),n))}var s=c.then;if("function"==typeof s)return void new r(s.bind(c)).then((function(e){o(i,e)}),n)}t[i]=c,0==--a&&e(t)}for(var i=0;i<t.length;i++)o(i,t[i])}))},r.reject=function(e){return new r((function(t,n){n(e)}))},r.race=function(e){return new r((function(t,n){e.forEach((function(e){r.resolve(e).then(t,n)}))}))},r.prototype.catch=function(e){return this.then(null,e)}},,function(e,t,n){"use strict";n.d(t,"d",(function(){return s})),n.d(t,"b",(function(){return l})),n.d(t,"c",(function(){return d})),n.d(t,"a",(function(){return p}));var r=n(58),a=n(47),o=n(10),i=n(0),c=n(2),s=function(e,t){if("string"!=typeof e)return Object(i.m)("a client_secret string",e,t);var n=Object(o.d)(e)||Object(r.b)(e);return null===n?Object(i.m)("a client secret of the form ${id}_secret_${secret}",e,t):Object(i.G)(n,[])},u=function(e,t){if("string"!=typeof e)return Object(i.m)("a client_secret string",e,t);var n=Object(r.b)(e);return null===n?Object(i.m)("a client secret of the form ${id}_secret_${secret}",e,t):Object(i.G)(n,[])},l=function(e,t){return Object(i.H)(u,e,"stripe.".concat(t," order secret")).value},d=function(e,t){if("string"!=typeof e)return Object(i.m)("a client_secret string",e,t);var n=Object(r.a)(e);return null===n?Object(i.m)("a client secret of the form ${id}_secret_${secret}",e,t):Object(i.G)(n,[])},p=function(){var e,t,n,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if((null==r||null===(e=r.allowedCardBrands)||void 0===e?void 0:e.length)&&(null==r||null===(t=r.disallowedCardBrands)||void 0===t?void 0:t.length))throw new c.b("You cannot specify both disallowedCardBrands and allowedCardBrands. Please specify only one of those parameters.");if((null==r||null===(n=r.disallowedCardBrands)||void 0===n?void 0:n.length)===a.a.length)throw new c.b("You cannot block all available card brands.")}},function(e,t,n){"use strict";(function(t){function n(e){a.length||(r(),!0),a[a.length]=e}e.exports=n;var r,a=[],o=0;function i(){for(;o<a.length;){var e=o;if(o+=1,a[e].call(),o>1024){for(var t=0,n=a.length-o;t<n;t++)a[t]=a[t+o];a.length-=o,o=0}}a.length=0,o=0,!1}var c,s,u,l=void 0!==t?t:self,d=l.MutationObserver||l.WebKitMutationObserver;function p(e){return function(){var t=setTimeout(r,0),n=setInterval(r,50);function r(){clearTimeout(t),clearInterval(n),e()}}}"function"==typeof d?(c=1,s=new d(i),u=document.createTextNode(""),s.observe(u,{characterData:!0}),r=function(){c=-c,u.data=c}):r=p(i),n.requestFlush=r,n.makeRequestCallFromTimer=p}).call(this,n(54))},function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(e){"object"==typeof window&&(n=window)}e.exports=n},function(e,t,n){"use strict";var r=n(48);e.exports=r,r.prototype.finally=function(e){return this.then((function(t){return r.resolve(e()).then((function(){return t}))}),(function(t){return r.resolve(e()).then((function(){throw t}))}))}},function(e,t,n){"use strict";n.d(t,"a",(function(){return o})),n.d(t,"b",(function(){return i}));var r=n(43),a=n(10),o=function(e,t,n){return Object(r.a)(t).then((function(t){return Object(r.b)(n,"next_action redirect",t),Object(a.g)(t,e)}))},i=function(e,t,n){return Object(r.a)(t).then((function(t){return Object(r.b)(n,"next_action redirect",t),Object(a.h)(t,e)}))}},function(e,t,n){"use strict";n.d(t,"a",(function(){return r})),n.d(t,"b",(function(){return a}));var r={margin:"0",padding:"0",border:"none",display:"block",background:"transparent",position:"relative",opacity:"1",clear:"both"},a={border:"none",display:"block",position:"absolute",height:"1px",top:"-1px",left:"0",padding:"0",margin:"0",width:"100%",opacity:"0",background:"transparent","pointer-events":"none","font-size":"16px"}},function(e,t,n){"use strict";n.d(t,"b",(function(){return a})),n.d(t,"a",(function(){return o}));var r=n(20),a=(n(0),n(10),function(e){var t=e.trim().match(/^((order)_[^_]+)_secret_[^-]+$/);if(t){var n=Object(r.a)(t,3),a=n[0],o=n[1];if("order"===n[2])return{id:o,clientSecret:a,type:"ORDER"}}return null}),o=function(e){var t=e.trim().match(/^((cart_session)_[^_]+)_secret_[^-]+$/);if(t){var n=Object(r.a)(t,3),a=n[0],o=n[1];if("cart_session"===n[2])return{id:o,clientSecret:a,type:"CART_SESSION"}}return null}},function(e,t,n){"use strict";n.d(t,"b",(function(){return h})),n.d(t,"a",(function(){return _}));var r=n(14),a=n(1),o=n(6),i=n(13),c=n(0),s=n(19),u=n(2),l={clientSecret:Object(c.w)(c.B),redirect:Object(c.w)(Object(c.u)("always","if_required")),confirmParams:Object(c.w)(c.t),handleActions:Object(c.w)(c.e)},d=Object(a.a)(Object(a.a)({},l),{},{element:Object(c.w)(c.t)}),p=Object(a.a)(Object(a.a)({},l),{},{elements:Object(c.w)(c.t)}),f={"stripe.confirmPayment()":{link:"https://stripe.com/docs/js/payment_intents/payment_method",action:"Payment"},"stripe.confirmSetup()":{link:"https://stripe.com/docs/js/setup_intents/payment_method",action:"Setup"}},m=function(e,t,n){var r=t.rawSecret,a=t.rawElement,s=t.rawElements,l=t.rawHandleActions,d=t.rawRedirect,p=t.validatedConfirmParams;if(Object(o.d)(e,o.a.payment_element_beta_1)){var m=Object(c.c)(a);if(!m)throw new u.b("Invalid value for ".concat(n,": `element` should be a Payment Element. You specified: ").concat(typeof a,"."));return{type:"elements",element:m}}if(function(e,t){var n=e.rawSecret,r=e.rawElements;if(n&&r)throw new u.b("".concat(t,": expected either `elements` or `clientSecret`, but not both."));if(!n&&!r)throw new u.b("".concat(t,": expected either `elements` or `clientSecret`, but got neither."))}({rawElements:s,rawSecret:r},n),d&&!1===l)throw new u.b("".concat(n,": `redirect` not applicable when `handleActions` is false."));if(r){if((null==p?void 0:p.payment_method)&&(null==p?void 0:p.payment_method_data))throw new u.b("".concat(n,": Expected either `payment_method` or `payment_method_data`, but not both."));return{type:"clientSecret",clientSecret:r}}var h=Object(c.d)(s);if(!h)throw new u.b("Invalid value for ".concat(n,": elements should be an Elements group. You specified: ").concat(typeof s,"."));var _=Object(i.a)(h._elements,(function(e){return"payment"===e._componentName}));if(!_)throw new u.b("Invalid value for ".concat(n,": elements should have a mounted Payment Element. ").concat(function(e,t){if(e&&f[t]){var n=f[t],r=n.link,a=n.action;return"It looks like you have other Elements on the page. Refer to ".concat(r," to confirm a ").concat(a," Intent by payment method.")}return""}(!!h._elements.length,n)));return{type:"elements",elements:h,element:_}},h=function(e){return Object(o.d)(e,o.a.payment_element_beta_1)?d:p},_=function(e,t,n,i,l,d){var p,f=function(e){var t=e.betas,n=e.rawUpdateData,r=e.errorMessageMethodName,a=e.controller,i=Object(c.H)(Object(c.y)(h(t)),n,r),s=i.value,l=s.element,d=void 0===l?void 0:l,p=s.elements,f=void 0===p?void 0:p,_=s.confirmParams,b=s.clientSecret,y=s.redirect,v=s.handleActions,O=i.warnings,g=Object(c.H)(Object(c.w)(Object(c.y)({return_url:Object(c.w)(c.B),payment_method:Object(c.w)(c.B),payment_method_data:Object(c.w)(c.t),payment_method_options:Object(c.w)(c.t),setup_future_usage:Object(c.p)("".concat(r,": do not pass setup_future_usage at confirm time. Instead, pass setup_future_usage when the PaymentIntent is created."))})),_,r,{path:["confirmParams"]}).value,j=m(t,{rawSecret:b,rawElement:d,rawElements:f,rawHandleActions:v,rawRedirect:y,validatedConfirmParams:g},r);if("clientSecret"===j.type&&!Object(o.d)(t,o.a.server_side_confirmation_beta_1))throw new u.b("".concat(r," with a `clientSecret` is not supported yet. Please use the Payment Element."));var w=y||"always",k=(null==g?void 0:g.return_url)||null;return O.forEach((function(e){return a.warn(e)})),{validatedRedirect:w,validatedReturnUrl:k,validatedParams:j,validatedConfirmParams:g,validatedHandleActions:!1!==v,rawConfirmParams:_}}({betas:n,rawUpdateData:i,controller:e,errorMessageMethodName:d}),_=f.validatedParams,b=f.validatedConfirmParams,y=f.validatedRedirect,v=f.validatedHandleActions,O=f.validatedReturnUrl,g=f.rawConfirmParams,j=null!=g?g:{},w=(j.payment_method,j.payment_method_data,j.payment_method_options,Object(r.a)(j,["payment_method","payment_method_data","payment_method_options"]));if(p="clientSecret"===_.type?function(e){var t,n=e.validatedParams,r=e.validatedConfirmParams,o=e.validatedHandleActions,i=e.otherParams,c=e.intentType,u=e.mids,l=null!=r?r:{},d=l.payment_method_data,p=l.payment_method,f=l.payment_method_options,m="payment"===c?Object(s.k)(n.clientSecret,"confirmPayment"):Object(s.l)(n.clientSecret,"confirmSetup"),h=Object(s.h)({payment_method:d}),_={};return"none"!==(t=d&&h?{intentSecret:m,tag:"paymentMethod-from-data",type:h,data:d,options:null!=f?f:{}}:p?{intentSecret:m,tag:"paymentMethod",paymentMethod:p,options:null!=f?f:{}}:{intentSecret:m,tag:"none"}).tag&&"paymentMethod"!==t.tag||(_={use_stripe_sdk:!0,mandate_data:{customer_acceptance:{type:"online",online:{infer_from_client:!0}}}}),{mids:u,mode:t,expectedType:h,otherParams:Object(a.a)(Object(a.a)({},_),i),options:{handleActions:o}}}({validatedParams:_,validatedConfirmParams:b,validatedHandleActions:v,otherParams:w,intentType:l,mids:t}):function(e){var t,n,r,a,o=e.validatedParams,i=e.validatedConfirmParams,c=e.validatedHandleActions,s=e.otherParams,u=e.mids;return{mode:{tag:"elements",groupId:null===(t=o.elements)||void 0===t?void 0:t._id,frameId:null===(n=o.element)||void 0===n?void 0:n._implementation._frame.id,data:null!==(r=null==i?void 0:i.payment_method_data)&&void 0!==r?r:{},options:null!==(a=null==i?void 0:i.payment_method_options)&&void 0!==a?a:{}},otherParams:s,expectedType:null,mids:u,options:{handleActions:c}}}({validatedParams:_,validatedConfirmParams:b,validatedHandleActions:v,otherParams:w,mids:t}),"if_required"===y)return{intentMutationRequest:p,redirect:y,returnUrl:null};if("always"===y&&O)return{intentMutationRequest:p,redirect:y,returnUrl:O};throw new u.b("".concat(d,": the `confirmParams.return_url` argument is required unless passing `redirect: 'if_required'`"))}},function(e,t,n){"use strict";n.d(t,"a",(function(){return i}));var r=function(e){var t={skipFingerprint:!1,sandboxFingerprintFrame:!1,sandboxChallengeFrame:!1,recordFinalCres:!1};return-1!==e.indexOf("Y")&&(t.skipFingerprint=!0),-1!==e.indexOf("k")&&(t.sandboxFingerprintFrame=!0),-1!==e.indexOf("5")&&(t.sandboxChallengeFrame=!0),-1!==e.indexOf("f")&&(t.recordFinalCres=!0),t},a=function(e){return e?{amount:e.amount,instrument:{cardBrand:e.instrument.card_brand,cardName:e.instrument.card_name,cardLast4:e.instrument.card_last4},merchant:{name:e.merchant.name,origin:e.merchant.origin},credentials:e.credentials,authenticationChallenge:e.authentication_challenge,configuration:e.configuration,layout:e.layout}:null},o=function(e){return{american_express:"amex",visa:"visa",mastercard:"mastercard",discover:"discover",unionpay:"unionpay"}[e]||"unknown"},i=function(e){if(!e)return null;if("use_stripe_sdk"===e.type){var t=e.use_stripe_sdk;switch(t.type){case"intent_cardimageverification_challenge":return{type:"cardimageverification-challenge",civId:t.stripe_js.card_image_verification_id,civClientSecret:t.stripe_js.card_image_verification_client_secret,previousScanFailed:t.stripe_js.previous_scan_failed};case"intent_confirmation_challenge":return{type:"captcha-challenge",site_key:t.stripe_js.site_key,verification_url:t.stripe_js.verification_url};case"stripe_3ds2_fingerprint":return{type:"3ds2-fingerprint",threeDS2Source:t.three_d_secure_2_source,merchant:t.merchant,cardBrand:o(t.directory_server_name),transactionId:t.server_transaction_id,optimizations:r(t.three_ds_optimizations),methodUrl:t.three_ds_method_url,oneClickAuthn:a(t.one_click_authn),publishableKey:t.publishable_key,threeDS2Intent:t.three_d_secure_2_intent};case"stripe_3ds2_challenge":return{type:"3ds2-challenge",threeDS2Source:t.stripe_js.three_d_secure_2_source,cardBrand:o(t.stripe_js.directory_server_name),transactionId:t.stripe_js.server_transaction_id,optimizations:r(t.stripe_js.three_ds_optimizations),acsTransactionId:t.stripe_js.acs_transaction_id,acsUrl:t.stripe_js.acs_url,oneClickAuthn:a(t.stripe_js.one_click_authn),creq:t.stripe_js.creq};case"three_d_secure_redirect":return{type:"3ds1-modal",url:t.stripe_js,source:t.source}}}if("redirect_to_url"===e.type)return{type:"redirect",redirectUrl:e.redirect_to_url.url};if("alipay_handle_redirect"===e.type)return{type:"redirect",redirectUrl:e.alipay_handle_redirect.url};if("blik_authorize"===e.type)return{type:"blik_authorize"};if("boleto_display_details"===e.type)return{type:"boleto-display",hostedVoucherUrl:e.boleto_display_details.hosted_voucher_url};if("display_oxxo_details"===e.type)return{type:"oxxo-display",hostedVoucherUrl:e.display_oxxo_details.hosted_voucher_url};if("konbini_display_details"===e.type)return{type:"konbini-display",hostedVoucherUrl:e.konbini_display_details.hosted_voucher_url};if("oxxo_display_details"===e.type)return{type:"oxxo-display",hostedVoucherUrl:e.oxxo_display_details.hosted_voucher_url};if("upi_await_notification"===e.type)return{type:"upi_await_notification"};if("wechat_pay_display_qr_code"===e.type)return{type:"wechat_pay_display_qr_code",qrCodeUrl:e.wechat_pay_display_qr_code.image_url_png};if("paynow_display_qr_code"===e.type)return{type:"paynow_display_qr_code",qrCodeUrl:e.paynow_display_qr_code.image_url_png};if("pix_display_qr_code"===e.type)return{type:"pix_display_qr_code",hostedInstructionsUrl:e.pix_display_qr_code.hosted_instructions_url};if("promptpay_display_qr_code"===e.type)return{type:"promptpay_display_qr_code",qrCodeUrl:e.promptpay_display_qr_code.image_url_png,qrCodeData:e.promptpay_display_qr_code.data,hostedInstructionsUrl:e.promptpay_display_qr_code.hosted_instructions_url};if("display_bank_transfer_instructions"===e.type){var n,i=e.display_bank_transfer_instructions.hosted_instructions_url;if("id_bban"===e.display_bank_transfer_instructions.financial_addresses[0].type)i=null!==(n=i)&&void 0!==n?n:e.display_bank_transfer_instructions.financial_addresses[0].id_bban.hosted_instructions_url;return{type:"display_bank_transfer_instructions",hostedInstructionsUrl:i,bankTransferType:e.display_bank_transfer_instructions.type}}return"qris_display_qr_code"===e.type?{type:"qris_display_qr_code",hostedInstructionsUrl:e.qris_display_qr_code.hosted_instructions_url}:null}},function(e,t,n){"use strict";n.d(t,"a",(function(){return l}));var r=n(20),a=n(1),o=n(12),i=n(8),c=n(3),s=n(33),u=n(27),l=function(e,t,n,l,d,p){var f=Object(o.f)(),m=new u.a,h=function(e,t,n,r,o){return e.createLightboxFrame({type:i.a.AUTHORIZE_WITH_URL,options:Object(a.a)({url:t,locale:o,intentId:n},r?{source:r}:{})})}(l,e.url,t.id,e.source,d);return h.show(),l.report("authorize_with_url.loading",{viewport:f,intentId:t.id}),h._on("load",(function(){l.report("authorize_with_url.loaded",{loadDuration:m.getElapsedTime(),intentId:t.id}),h.fadeInBackdrop()})),h._on("challenge_complete",(function(){h.fadeOutBackdrop()})),new c.a((function(a,o){var i=e.source;i&&h._once("cancel",(function(){c.a.all([Object(s.a)(t,n,l,i,d),h.destroy()]).then((function(e){var t=Object(r.a)(e,1)[0];return a(t)}))})),h._once("authorize_with_url_done",(function(){var e=h.destroy();Object(s.c)(t,n,l,d,p,(function(n,r){e.then((function(){l.report("authorize_with_url.done",{shownDuration:m.getElapsedTime(),success:!("error"in n),intentId:t.id,iterations:r}),a(n)}))}))}))}))}},function(e,t,n){"use strict";n.d(t,"a",(function(){return s}));var r=n(3),a=n(19),o=n(8),i=n(27),c=function(e){return e?"payment_intent"===e.object?e.last_payment_error:e.last_setup_error:null},s=function(e,t,n,s){return new r.a((function(r,u){var l=new i.a,d=n.createLightboxFrame({type:o.a.HCAPTCHA_APP,options:{intentId:t.id,clientSecret:t.client_secret,locale:s,sitekey:e.site_key,verifyUrl:e.verification_url,startTime:l.getAsPosixTime()}}),p=function(e){var t=a.f;return null!=e&&(t=e),n.action.localizeError(t).then((function(e){return{error:e}}))};n.report("intent_confirmation_challenge.start"),d._on("load",(function(){n.report("intent_confirmation_challenge.stripe_js_frame_loaded",{duration_since_start_ms:l.getElapsedTime()}),d.fadeInBackdrop()})),d.show(),d._on("request-cancel",(function(e){d.fadeOutBackdrop(),d.destroy(!0),n.report("intent_confirmation_challenge.cancel"),r(p(c(null==e?void 0:e.intent)))})),d._on("request-close",(function(e){d.fadeOutBackdrop(),d.destroy(!0);var t=null==e?void 0:e.intent;if(t){var o=c(t);o?/Captcha/.test(o.message||"")?(n.report("intent_confirmation_challenge.verification_failed"),r(p(o))):(n.report("intent_confirmation_challenge.success"),r(p(o))):(n.report("intent_confirmation_challenge.success"),function(e,t){"payment_intent"===t.object?e({paymentIntent:t}):e({setupIntent:t})}(r,t))}else n.report("intent_confirmation_challenge.verification_error"),r(p(a.f))}))}))}},function(e,t,n){"use strict";n.d(t,"b",(function(){return a})),n.d(t,"a",(function(){return o}));var r=n(6),a=[r.a.checkout_beta_2,r.a.checkout_beta_3,r.a.checkout_beta_4],o=[r.a.checkout_beta_2,r.a.checkout_beta_3,r.a.checkout_beta_4,r.a.checkout_beta_locales,r.a.checkout_beta_testcards]},,function(e,t,n){"use strict";n.d(t,"a",(function(){return F}));var r=n(20),a=n(3),o=n(0),i=n(27),c=n(1),s=n(14),u=n(8),l=function(e,t){var n=t.intentSecret,r=t.controller,o=t.locale,i=t.hosted,c=r.createLightboxFrame({type:u.a.STRIPE_3DS2_CHALLENGE,options:{intentId:n.id,hosted:i,locale:o}});r.report("3ds2.challenge_frame.loading",{intentId:n.id,hosted:i}),c._on("challenge_complete",(function(){c.fadeOutBackdrop()}));var s=function(e){return new a.a((function(t){e._on("load",(function(){return t(e)}))}))}(c);return s.then((function(){return r.report("3ds2.challenge_frame.loaded",{intentId:n.id,hosted:i})})),i&&(c.show(),c.action.show3DS2Spinner({cardBrand:e.cardBrand})),s},d=function(e,t,n){var r=n.oneClickAuthnDeviceSupport,o=n.challengeFrame;return new a.a((function(t,n){o.then((function(a){var o=function(){return n(new Error("User canceled"))};a._once("cancel",o),a.isVisible||(a.show(),a.fadeInBackdrop());e.type;var i=e.optimizations,l=(e.oneClickAuthn,Object(s.a)(e,["type","optimizations","oneClickAuthn"]));a.action.perform3DS2Challenge(Object(c.a)(Object(c.a)({},l),{},{shouldSandbox:i.sandboxChallengeFrame,recordFinalCres:i.recordFinalCres,oneClickAuthnDeviceSupport:r,oneClickWebauthnEnrollmentAppUrl:Object(u.d)("one-click-webauthn-enrollment-b0e378c9fcf4bae80351276e65907f86.html")})).then((function(){a._off("cancel",o),t()}))}))}))},p=n(33),f=n(5),m=function(e){if(!e||"object"!=typeof e||!e.type&&!e.code)return e;var t=function(t){return e[t]&&"string"==typeof e[t]?Object(f.a)({},"".concat(t,"_id"),e[t]):e[t]&&"object"==typeof e[t]&&"string"==typeof e[t].id?Object(f.a)({},"".concat(t,"_id"),e[t].id):null};return Object(c.a)(Object(c.a)(Object(c.a)(Object(c.a)({type:e.type,code:e.code,param:e.param},t("payment_intent")),t("setup_intent")),t("payment_method")),t("source"))},h=function(e,t,n){var r=t.intentSecret,a=t.intentType,o=t.controller,i=t.locale;return Object(p.e)(r,a,o,i,n)},_=function(e,t){var n=t.controller,r=t.intentSecret,a=t.intentType,o=t.locale;return Object(p.a)(r,a,n,e.threeDS2Source,o,e.threeDS2Intent,e.publishableKey)},b=function(e,t){var n=e.intentSecret,o=e.controller,i=e.hosted,s=t.intent,u=t.challengeFrame,l=t.startTimestamp;return a.a.all([s,u.then((function(e){return e.destroy()}))]).then((function(e){var t=Object(r.a)(e,1)[0];return o.report("3ds2.done",Object(c.a)({intentId:n.id,hosted:i,totalDuration:l.getElapsedTime()},t.error?{error:m(t.error),success:!1}:{success:!0})),t}))},y=function(e){var t=e.intentSecret,n=e.controller,r=e.hosted,o=e.locale,i=n.createHiddenFrame(u.a.STRIPE_3DS2_FINGERPRINT,{intentId:t.id,locale:o,hosted:r});n.report("3ds2.fingerprint_frame.loading",{hosted:r,intentId:t.id});var c=function(e){return new a.a((function(t){e._on("load",(function(){return t(e)}))}))}(i);return c.then((function(){n.report("3ds2.fingerprint_frame.loaded",{hosted:r,intentId:t.id})})),c},v=function(e,t){var n=t.intentSecret,r=t.controller,o=t.hosted;return e.optimizations.skipFingerprint?a.a.resolve({fingerprintAttempted:!1,fingerprintData:null}):""===e.methodUrl?(r.report("3ds2.fingerprint.no_method_url",{hosted:o,intentId:n.id}),a.a.resolve({fingerprintAttempted:!1,fingerprintData:null})):y(t).then((function(t){return t.action.perform3DS2Fingerprint({threeDS2Source:e.threeDS2Source,merchant:e.merchant,transactionId:e.transactionId,methodUrl:e.methodUrl,shouldSandbox:e.optimizations.sandboxFingerprintFrame}).then((function(e){return t.destroy(),e}))}))},O=n(25),g=function(){if(void 0===window.PublicKeyCredential||function(){if(!/CrOS/i.test(window.navigator.userAgent))return!1;var e=window.navigator.userAgent.match(/Chrome\/\d+\.\d+\.(\d+)\.(\d+)/)||[],t=Number(e[1]),n=Number(e[2]);return!(4389===t&&n>=82||4430===t&&n>=11||t>=4431)}()||function(){var e=/iPad|iPhone/i.test(window.navigator.userAgent),t=/^((?!chrome|android).)*safari/i.test(window.navigator.userAgent)&&!/SamsungBrowser/.test(window.navigator.userAgent);if(!e||t)return!1;var n=window.navigator.userAgent.match(/OS (\d+)_(\d+)(_\d+)? like Mac OS X/)||[],r=parseInt(n[1],10),a=parseInt(n[2],10);return!isNaN(r)&&!isNaN(a)&&(15===r&&a>=4||r>15)}())return a.a.resolve(!1);var e=window.PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable(),t=new a.a((function(e){return setTimeout((function(){return e(!1)}),500)}));return a.a.race([e,t]).catch((function(){return!1}))},j=function(){if(void 0===window.PaymentRequest)return a.a.resolve(!1);if(!/Chrome\/(9[5-9]|[1-9]\d\d)/.test(window.navigator.userAgent))return a.a.resolve(!1);try{var e=[{supportedMethods:"secure-payment-confirmation",data:{action:"authenticate",credentialIds:[new Uint8Array(1)],challenge:new Uint8Array(1),fallbackUrl:window.location,rpId:"stripe.com",payeeOrigin:"https://stripe.com",instrument:{displayName:"Mock ····1234",icon:'data:image/svg+xml;utf8,<svg width="28" height="18" xmlns="http://www.w3.org/2000/svg"></svg>'}}}];return new window.PaymentRequest(e,{total:{label:"Total",amount:{currency:"USD",value:"0"}}}).canMakePayment().catch((function(){return!1}))}catch(e){return a.a.resolve(!1)}},w="stripe-js-one-click-authn",k="W",E="S",S="SE/WA",P=function(e){return btoa(String.fromCharCode.apply(null,new Uint8Array(e))).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")},A=function(e){return atob(e.replace(/-/g,"+").replace(/_/g,"/"))},I=function(e){var t=A(e);return Uint8Array.from(t,(function(e){return e.charCodeAt(0)}))},C=(n(68),n(69),n(70),function(e){return"data:image/svg+xml,".concat(encodeURIComponent(e.replace(/\n/g,"").replace(/\s+/g," ")))}),T=function(e){switch(e){case"visa":return C('<svg width="28" height="18" viewBox="0 0 24 16" xmlns="http://www.w3.org/2000/svg">\n <g fill-rule="nonzero" fill="none">\n <rect\n stroke-opacity=".2"\n stroke="#000"\n stroke-width=".5"\n fill="#FFF"\n x=".3"\n y=".3"\n width="23.5"\n height="15.5"\n rx="2"\n />\n <path\n d="M2.8 6c-.5-.4-1.1-.6-1.8-.8h2.8c.3 0 .6 0 .7.4l.6 2.9.2.8L7 5.1h1.8L6 11.3H4.3L2.8 5.9Zm7.3 5.3H8.4l1-6.2h1.8L10 11.3Zm6.2-6L16 6.6H16a3 3 0 0 0-1.3-.3c-.7 0-1 .3-1 .5 0 .3.4.5 1 .8 1 .4 1.4 1 1.4 1.7 0 1.2-1.2 2-3 2-.7 0-1.4 0-1.8-.3l.2-1.3h.2c.6.3 1 .4 1.6.4.5 0 1-.2 1-.6 0-.3-.2-.5-.8-.8-.7-.3-1.5-.8-1.5-1.7 0-1.2 1.2-2 2.8-2 .7 0 1.2.1 1.6.3ZM18.5 9H20l-.4-1.8v-.5l-.3.6-.7 1.7Zm2.1-4 1.4 6.2h-1.6l-.2-1H18l-.3 1h-1.8l2.5-5.7c.2-.4.5-.5 1-.5h1.2Z"\n fill="#1434CB"\n />\n </g>\n</svg>');case"amex":return C('<svg width="28" height="18" viewBox="0 0 24 16" xmlns="http://www.w3.org/2000/svg">\n <g fill="none" fill-rule="evenodd">\n <rect fill="#016fd0" height="16" rx="2" width="24" />\n <path\n d="M13.8 13.4V7.7h10.1v1.6l-1.2 1.2 1.2 1.3v1.6H22l-1-1.1-1 1.1z"\n fill="#fffffe"\n />\n <path\n d="M14.4 12.8V8.3h3.8v1h-2.5v.7h2.5v1h-2.5v.7h2.5v1zM18.2 12.8l2-2.3-2-2.2h1.6l1.3 1.4 1.3-1.4h1.5l-2 2.2 2 2.2h-1.6l-1.2-1.4-1.3 1.5z"\n fill="#016fd0"\n />\n <path\n d="M14.2 2.6h2.5l.8 2v-2h3l.6 1.5.5-1.5H24v5.7H11.7z"\n fill="#fffffe"\n />\n <g fill="#016fd0">\n <path d="m14.7 3.3-2 4.4h1.4l.4-.9h2l.3.9h1.4l-2-4.4zm.2 2.5.6-1.4.6 1.4zM18.2 7.7V3.3h2L21 6l1-2.7h1.8v4.4h-1.2v-3l-1 3h-1.2l-1-3v3z" />\n </g>\n </g>\n</svg>');case"mastercard":return C('<svg width="28" height="18" viewBox="0 0 24 16" xmlns="http://www.w3.org/2000/svg">\n <g fill="none" fill-rule="evenodd">\n <rect fill="#252525" height="16" rx="2" width="24" />\n <circle cx="9" cy="8" fill="#eb001b" r="5" />\n <circle cx="15" cy="8" fill="#f79e1b" r="5" />\n <path d="M12 4a5 5 0 0 1 0 8 5 5 0 0 1 0-8z" fill="#ff5f00" />\n </g>\n</svg>');case"unionpay":case"discover":case"jcb":case"diners":case"unknown":case"elo":return C('<svg width="28" height="18" xmlns="http://www.w3.org/2000/svg"></svg>');default:return Object(o.a)(e)}},N=n(10),M=function(e,t,n){var r=e.threeDS2Source,o=e.oneClickAuthn,i=t.controller,s=n.deviceSupport,u=n.startTimestamp;if(!o)return a.a.resolve(null);var l=o.credentials.filter((function(e){return e.type===N.a}));if(0===l.length)return i.report("one_click_authn.request_spc_authn.empty_credentials_list",{client_id:w,source:r,device_support:s}),a.a.resolve(null);try{var d=o.merchant.origin;if(!d)return i.report("one_click_authn.request_spc_authn.empty_merchant_origin",{client_id:w,source:r,device_support:s}),a.a.resolve(null);var p=new window.PaymentRequest(function(e,t,n){var r=n.authenticationChallenge,a=n.instrument,o=a.cardBrand,i=a.cardName,c=a.cardLast4,s=n.merchant;return[{supportedMethods:"secure-payment-confirmation",data:{action:"authenticate",rpId:"stripe.com",credentialIds:e.map((function(e){return I(e.id)})),challenge:I(r),timeout:6e4,fallbackUrl:window.location.toString(),instrument:{displayName:"".concat(i," ····").concat(c),icon:T(o)},payeeOrigin:t,payeeName:s.name}}]}(l,d,o),{total:{label:"Total",amount:o.amount}});return i.report("one_click_authn.request_spc_authn.prompted",{client_id:w,source:r,timeToComplete:u.getElapsedTime(),device_support:s}),p.show().then((function(e){var t;return e.complete("success"),i.report("one_click_authn.request_spc_authn.completed",{client_id:w,source:r,timeToComplete:u.getElapsedTime(),device_support:s}),{type:N.a,assertion:(t=e.details,{type:"public-key",id:t.id,raw_id:t.id,response:{authenticator_data:P(t.response.authenticatorData),client_data_json:P(t.response.clientDataJSON),signature:P(t.response.signature)}}),payment_data:{merchant_data:{merchant_origin:d,total:o.amount},network_data:o.authenticationChallenge}}})).catch((function(e){var t={AbortError:"request_aborted",InvalidStateError:"payment_already_shown",NotSupportedError:"payment_method_not_supported",SecurityError:"security_error"}[e.name]||"unexpected_error";return i.report("one_click_authn.request_spc_authn.error",{reason:t,client_id:w,source:r,timeToError:u.getElapsedTime(),device_support:s,error:Object(c.a)({name:e.name,message:e.message},e)}),null}))}catch(e){i.report("one_click_authn.request_spc_authn.error",{client_id:w,reason:"unexpected_error",source:r,timeToError:u.getElapsedTime(),device_support:s,error:Object(c.a)({name:e.name,message:e.message},e)})}return a.a.resolve(null)},R=function(e,t,n){var r=t.controller,o=n.deviceSupport,i=n.challengeFrame,c=n.startTimestamp,s=e.oneClickAuthn;if(!s)return a.a.resolve(null);var l=function(e){var t=e.spcEligible,n=e.configurationType;return t&&(n===E||n===S)}(o)?N.a:N.b,d=s.credentials.filter((function(e){return e.type===l}));return 0===d.length?(r.report("one_click_authn.request_webauthn_authn.empty_credentials_list",{client_id:w,source:e.threeDS2Source,device_support:o}),a.a.resolve(null)):new a.a((function(t,n){i.then((function(r){var a=function(){return n(new Error("User canceled"))};r._once("cancel",a),r.isVisible||(r.show(),r.fadeInBackdrop());var i={amount:s.amount,instrument:s.instrument,merchant:s.merchant,authenticationChallenge:s.authenticationChallenge,layout:s.layout,allowCredentials:d};return r.action.performOneClickWebauthnAuthentication({threeDS2Source:e.threeDS2Source,cardBrand:e.cardBrand,appUrl:Object(u.d)("one-click-webauthn-authentication-112decb7ef95cfbe08e7924e5e140074.html"),deviceSupport:o,payload:i,startPosixTime:c.getAsPosixTime()}).then((function(e){r._off("cancel",a),t(e)}))}))}))},x=function(e,t){var n=e.threeDS2Source,r=e.oneClickAuthn,a=t.controller;if(!r)return null;var o=O.j?"safari":O.f?"firefox":O.c?O.a?"chrome_android":"chrome":O.e||O.d?"edge":null;if(!o)return a.report("one_click_authn.configuration.error",{client_id:w,reason:"browser_not_found",source:n}),null;try{switch(new URLSearchParams(A(r.configuration)).get(o)){case k:return k;case E:return E;case S:return S;default:return null}}catch(e){return a.report("one_click_authn.configuration.error",{client_id:w,reason:"unexpected_error",source:n,error:Object(c.a)({name:e.name,message:e.message},e)}),null}},B=function(){try{return 0==="https://js.stripe.com/v3/".indexOf(window.top.location.origin)}catch(e){return!1}},L=function(){var e=document.featurePolicy;if(!e)return!1;try{return-1!==e.allowedFeatures().indexOf("publickey-credentials-get")}catch(e){return!1}},D=function(e,t){return a.a.all([j(),g()]).then((function(n){var a=Object(r.a)(n,2),o=a[0],i=a[1];return{sameOriginFrame:B(),spcEligible:o,webauthnEligible:i,publickeyCredentialsGetAllowed:L(),configurationType:x(e,t)}}))},q=function(e,t,n){var r=n.challengeFrame,a=n.startTimestamp;return D(e,t).then((function(n){return i=(o=n).webauthnEligible,c=o.configurationType,!i||c!==k&&c!==S?function(e){var t=e.spcEligible,n=e.configurationType;return t&&n===E}(n)?M(e,t,{deviceSupport:n,startTimestamp:a}).then((function(e){return{deviceSupport:n,authenticationAPIParam:e}})):{deviceSupport:n,authenticationAPIParam:null}:R(e,t,{deviceSupport:n,challengeFrame:r,startTimestamp:a}).then((function(e){return{deviceSupport:n,authenticationAPIParam:e}}));var o,i,c}))},F=function(e,t,n){var c=new i.a,s=l(e,t);switch(e.type){case"3ds2-challenge":return D(e,t).then((function(r){return d(e,0,{oneClickAuthnDeviceSupport:r,challengeFrame:s}).then((function(){return b(t,{intent:h(0,t,n),challengeFrame:s,startTimestamp:c})}),(function(){return b(t,{intent:_(e,t),challengeFrame:s,startTimestamp:c})}))}));case"3ds2-fingerprint":return a.a.all([v(e,t),q(e,t,{challengeFrame:s,startTimestamp:c})]).then((function(n){var o=Object(r.a)(n,2),i=o[0],c=o[1];return function(e,t,n){var r=n.fingerprintResult,a=n.oneClickAuthn,o=t.controller,i=t.hosted,c=t.intentSecret;return o.report("3ds2.authenticate",{hosted:i,intentId:c.id}),o.action.authenticate3DS2({threeDS2Source:e.threeDS2Source,outerWindowWidth:window.innerWidth,hosted:i,fingerprintResult:r,oneClickAuthnDeviceSupportAPIParam:{hosted:i,same_origin_frame:a.deviceSupport.sameOriginFrame,spc_eligible:a.deviceSupport.spcEligible,webauthn_eligible:a.deviceSupport.webauthnEligible,publickey_credentials_get_allowed:a.deviceSupport.publickeyCredentialsGetAllowed},oneClickAuthnAuthenticationAPIParam:a.authenticationAPIParam,publishableKey:e.publishableKey}).then((function(e){return"error"===e.type?o.report("3ds2.authenticate.error",{error:e.error,hosted:i,intentId:c.id}):o.report("3ds2.authenticate.success",{hosted:i,intentId:c.id}),e}))}(e,t,{fingerprintResult:i,oneClickAuthn:c}).then((function(n){return function(e,t,n){var r=n.authenticateResponse,o=n.oneClickAuthnDeviceSupport,i=n.challengeFrame,c=t.controller,s=t.hosted,u=t.intentSecret;if("error"===r.type)return a.a.resolve();var l=r.object,p=l.state,f=l.ares,m=l.creq;return"delegated"===p||null===f?a.a.resolve():"C"!==f.transStatus||null==m?(c.report("3ds2.frictionless",{hosted:s,intentId:u.id}),a.a.resolve()):d({type:"3ds2-challenge",threeDS2Source:e.threeDS2Source,cardBrand:e.cardBrand,transactionId:e.transactionId,acsUrl:f.acsURL,acsTransactionId:f.acsTransID,optimizations:e.optimizations,oneClickAuthn:e.oneClickAuthn,creq:m,publishableKey:e.publishableKey},0,{oneClickAuthnDeviceSupport:o,challengeFrame:i})}(e,t,{authenticateResponse:n,oneClickAuthnDeviceSupport:c.deviceSupport,challengeFrame:s})}))})).then((function(){return b(t,{intent:h(0,t,n),challengeFrame:s,startTimestamp:c})}),(function(){return b(t,{intent:_(e,t),challengeFrame:s,startTimestamp:c})}));default:return Object(o.a)(e)}}},function(e,t,n){"use strict";(function(e){n.d(t,"a",(function(){return o}));var r=n(0),a=n(16),o=function(t){switch(t){case"ADDRESS_AUTOCOMPLETE":return Object(a.a)("checkout-inner-address-autocomplete-bebe72253eeb9b8dffd8d048a7fc5eb8.html");case"CARD_ELEMENT":return Object(a.a)("elements-inner-card-b54aca11d9705c95df51bafbacac9139.html");case"CONTROLLER":return Object(a.a)("controller-0d71f6aea26d3bc048d4f2547af0cf23.html");case"METRICS_CONTROLLER":return Object(a.a)("m-outer-6262077c14f753400d607dc30e70f1af.html");case"PAYMENT_REQUEST_ELEMENT":return Object(a.a)("elements-inner-payment-request-bedc699b26f8949c2d098f7712a2b16f.html");case"PAYMENT_REQUEST_BROWSER":return Object(a.a)("payment-request-inner-browser-9b48e20e81239ad4a2323c4262a4cc9d.html");case"PAYMENT_REQUEST_GOOGLE_PAY":return Object(a.a)("payment-request-inner-google-pay-dc0bfcab75ba4e8c06d95765fcf29361.html");case"IBAN_ELEMENT":return Object(a.a)("elements-inner-iban-5db20e4bbf9834e974ee7a844535c31b.html");case"IDEAL_BANK_ELEMENT":return Object(a.a)("elements-inner-ideal-bank-5edcc0a4d48f6b51bc51e432a2de3192.html");case"P24_BANK_ELEMENT":return Object(a.a)("elements-inner-p24-bank-0faf4f1683d3b80060a8ddf116a54e23.html");case"AUTHORIZE_WITH_URL":return Object(a.a)("authorize-with-url-inner-e356f6f5a0ae1626de7ac0571c7f44b1.html");case"STRIPE_3DS2_CHALLENGE":return Object(a.a)("three-ds-2-challenge-26ba49a6542c78ba002e5f7c0c25647b.html");case"STRIPE_3DS2_FINGERPRINT":return Object(a.a)("three-ds-2-fingerprint-17d1291c86bacb9a59bf661cf94c7d3c.html");case"AU_BANK_ACCOUNT_ELEMENT":return Object(a.a)("elements-inner-au-bank-account-ccefe3871fbd3271c613c473a8a1fae3.html");case"FPX_BANK_ELEMENT":return Object(a.a)("elements-inner-fpx-bank-628c5a1199a61841b27ca95de45ec8bf.html");case"LIGHTBOX_APP":return Object(a.a)("lightbox-inner-d28485d0256a05386dbefca9f3634abf.html");case"ISSUING_CARD_NUMBER_DISPLAY_ELEMENT":return Object(a.a)("elements-inner-issuing-card-number-display-0b2f3a9b740c6dad18ea7b976ec9efa5.html");case"ISSUING_CARD_COPY_BUTTON_ELEMENT":return Object(a.a)("elements-inner-issuing-card-copy-button-70be48d6bfc4f6f71b777c76b0f9ceb1.html");case"ISSUING_CARD_CVC_DISPLAY_ELEMENT":return Object(a.a)("elements-inner-issuing-card-cvc-display-10a94e5ed04153df763a4365c95481d4.html");case"ISSUING_CARD_EXPIRY_DISPLAY_ELEMENT":return Object(a.a)("elements-inner-issuing-card-expiry-display-63e9ef233a798a95516ddf3149026051.html");case"ISSUING_CARD_PIN_DISPLAY_ELEMENT":return Object(a.a)("elements-inner-issuing-card-pin-display-8101e8d254b62bbdcb9f8f9fd1cbc9f6.html");case"EPS_BANK_ELEMENT":return Object(a.a)("elements-inner-eps-bank-e00f58994f40a34c021d28f946de891c.html");case"HCAPTCHA_APP":return Object(a.a)("hcaptcha-inner-ab097c8938601edcd00a6ccb0bc78c68.html");case"NETBANKING_BANK_ELEMENT":return Object(a.a)("elements-inner-netbanking-bank-593e5a5d16212176cf19e62d2862605e.html");case"AFFIRM_MESSAGE_ELEMENT":return Object(a.a)("elements-inner-affirm-message-75ec47ef2d77af26c63732e9c0499033.html");case"AFFIRM_MESSAGE_MODAL_ELEMENT":return Object(a.a)("elements-inner-affirm-message-modal-de0e69a427bacbda09eeb6ce6df18672.html");case"AFTERPAY_MESSAGE_MODAL_ELEMENT":return Object(a.a)("elements-inner-afterpay-message-modal-4ced4f904892477964979de90ad4ab60.html");case"INSTANT_DEBITS_APP":return Object(a.a)("instant-debits-app-4639be63fea30e0ee4cfb857506005da.html");case"LINK_AUTHENTICATION_ELEMENT":return Object(a.a)("elements-inner-authentication-ad661929290dc34e196308f0f05c7b1c.html");case"PAYMENT_ELEMENT":return Object(a.a)("elements-inner-payment-c61927b876fe950fd9bc18c7ec09c84a.html");case"LINKED_ACCOUNTS_INNER":return Object(a.a)("linked-accounts-inner-426f7ec862e2e4cad070ba813e1280b9.html");case"WECHAT_PAY_INNER":return Object(a.a)("wechat-pay-inner-c99528be9b946f045e464d98ebd01419.html");case"PAYNOW_INNER":return Object(a.a)("paynow-inner-58d147d490a8c2f94a072437fab3819a.html");case"PIX_INNER":return Object(a.a)(e.env.PIX_INNER_HTML_NAME);case"PROMPTPAY_INNER":return Object(a.a)(e.env.PROMPTPAY_INNER_HTML_NAME);case"SHIPPING_ADDRESS_ELEMENT":return Object(a.a)("elements-inner-shipping-address-f5115c9f7a580797ec225071ffd46e9b.html");case"LINK_AUTOFILL_MODAL":return Object(a.a)("link-autofill-modal-inner-0ff832b966ba80b7bf307cc7c0e1336a.html");case"GOOGLE_MAPS_APP":return Object(a.a)("google-maps-inner-961f0fc5abdc7099717a23884de273f6.html");case"AUTOCOMPLETE_SUGGESTIONS_ELEMENT":return Object(a.a)("elements-inner-autocomplete-suggestions-d9079ddf6611e7bea30800a66cf9d70f.html");case"ACH_BANK_SEARCH_RESULTS_ELEMENT":return Object(a.a)("elements-inner-ach-bank-search-results-5afd2b6fc97fe0373ad6a5bb1ff838bf.html");case"LINK_INFO_MODAL":return Object(a.a)("elements-inner-link-info-modal-1d956cd71290f3300cc952d8cf41f2c9.html");case"LOADER_UI_APP":return Object(a.a)("elements-inner-loader-ui-fffe4f738905b19a332ef79c95b528d7.html");case"CART_ELEMENT":return Object(a.a)("elements-inner-cart-bcb1da70255e5767f76b4d2a0f4b19bf.html");case"BACS_MANDATE_CONFIRMATION_APP":return Object(a.a)("bacs-mandate-confirmation-inner-cb7e6763e84b39bee786f69327492fa9.html");case"BACS_CONFIRMATION_INNER":return Object(a.a)(e.env.BACS_CONFIRMATION_INNER);case"LINK_LOGIN":return Object(a.a)("link-login-inner-f02c5eba95d563f4ab1cd31d7c0b389c.html");default:return Object(r.a)(t)}}}).call(this,n(49))},function(e,t){e.exports=function(e){var t=e.split("").map((function(e){return e.charCodeAt(0)})).reduce((function(e,t){return(e<<5)-e+t&(e<<5)-e+t}),0).toString();return"_".concat(t.replace(/[-.]/g,"_"))}},function(e,t,n){e.exports=n.p+"fingerprinted/img/visa-0daded1e4b9a21ae5304a6794bb9e46a.svg"},function(e,t,n){e.exports=n.p+"fingerprinted/img/amex-3440dd14f9308959e71dfef65267235f.svg"},function(e,t,n){e.exports=n.p+"fingerprinted/img/mastercard-4868931ddf88ab0fc551d18a1a859ff7.svg"},function(e,t,n){"use strict";(function(e){n.d(t,"a",(function(){return u}));var r=n(1),a=n(14),o=n(73),i=n(43),c=n(13),s=function(t,n){var r=n;return Boolean(e.env.STRIPE_JS_COMPILE_DEVAPP)&&window.__STRIPE_CHECKOUT_URL_OVERRIDE__&&(r=n.replace(/^https?:\/\/[^/]+\//,window.__STRIPE_CHECKOUT_URL_OVERRIDE__)),Object(i.a)(r).then((function(e){return Object(i.b)(t,"redirectToCheckout",e),{error:e.error}}))},u=function(e,t,n,i,u){var l=Object(o.a)(t,i,u,e.keyMode());if(e.report("redirect_to_checkout.options",{betas:t,options:Object(c.h)(l,["mode","sessionId"]),globalLocale:i}),"session"===l.tag){var d=l.sessionId;return e.action.createPaymentPageWithSession({betas:t,mids:n(),sessionId:d}).then((function(t){if("error"===t.type)return{error:t.error};var n=t.object.url;return s(e,n)}))}var p=l,f=(p.tag,p.items),m=p.lineItems,h=p.mode,_=p.successUrl,b=p.cancelUrl,y=p.clientReferenceId,v=p.customerEmail,O=p.billingAddressCollection,g=p.submitType,j=p.allowIncompleteSubscriptions,w=p.shippingAddressCollection,k=Object(a.a)(p,["tag","items","lineItems","mode","successUrl","cancelUrl","clientReferenceId","customerEmail","billingAddressCollection","submitType","allowIncompleteSubscriptions","shippingAddressCollection"]),E=[];if(m&&f)throw new Error("Only one of items, lineItems can be passed in.");if(m){if(!h)throw new Error("Expected `mode`");E=m.map((function(e){if(e.price)return{type:"price",id:e.price,quantity:e.quantity};throw new Error("Unexpected item shape.")}))}else{if(!f)throw new Error("An items field must be passed in.");E=f.map((function(e){if("sku"in e)return{type:"sku",id:e.sku,quantity:e.quantity};if(e.plan)return{type:"plan",id:e.plan,quantity:e.quantity};throw new Error("Unexpected item shape.")}))}return e.action.createPaymentPage(Object(r.a)({betas:t,mids:n(),items:E,mode:h,success_url:_,cancel_url:b,client_reference_id:y,customer_email:v,billing_address_collection:O,submit_type:g,allow_incomplete_subscriptions:j,shipping_address_collection:w&&{allowed_countries:w.allowedCountries}},k)).then((function(t){if("error"===t.type)return{error:t.error};var n=t.object.url;return s(e,n)}))}}).call(this,n(49))},,function(e,t,n){"use strict";var r=n(14),a=n(1),o=n(7),i={bg:"bg",cs:"cs",da:"da",de:"de",el:"el",en:"en","en-GB":"en-GB",es:"es","es-419":"es-419",et:"et",fi:"fi",fil:"fil",fr:"fr","fr-CA":"fr-CA",hr:"hr",hu:"hu",id:"id",it:"it",ja:"ja",ko:"ko",lt:"lt",lv:"lv",ms:"ms",mt:"mt",nb:"nb",nl:"nl",pl:"pl",pt:"pt","pt-BR":"pt-BR",ro:"ro",ru:"ru",sk:"sk",sl:"sl",sv:"sv",th:"th",tr:"tr",vi:"vi",zh:"zh","zh-HK":"zh-HK","zh-TW":"zh-TW"},c={"pt-PT":"pt-PT"},s=Object.keys(i),u=Object.keys(c),l=n(63),d=n(0),p=n(6),f=n(2),m=n(15),h=n(13),_={sku:Object(d.w)(d.B),plan:Object(d.w)(d.B),clientReferenceId:Object(d.w)(d.B),locale:Object(d.w)(d.u.apply(void 0,["auto"].concat(Object(o.a)(s)))),customerEmail:Object(d.w)(d.B),billingAddressCollection:Object(d.w)(Object(d.u)("required","auto")),submitType:Object(d.w)(Object(d.u)("auto","pay","book","donate")),allowIncompleteSubscriptions:Object(d.w)(d.e),shippingAddressCollection:Object(d.w)(Object(d.h)({allowedCountries:Object(d.b)(d.B)}))},b=/cs_(test|live)_.+/,y=function(e,t){var n=Object(d.h)(Object(a.a)(Object(a.a)({},_),{},{items:Object(d.w)(Object(d.x)(Object(d.b)(Object(d.h)({type:Object(d.u)("plan"),quantity:Object(d.s)(0),id:d.B})),Object(d.b)(Object(d.h)({type:Object(d.u)("sku"),quantity:Object(d.s)(0),id:d.B})))),successUrl:d.B,cancelUrl:d.B})),o=Object(d.H)(n,t,"stripe.redirectToCheckout").value,i=o.sku,c=o.plan,s=o.items,u=Object(r.a)(o,["sku","plan","items"]),l=function(e,t,n){if(e&&t||(e||t)&&n)throw new f.b("stripe.redirectToCheckout: Expected only one of sku, plan, or items.");if("string"==typeof e)return[{sku:e,quantity:1}];if("string"==typeof t)return[{plan:t,quantity:1}];if(n)return n.map((function(e){return"sku"===e.type?{sku:e.id,quantity:e.quantity}:{plan:e.id,quantity:e.quantity}}));throw new f.b("stripe.redirectToCheckout: You must provide either sku, plan, or items.")}(i,c,s);return Object(a.a)({tag:"no-session",items:l},u)},v=function(e,t,n){var i=Object(d.h)(Object(a.a)(Object(a.a)({},_),{},{sessionId:Object(d.w)(d.B),successUrl:Object(d.w)(d.B),cancelUrl:Object(d.w)(d.B),mode:Object(d.w)(Object(d.u)("subscription","payment")),items:Object(d.w)(Object(d.x)(Object(d.b)(Object(d.h)({quantity:Object(d.s)(0),plan:d.B})),Object(d.b)(Object(d.h)({quantity:Object(d.s)(0),sku:d.B})))),lineItems:Object(d.w)(Object(d.b)(Object(d.h)({quantity:Object(d.s)(0),price:d.B})))},-1!==e.indexOf("checkout_beta_locales")?{locale:Object(d.w)(d.u.apply(void 0,["auto"].concat(Object(o.a)(s),Object(o.a)(u))))}:{})),c=Object(d.H)(i,t,"stripe.redirectToCheckout").value;if(c.sessionId){var l=c.sessionId;if(Object.keys(c).length>1)throw new f.b("stripe.redirectToCheckout: Do not provide other parameters when providing sessionId. Specify all parameters on your server when creating the CheckoutSession.");if(!/^cs_/.test(l))throw new f.b("stripe.redirectToCheckout: Invalid value for sessionId. You specified '".concat(l,"'."));if("live"===n&&/^cs_test_/.test(l))throw new f.b("stripe.redirectToCheckout: the provided sessionId is for a test mode Checkout Session, whereas Stripe.js was initialized with a live mode publishable key.");if("test"===n&&/^cs_live_/.test(l))throw new f.b("stripe.redirectToCheckout: the provided sessionId is for a live mode Checkout Session, whereas Stripe.js was initialized with a test mode publishable key.");return{tag:"session",sessionId:l}}c.sessionId,c.sku,c.plan;var p=c.items,m=c.lineItems,h=c.successUrl,b=c.cancelUrl,y=c.mode,v=Object(r.a)(c,["sessionId","sku","plan","items","lineItems","successUrl","cancelUrl","mode"]);if(!m&&!p)throw new f.b("stripe.redirectToCheckout: You must provide one of lineItems, items, or sessionId.");if(!h||!b)throw new f.b("stripe.redirectToCheckout: You must provide successUrl and cancelUrl.");return Object(a.a)({tag:"no-session",items:p,lineItems:m,successUrl:h,cancelUrl:b,mode:y},v)},O=function(e,t,n){var r=v(e,t,n);if("no-session"===r.tag){var a=r.successUrl,o=r.cancelUrl;if(!Object(m.d)(a))throw new f.b("stripe.redirectToCheckout: successUrl must start with either http:// or https://.");if(!Object(m.d)(o))throw new f.b("stripe.redirectToCheckout: cancelUrl must start with either http:// or https://.");return r}return r},g=function(e,t){return"session"===t.tag||null==e||t.locale||-1===["auto"].concat(Object(o.a)(s)).indexOf(e)?t:Object(a.a)(Object(a.a)({},t),{},{locale:e})},j=function(e,t,n){var r=Object(h.a)(l.b,(function(t){return Object(p.d)(e,t)}));if(t&&t.lineItems&&r)throw new f.b("Prices cannot be used with ".concat(r));if("string"==typeof t&&b.test(t))throw new f.b("stripe.redirectToCheckout: Checkout Session IDs must be passed in as an object with a key of `sessionId` and the Session ID as the value.");switch(r){case"checkout_beta_2":return y(0,t);case"checkout_beta_3":return v(e,t,n);case"checkout_beta_4":default:return O(e,t,n)}};t.a=function(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"unknown";return g(t,j(e,n,r))}},function(e,t,n){e.exports=n(87)},,,,,,,,,,,,,function(e,t,n){"use strict";n.r(t);var r,a,o,i,c,s=n(1),u=n(7),l=n(9),d=n(23),p=n(5),f=n(14),m=n(0),h="00".concat(Math.floor(1e3*Math.random())).slice(-3),_=0,b=function(e){return"".concat(e).concat(h).concat(_++)},y=function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return t?(parseInt(t,10)^16*Math.random()>>parseInt(t,10)/4).toString(16):"00000000-0000-4000-8000-000000000000".replace(/[08]/g,e)},v=n(12),O=n(25),g=n(15),j=n(6),w=n(13),k=n(2),E=n(3),S=function(e){var t=e.data,n=e.contentType,r=void 0===n?"application/x-www-form-urlencoded":n,a=e.method,o=e.url,i="";return t&&"application/x-www-form-urlencoded"===r?i=Object(g.j)(t):t&&"application/json"===r&&(i=JSON.stringify(t)),{requestUrl:"GET"===a&&i?"".concat(o,"?").concat(i):o,requestData:"GET"===a?"":i,contentType:r}},P=function(e){return new E.a((function(t,n){var r=e.method,a=e.headers,o=e.withCredentials,i=S(e),c=i.requestUrl,u=i.requestData,l=i.contentType,d=new XMLHttpRequest;o&&(d.withCredentials=o),d.open(r,c,!0),d.setRequestHeader("Accept","application/json"),d.setRequestHeader("Content-Type",l),d.json=function(){return new E.a((function(e,t){try{e(JSON.parse(d.responseText))}catch(e){t(new k.a(e,c))}}))},a&&Object.keys(a).forEach((function(e){var t=a[e];"string"==typeof t&&d.setRequestHeader(e,t)})),d.onreadystatechange=function(){4===d.readyState&&(d.onreadystatechange=function(){},0===d.status?o?n(new k.c(c)):I(Object(s.a)(Object(s.a)({},e),{},{withCredentials:!0})).then(t,n):t(d))};try{d.send(u)}catch(e){n(new k.a(e,c))}}))},A=function e(t){return new E.a((function(n,r){var a=t.method,o=t.headers,i=void 0===o?{}:o,c=t.keepalive,u=t.withCredentials,l=S(t),d=l.requestUrl,p=l.requestData,f={Accept:"application/json","Content-Type":l.contentType};i&&Object.keys(i).forEach((function(e){var t=i[e];"string"==typeof t&&(f[e]=t)})),window.fetch(d,{method:a,keepalive:c,headers:f,body:p||void 0,mode:"cors",credentials:u?"include":"omit"}).then((function(a){if(0===a.status){if(!u)return e(Object(s.a)(Object(s.a)({},t),{},{withCredentials:!0})).then(n,r);r(new k.c(d))}return a.text().then((function(e){n({responseURL:a.url,status:a.status,json:function(){return E.a.resolve(JSON.parse(e))},getResponseHeader:function(e){return a.headers.get(e)||""},responseText:e})}))})).catch((function(e){r(new k.a(e,d))}))}))},I=function(e){return"function"==typeof window.fetch?A(e):P(e)},C=n(4),T=function(e,t){var n=e.reduce((function(e,n){var r=function(e,t){var n=e.indexOf(":");if(-1===n)throw new k.b("Invalid css declaration in file from ".concat(t,': "').concat(e,'"'));var r=e.slice(0,n).trim(),a=C.c[r];if(!a)throw new k.b("Unsupported css property in file from ".concat(t,': "').concat(r,'"'));return{property:a,value:e.slice(n+1).trim()}}(n,t),a=r.property,o=r.value;return Object(s.a)(Object(s.a)({},e),{},Object(p.a)({},a,o))}),{});return["family","src"].forEach((function(e){if(!n[e])throw new k.b("Missing css property in file from ".concat(t,': "').concat(C.h[e],'"'))})),n},N=function(e){return I({url:e,method:"GET"}).then((function(e){return e.responseText})).then((function(t){return function(e,t){var n=e.match(/@font-face[ ]?{[^}]*}/g);if(!n)throw new k.b("No @font-face rules found in file from ".concat(t));return n}(t,e).map((function(t){var n,r=function(e,t){var n=e.replace(/\/\*.*\*\//g,"").trim(),r=(n.length&&/;$/.test(n)?n:"".concat(n,";")).match(/((([^;(]*\([^()]*\)[^;)]*)|[^;]+)+)(?=;)/g);if(!r)throw new k.b("Found @font-face rule containing no valid font-properties in file from ".concat(t));return r}((n=t.match(/@font-face[ ]?{([^}]*)}/))?n[1]:"",e);return T(r,e)}))}))},M=/https?:\/\/([^/]*)\/[^:]*/g,R=function(e,t,n,r){var a,o,i,c=e._isUserError||"IntegrationError"===e.name;throw t&&!c&&t.report("fatal.uncaught_error",{iframe:!1,name:e.name,element:"outer",message:e.message||e.description,fileName:e.fileName,lineNumber:e.lineNumber,columnNumber:e.columnNumber,stack:e.stack&&(a=e.stack,o=a.match(M),i=a,o&&o.forEach((function(e){-1===e.indexOf("https://js.stripe.com")&&(i=i.replace(e,"<external url>"))})),i.substring(0,1e3)),inPromise:n,apiMethodName:r}),e},x=function(e,t,n){return function(r){try{return e.call(this,r)}catch(e){return R(e,t||this&&this._controller,!1,n)}}},B=function(e,t,n){return function(r,a){try{return e.call(this,r,a)}catch(e){return R(e,t||this&&this._controller,!1,n)}}},L=function(e,t,n){return function(){var r=this;try{return e.call(this).catch((function(e){return R(e,t||r&&r._controller,!0,n)}))}catch(e){return R(e,t||this&&this._controller,!1,n)}}},D=function(e,t,n){return function(r){var a=this;try{return e.call(this,r).catch((function(e){return R(e,t||a&&a._controller,!0,n)}))}catch(e){return R(e,t||this&&this._controller,!1,n)}}},q=function(e,t,n){return function(r,a){var o=this;try{return e.call(this,r,a).catch((function(e){return R(e,t||o&&o._controller,!0,n)}))}catch(e){return R(e,t||this&&this._controller,!1,n)}}},F=function(e,t,n){return function(r,a,o){var i=this;try{return e.call(this,r,a,o).catch((function(e){return R(e,t||i&&i._controller,!0,n)}))}catch(e){return R(e,t||this&&this._controller,!1,n)}}},U=n(38),H=function(e,t){var n,r="string"==typeof(n=e)&&Object(w.a)(Object.keys(U.b),(function(e){return e===n}))||null;if(!r||!function(e,t){var n=j.b[e];return!n||Object(j.d)(t,n)}(r,t)){var a="string"==typeof e?e:typeof e;throw new k.b("A valid Element name must be provided. Valid Elements are:\n ".concat(Object.keys(U.b).filter((function(e){return!U.b[e].beta})).join(", "),"; you passed: ").concat(a,"."))}},G=n(21),z=n(17),K=n(18),Y=function e(){var t=this;Object(l.a)(this,e),this._emit=function(e){for(var n=arguments.length,r=new Array(n>1?n-1:0),a=1;a<n;a++)r[a-1]=arguments[a];var o=t._callbacks[e]||[];return o.forEach((function(e){var t=e.fn;if(t._isUserCallback)try{t.apply(void 0,r)}catch(e){throw e._isUserError=!0,e}else t.apply(void 0,r)})),t},this._once=function(e,n){return t._on(e,(function r(){t._off(e,r),n.apply(void 0,arguments)}),n)},this._removeAllListeners=function(){return t._callbacks={},t},this._on=function(e,n,r){return t._callbacks[e]=t._callbacks[e]||[],t._callbacks[e].push({original:r,fn:n}),t},this._validateUserOn=function(e,t){},this._userOn=function(e,n){if("string"!=typeof e)throw new k.b("When adding an event listener, the first argument should be a string event name.");if("function"!=typeof n)throw new k.b("When adding an event listener, the second argument should be a function callback.");return t._validateUserOn(e,n),n._isUserCallback=!0,t._on(e,n)},this._hasRegisteredListener=function(e){return t._callbacks[e]&&t._callbacks[e].length>0},this._off=function(e,n){if(n){for(var r,a=t._callbacks[e],o=0;o<a.length;o++)if((r=a[o]).fn===n||r.original===n){a.splice(o,1);break}}else delete t._callbacks[e];return t},this._callbacks={};var n,r,a,o=B(this._userOn),i=B(this._off),c=B(this._once),s=x(this._hasRegisteredListener),u=x(this._removeAllListeners),d=(n=this._emit,function(){try{for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];return n.call.apply(n,[this].concat(t))}catch(e){return R(e,r||this&&this._controller,!1,a)}});this.on=this.addListener=this.addEventListener=o,this.off=this.removeListener=this.removeEventListener=i,this.once=c,this.hasRegisteredListener=s,this.removeAllListeners=u,this.emit=d},W=n(39),V={applePay:"applePay",googlePay:"googlePay",browserCard:"browserCard"},J=function(e,t){return e.indexOf(t)>=0},X=Object.keys(V),$="40px",Q={success:"success",fail:"fail",invalid_shipping_address:"invalid_shipping_address"},Z={shipping:"shipping",delivery:"delivery",pickup:"pickup"},ee=Object(s.a)({success:"success"},{fail:"fail",invalid_payer_name:"invalid_payer_name",invalid_payer_email:"invalid_payer_email",invalid_payer_phone:"invalid_payer_phone",invalid_shipping_address:"invalid_shipping_address"}),te={merchantCapabilities:["supports3DS"],displayItems:[]},ne=Object(m.y)({amount:m.o,label:m.B,pending:Object(m.w)(m.e)}),re=Object(m.y)({amount:m.f,label:m.B,pending:Object(m.w)(m.e)}),ae=Object(m.y)({amount:m.f,label:m.B,pending:Object(m.w)(m.e),id:Object(m.J)(m.B,(function(){return b("shippingOption")})),detail:Object(m.J)(m.B,(function(){return""}))}),oe=Object(m.y)({major:m.r,minor:m.r}),ie=m.u.apply(void 0,Object(u.a)(Object.keys(Z))),ce=Object(m.y)({origin:m.B,name:m.B}),se=m.u.apply(void 0,Object(u.a)(X)),ue=Object(m.y)({displayItems:Object(m.w)(Object(m.b)(re)),shippingOptions:Object(m.w)(Object(m.F)("id")(Object(m.b)(ae))),wallets:Object(m.w)(Object(m.b)(se)),disableWallets:Object(m.w)(Object(m.b)(se)),blockedCardBrands:Object(m.w)(Object(m.b)(m.u.apply(void 0,Object(u.a)(C.b)))),total:ne,requestShipping:Object(m.w)(m.e),requestPayerName:Object(m.w)(m.e),requestPayerEmail:Object(m.w)(m.e),requestPayerPhone:Object(m.w)(m.e),shippingType:Object(m.w)(ie),currency:m.D,country:m.C,jcbEnabled:Object(m.w)(m.e),__billingDetailsEmailOverride:Object(m.w)(m.B),__minApplePayVersion:Object(m.w)(m.r),__minGooglePayVersion:Object(m.w)(oe),__merchantDetails:Object(m.w)(ce),__isCheckout:Object(m.w)(m.e),__betas:Object(m.w)(Object(m.b)(m.v.apply(void 0,Object(u.a)(j.c))))}),le=Object(m.h)({__merchantDetails:Object(m.w)(ce),country:Object(m.w)(m.C),currency:Object(m.w)(m.D),displayItems:Object(m.w)(Object(m.b)(re)),shippingOptions:Object(m.w)(Object(m.F)("id")(Object(m.b)(ae))),total:Object(m.w)(ne),blockedCardBrands:Object(m.w)(Object(m.b)(m.u.apply(void 0,Object(u.a)(C.b))))}),de=Object(m.y)({displayItems:Object(m.w)(Object(m.b)(re)),shippingOptions:Object(m.w)(Object(m.F)("id")(Object(m.b)(ae))),total:Object(m.w)(ne),status:function(e,t){return m.u.apply(void 0,Object(u.a)(Object.keys(Q)))(-1!==["invalid_payer_name","invalid_payer_email","invalid_payer_phone"].indexOf(e)?"fail":e,t)}}),pe=m.u.apply(void 0,Object(u.a)(Object.keys(ee))),fe=function(){return window.ApplePaySession?["APPLE_PAY"]:["GOOGLE_PAY","BROWSER"]},me=function(e){var t=[];return window.ApplePaySession?J(e,V.applePay)&&t.push("APPLE_PAY"):(J(e,V.googlePay)&&(t.push("GOOGLE_PAY"),O.a&&t.push("BROWSER")),J(e,V.browserCard)&&-1===t.indexOf("BROWSER")&&t.push("BROWSER")),t},he=function(){try{return window.location.origin===window.top.location.origin}catch(e){return!1}},_e=Object(W.b)((function(e){return window.ApplePaySession.canMakePaymentsWithActiveCard(e)})),be=function(){return E.a.resolve(window.ApplePaySession.canMakePayments())},ye=function(e){if(!window.ApplePaySession)return!1;try{return window.ApplePaySession.supportsVersion(e)}catch(e){return!1}},ve=(r={},Object(p.a)(r,C.a.VISA,"visa"),Object(p.a)(r,C.a.MASTERCARD,"masterCard"),Object(p.a)(r,C.a.AMEX,"amex"),Object(p.a)(r,C.a.DISCOVER,"discover"),Object(p.a)(r,C.a.JCB,"jcb"),Object(p.a)(r,C.a.UNIONPAY,"chinaUnionPay"),Object(p.a)(r,C.a.DINERS,null),Object(p.a)(r,"MAESTRO","maestro"),r),Oe=(a={},Object(p.a)(a,C.a.VISA,"VISA"),Object(p.a)(a,C.a.MASTERCARD,"MASTERCARD"),Object(p.a)(a,C.a.AMEX,"AMEX"),Object(p.a)(a,C.a.DISCOVER,"DISCOVER"),Object(p.a)(a,C.a.JCB,"JCB"),Object(p.a)(a,C.a.DINERS,null),["AT","AU","BE","CA","CH","DE","DK","EE","ES","FI","FR","GB","GR","HK","IE","IT","JP","LT","LU","LV","MX","NL","NO","NZ","PL","PT","SE","SG","US"]),ge=function(e,t,n){var r=[];return-1!==Oe.indexOf(e)&&r.push(C.a.AMEX),("US"===e||t)&&r.push.apply(r,[C.a.DISCOVER,C.a.DINERS,C.a.JCB]),r.push.apply(r,[C.a.MASTERCARD,C.a.VISA]),r.filter((function(e){return-1===n.indexOf(e)}))},je=n(45),we=function(e,t){return{amount:Object(je.b)(e.amount,t.currency),label:e.label,type:e.pending?"pending":"final"}},ke=function(e,t){return new window.ApplePayError(e,t)},Ee=function(e){return function(t){return t[e]&&"string"==typeof t[e]?t[e].toUpperCase():null}},Se=(o={},Object(p.a)(o,ee.success,0),Object(p.a)(o,ee.fail,1),Object(p.a)(o,ee.invalid_payer_name,2),Object(p.a)(o,ee.invalid_shipping_address,3),Object(p.a)(o,ee.invalid_payer_phone,4),Object(p.a)(o,ee.invalid_payer_email,4),o),Pe=(i={},Object(p.a)(i,ee.success,(function(){return null})),Object(p.a)(i,ee.fail,(function(){return null})),Object(p.a)(i,ee.invalid_payer_name,(function(){return ke("billingContactInvalid","name")})),Object(p.a)(i,ee.invalid_shipping_address,(function(){return ke("shippingContactInvalid","postalAddress")})),Object(p.a)(i,ee.invalid_payer_phone,(function(){return ke("shippingContactInvalid","phoneNumber")})),Object(p.a)(i,ee.invalid_payer_email,(function(){return ke("shippingContactInvalid","emailAddress")})),i),Ae=(c={},Object(p.a)(c,Z.pickup,"storePickup"),Object(p.a)(c,Z.shipping,"shipping"),Object(p.a)(c,Z.delivery,"delivery"),c),Ie={total:function(e){return we(e.total,e)},lineItems:function(e){return e.displayItems?e.displayItems.map((function(t){return we(t,e)})):[]},shippingMethods:function(e){return e.shippingOptions?e.shippingOptions.map((function(t){return function(e,t){return{amount:Object(je.b)(e.amount,t.currency),label:e.label,detail:e.detail,identifier:e.id}}(t,e)})):[]},applicationData:function(e){return e.applicationData||null}},Ce={shippingType:function(e){var t=e.shippingType;if(!t)return null;var n=Ae[t];if(void 0!==n)return n;throw new k.b("Invalid value for shippingType: ".concat(t))},requiredBillingContactFields:function(e){return e.requestPayerName?["postalAddress"]:null},requiredShippingContactFields:function(e){var t=[];return e.requestShipping&&t.push("postalAddress"),e.requestPayerEmail&&t.push("email"),e.requestPayerPhone&&t.push("phone"),t.length?t:null},countryCode:Ee("country"),currencyCode:Ee("currency"),merchantCapabilities:function(e){var t=e.merchantCapabilities||te.merchantCapabilities;return e.__betas&&Object(j.d)(e.__betas,"cup_apple_pay_beta_1")&&t.push("supportsEMV"),t},supportedNetworks:function(e){var t,n,r,a=(t=e.country,n=e.jcbEnabled||!1,r=e.blockedCardBrands||[],ge(t,n,r).reduce((function(e,t){var n=ve[t];return n&&e.push(n),e}),[]));return ye(4)&&-1===(e.blockedCardBrands||[]).indexOf("mastercard")&&a.push("maestro"),e.__betas&&Object(j.d)(e.__betas,"cup_apple_pay_beta_1")&&-1===(e.blockedCardBrands||[]).indexOf("unionpay")&&a.push("chinaUnionPay"),a}},Te={status:function(e){var t=Se[e.status];return ye(3)&&t>1?1:t},error:function(e){return ye(3)?Pe[e.status]():null}},Ne=Object(s.a)(Object(s.a)({},Ie),Ce),Me=Object(s.a)(Object(s.a)({},Ie),Te),Re=function(e){return Object.keys(Me).reduce((function(t,n){var r=(0,Me[n])(e);return null!==r?Object(s.a)(Object(s.a)({},t),{},Object(p.a)({},n,r)):t}),{})},xe=function(e){return"string"==typeof e?e:null},Be=function(e){return e?xe(e.phoneNumber):null},Le=function(e){return e?xe(e.emailAddress):null},De=function(e){return e?[e.givenName,e.familyName].filter((function(e){return e&&"string"==typeof e})).join(" "):null},qe=function(e){var t=e.addressLines,n=e.countryCode,r=e.postalCode,a=e.administrativeArea,o=e.locality,i=e.phoneNumber,c=xe(n);return{addressLine:Array.isArray(t)?t.reduce((function(e,t){return"string"==typeof t?[].concat(Object(u.a)(e),[t]):e}),[]):[],country:c?c.toUpperCase():"",postalCode:xe(r)||"",recipient:De(e)||"",region:xe(a)||"",city:xe(o)||"",phone:xe(i)||"",sortingCode:"",dependentLocality:"",organization:""}},Fe=function(e,t){var n=e.identifier,r=e.label;return t.filter((function(e){return e.id===n&&e.label===r}))[0]},Ue=function(e,t){var n=e.shippingContact,r=e.shippingMethod,a=e.billingContact;return{shippingOption:r&&t.shippingOptions&&t.shippingOptions.length?Fe(r,t.shippingOptions):null,shippingAddress:n?qe(n):null,payerEmail:Le(n),payerPhone:Be(n),payerName:De(a),walletName:"applePay",methodName:"apple-pay"}},He=n(29),Ge={austria:"AT",sterreich:"AT",csterreich:"AT",au:"AU",australia:"AU",belgium:"BE",br:"BR",brasil:"BR",brazil:"BR",ca:"CA",canada:"CA",ch:"CH",schweiz:"CH",switzerland:"CH",china:"CN",czechrepublic:"CZ",de:"DE",deutschland:"DE",germany:"DE",danmark:"DK",denmark:"DK",es:"ES",espaa:"ES",spain:"ES",finland:"FI",suomi:"FI",fr:"FR",hk:"HK",hongkong:"HK",england:"GB",gb:"GB",uk:"GB",unitedkingdom:"GB",scotland:"GB",wales:"GB",it:"IT",italy:"IT",italia:"IT",japan:"JP",lietuva:"LT",luxembourg:"LU",netherlands:"NL",nederland:"NL",norway:"NO",poland:"PL",polska:"PL",russia:"RU",saudiarabia:"SA",se:"SE",sweden:"SE",sverige:"SE",singapore:"SG",us:"US",usa:"US",unitedstatesofamerica:"US",unitedstates:"US",estadosunidos:"US"},ze=function(e,t){return e&&"object"==typeof e?t(e):null},Ke=function(){function e(t){var n=this;Object(l.a)(this,e),this._onEvent=function(){},this.setEventHandler=function(e){n._onEvent=e},this.canMakePayment=function(e){var t=e.skipEnrollmentChecks;return function(e,t,n,r){var a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:2,o=arguments.length>5?arguments[5]:void 0,i=Math.max(2,a);if(window.ApplePaySession){if(he()){if(window.ApplePaySession.supportsVersion(i)){var c="merchant.".concat((t?[e,t]:[e]).join("."),".stripe");return o?be():_e(c).then((function(a){if(r("pr.apple_pay.can_make_payment_native_response",{available:a}),n&&!a&&window.console){var o=t?"or stripeAccount parameter (".concat(t,") "):"";window.console.warn("Either you do not have a card saved to your Wallet or the current domain (".concat(e,") ").concat(o,"is not registered for Apple Pay. Visit https://dashboard.stripe.com/account/apple_pay to register this domain."))}return a}))}return n&&window.console&&window.console.warn("This version of Safari does not support ApplePay JS version ".concat(i,".")),E.a.resolve(!1)}return E.a.resolve(!1)}return E.a.resolve(!1)}(window.location.hostname,n._authentication.accountId,Object(He.c)(n._authentication.apiKey)===He.a.test,n._report,n._minimumVersion,t)},this.update=function(e){n._initialPaymentRequest=Object(w.e)(n._paymentRequestOptions,e),n._initializeSessionState()},this.show=function(){var e,t,r;n._initializeSessionState();try{e=new window.ApplePaySession(n._minimumVersion,(t=n._paymentRequestOptions,r=Object(s.a)(Object(s.a)({},te),t),Object.keys(Ne).reduce((function(e,t){var n=(0,Ne[t])(r);return null!==n?Object(s.a)(Object(s.a)({},e),{},Object(p.a)({},t,n)):e}),{})))}catch(e){throw"Must create a new ApplePaySession from a user gesture handler."===e.message?new k.b("show() must be called from a user gesture handler (such as a click handler, after the user clicks a button)."):e}n._privateSession=e,n._setupSession(e,n._usesButtonElement()),e.begin(),n._isShowing=!0},this.abort=function(){n._privateSession&&n._privateSession.abort()},this._warn=function(e){},this._report=function(e,t){n._controller.report(e,Object(s.a)(Object(s.a)({},t),{},{backingLibrary:"APPLE_PAY",usesButtonElement:n._usesButtonElement()}))},this._validateMerchant=function(e,t){return function(r){n._controller.action.createApplePaySession({data:{validation_url:r.validationURL,domain_name:window.location.hostname,display_name:n._paymentRequestOptions.total.label},usesButtonElement:t}).then((function(t){if(n._isShowing)switch(t.type){case"object":e.completeMerchantValidation(JSON.parse(t.object.session));break;case"error":n._handleValidationError(e)(t.error);break;default:Object(m.a)(t)}}),n._handleValidationError(e))}},this._handleValidationError=function(e){return function(t){n._report("error.pr.apple_pay.session_creation_failed",{error:t}),e.abort();var r=t.message;"string"==typeof r&&n._controller.warn(r)}},this._paymentAuthorized=function(e){return function(t){var r=t.payment,a=n._usesButtonElement()?C.e.paymentRequestButton:null;n._controller.action.tokenizeWithData({type:"apple_pay",elementName:a,tokenData:Object(s.a)(Object(s.a)({},r),{},{billingContact:ze(r.billingContact,n._normalizeContact)}),mids:n._mids}).then((function(t){if("error"===t.type)e.completePayment(window.ApplePaySession.STATUS_FAILURE),n._report("error.pr.create_token_failed",{error:t.error});else{var a=ze(r.shippingContact,n._normalizeContact),o=ze(r.billingContact,n._normalizeContact);a&&n._paymentRequestOptions.requestShipping&&!a.countryCode&&e.completePayment(window.ApplePaySession.STATUS_INVALID_SHIPPING_POSTAL_ADDRESS);var i=Ue({shippingContact:a,billingContact:o},n._paymentRequestOptions);n._onToken(e)(Object(s.a)(Object(s.a)({},i),{},{shippingOption:n._privateShippingOption,token:t.object}))}}))}},this._normalizeContact=function(e){if(e.country&&"string"==typeof e.country){var t,r=e.country.toLowerCase().replace(/[^a-z]+/g,"");return e.countryCode?"string"==typeof e.countryCode&&(t=e.countryCode.toUpperCase()):(t=Ge[r])||n._report("warn.pr.apple_pay.missing_country_code",{country:e.country}),Object(s.a)(Object(s.a)({},e),{},{countryCode:t})}return e},this._onToken=function(e){return function(t){n._onEvent({type:"paymentresponse",payload:Object(s.a)(Object(s.a)({},t),{},{complete:x(n._completePayment(e))})})}},this._completePayment=function(e){return function(t){n._paymentRequestOptions=Object(w.e)(n._paymentRequestOptions,{status:t});var r=Re(n._paymentRequestOptions),a=r.status,o=r.error;n._isShowing&&(o?e.completePayment({status:a,errors:[o]}):e.completePayment(a)),(0===a||1===a&&null==o)&&(n._isShowing=!1,n._onEvent&&n._onEvent({type:"close"}))}},this._shippingContactSelected=function(e){return function(t){n._onEvent({type:"shippingaddresschange",payload:{shippingAddress:qe(n._normalizeContact(t.shippingContact)),updateWith:x(n._completeShippingContactSelection(e))}})}},this._completeShippingContactSelection=function(e){return function(t){var r;n._paymentRequestOptions=Object(w.e)(n._paymentRequestOptions,t),(null===(r=n._paymentRequestOptions.shippingOptions)||void 0===r?void 0:r.length)&&(n._privateShippingOption=n._paymentRequestOptions.shippingOptions[0]);var a=Re(n._paymentRequestOptions),o=a.status,i=a.shippingMethods,c=a.total,s=a.lineItems;e.completeShippingContactSelection(o,i,c,s)}},this._shippingMethodSelected=function(e){return function(t){if(n._paymentRequestOptions.shippingOptions){var r=Fe(t.shippingMethod,n._paymentRequestOptions.shippingOptions);n._privateShippingOption=r,n._onEvent({type:"shippingoptionchange",payload:{shippingOption:r,updateWith:x(n._completeShippingMethodSelection(e))}})}}},this._completeShippingMethodSelection=function(e){return function(t){n._paymentRequestOptions=Object(w.e)(n._paymentRequestOptions,t);var r=Re(n._paymentRequestOptions),a=r.status,o=r.total,i=r.lineItems;e.completeShippingMethodSelection(a,o,i)}};var r=t.controller,a=t.authentication,o=t.mids,i=t.options,c=t.usesButtonElement,u=t.listenerRegistry;this._controller=r,this._authentication=a,this._mids=o,this._minimumVersion=i.__minApplePayVersion||2,this._usesButtonElement=c,this._listenerRegistry=u,this._initialPaymentRequest=i,this._isShowing=!1,this._initializeSessionState()}return Object(d.a)(e,[{key:"_initializeSessionState",value:function(){var e=btoa(this._authentication.accountId?"".concat(this._authentication.apiKey,":").concat(this._authentication.accountId):this._authentication.apiKey);this._paymentRequestOptions=Object(s.a)(Object(s.a)(Object(s.a)({},te),this._initialPaymentRequest),{},{status:ee.success,applicationData:e}),this._privateSession=null,this._privateShippingOption=null;var t=this._paymentRequestOptions.shippingOptions;(null==t?void 0:t.length)&&(this._privateShippingOption=t[0])}},{key:"_setupSession",value:function(e,t){var n=this;this._listenerRegistry.addEventListener(e,"validatemerchant",x(this._validateMerchant(e,t))),this._listenerRegistry.addEventListener(e,"paymentauthorized",x(this._paymentAuthorized(e))),this._listenerRegistry.addEventListener(e,"cancel",x((function(){n._isShowing=!1,n._onEvent({type:"cancel"}),n._onEvent({type:"close"})}))),this._listenerRegistry.addEventListener(e,"shippingcontactselected",x(this._shippingContactSelected(e))),this._listenerRegistry.addEventListener(e,"shippingmethodselected",x(this._shippingMethodSelected(e)))}}]),e}(),Ye=n(8),We={display:"block",position:"fixed","z-index":"2147483647",background:"rgba(40,40,40,0)",transition:"background 400ms ease","will-change":"background",top:"0",left:"0",right:"0",bottom:"0",margin:"0",padding:"0"},Ve=Object(s.a)(Object(s.a)({},We),{},{background:"rgba(40,40,40,0.75)"}),Je=function e(t){var n=this,r=t.lockScrolling,a=t.lockFocus,o=t.lockFocusOn,i=t.listenerRegistry;Object(l.a)(this,e),this.domElement=document.createElement("div"),this._runOnHide=[],this.mount=function(){var e=Object(v.c)();n.domElement.style.display="none",e.contains(n.domElement)||e.insertBefore(n.domElement,e.firstChild)},this.show=function(){if(Object(v.l)(n.domElement,We),n._lockScrolling){var e=Object(v.i)();n._runOnHide.push(e)}if(n._lockFocus){var t=Object(v.b)(n._lockFocusOn).restoreFocus;n._runOnHide.push(t)}},this.fadeIn=function(){setTimeout((function(){Object(v.l)(n.domElement,Ve)}))},this.fadeOut=function(){return new E.a((function(e){Object(v.l)(n.domElement,We),setTimeout(e,500),n._listenerRegistry.addEventListener(n.domElement,"transitionend",e)})).then((function(){for(n.domElement.style.display="none";n._runOnHide.length;)n._runOnHide.pop()()}))},this.unmount=function(){Object(v.c)().removeChild(n.domElement)},this._lockScrolling=!!r,this._lockFocus=!!a,this._lockFocusOn=o||null,this._listenerRegistry=i},Xe=null,$e=function(e){return null!==Xe?E.a.resolve(Xe):e().then((function(e){return Xe=e}))};var Qe,Ze=function(e){return!(!O.m&&!O.b)&&(!O.d&&(!(!e.isCheckout&&!window.PaymentRequest)&&!(!e.isCheckout&&O.a)))},et=function e(t){var n=this;Object(l.a)(this,e),this._mids=null,this._frame=null,this._initFrame=function(e){var t=n._controller.createHiddenFrame(Ye.a.PAYMENT_REQUEST_GOOGLE_PAY,{authentication:n._authentication,mids:n._mids,origin:n._origin});t.send({action:"stripe-pr-initialize",payload:{data:e}}),n._initFrameEventHandlers(t),n._frame=t},this._initFrameEventHandlers=function(e){e._on("pr-cancel",(function(){n._onEvent({type:"cancel"})})),e._on("pr-close",(function(){n._backdrop.fadeOut().then((function(){n._backdrop.unmount()})),n._onEvent({type:"close"})})),e._on("pr-error",(function(e){n._onEvent({type:"error",payload:{errorMessage:e.errorMessage,errorCode:e.errorCode}})})),e._on("pr-callback",(function(t){var r=t.event,a=t.options,o=t.nonce;switch(r){case"paymentresponse":n._handlePaymentResponse(e,a,o);break;case"shippingaddresschange":n._handleShippingAddressChange(e,a,o);break;case"shippingoptionchange":n._handleShippingOptionChange(e,a,o);break;default:throw new Error("Unexpected event name: ".concat(r))}}))},this._handlePaymentResponse=function(e,t,r){n._onEvent({type:"paymentresponse",payload:Object(s.a)(Object(s.a)({},t),{},{complete:function(t){e.send({action:"stripe-pr-callback-complete",payload:{nonce:r,data:{status:t}}})}})})},this._handleShippingAddressChange=function(e,t,r){n._onEvent({type:"shippingaddresschange",payload:Object(s.a)(Object(s.a)({},t),{},{updateWith:function(t){e.send({action:"stripe-pr-callback-complete",payload:{nonce:r,data:t}})}})})},this._handleShippingOptionChange=function(e,t,r){n._onEvent({type:"shippingoptionchange",payload:Object(s.a)(Object(s.a)({},t),{},{updateWith:function(t){e.send({action:"stripe-pr-callback-complete",payload:{nonce:r,data:t}})}})})},this.setEventHandler=function(e){n._onEvent=e},this.canMakePayment=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{skipEnrollmentChecks:!1},t=e.skipEnrollmentChecks;if(!Ze({isCheckout:n._isCheckout}))return E.a.resolve(!1);if(!n._frame)throw new Error("Frame not initialized.");var r=n._frame;return $e((function(){return r.action.checkCanMakePayment({skipEnrollmentChecks:t}).then((function(e){return!0===e.available}))}))},this.show=function(){n._frame&&(n._frame.send({delegate:"payment",action:"stripe-pr-show",payload:{data:{usesButtonElement:n._usesButtonElement()}}}),n._backdrop.mount(),n._backdrop.show(),n._backdrop.fadeIn())},this.update=function(e){n._frame&&n._frame.send({action:"stripe-pr-update",payload:{data:e}})},this.abort=function(){n._frame&&n._frame.send({action:"stripe-pr-abort",payload:{}})},this._controller=t.controller,this._authentication=t.authentication,this._mids=t.mids,this._origin=t.origin,this._usesButtonElement=t.usesButtonElement,this._backdrop=new Je({lockScrolling:!1,lockFocus:!0,lockFocusOn:null,listenerRegistry:t.listenerRegistry}),this._isCheckout=!!t.options.__isCheckout,Ze({isCheckout:this._isCheckout})&&this._controller&&(this._controller.action.fetchLocale({locale:"auto"}),this._initFrame(t.options))},tt=function(){if(!window.PaymentRequest)return null;if(/CriOS\/59/.test(navigator.userAgent))return null;if(/.*\(.*; wv\).*Chrome\/(?:53|54)\.\d.*/g.test(navigator.userAgent))return null;if(O.l)return null;var e=window.PaymentRequest;return e.prototype.canMakePayment||(e.prototype.canMakePayment=function(){return E.a.resolve(!1)}),e}(),nt=null,rt=function e(t){var n=this;Object(l.a)(this,e),this._onEvent=function(){},this.setEventHandler=function(e){n._onEvent=e},this.canMakePayment=function(e){var t=e.skipEnrollmentChecks;return function(e,t,n){return null!==nt?E.a.resolve(nt):tt&&e?e.action.checkCanMakePayment({skipEnrollmentChecks:n}).then((function(e){var t=e.available;return nt=!0===t})):E.a.resolve(!1)}(n._prFrame,(Object(He.c)(n._authentication.apiKey),He.a.test),t)},this.update=function(e){var t=n._prFrame;t&&t.send({action:"stripe-pr-update",payload:{data:e}})},this.show=function(){if(!n._prFrame)throw new k.b("Payment Request is not available in this browser.");n._prFrame.send({delegate:"payment",action:"stripe-pr-show",payload:{data:{usesButtonElement:n._usesButtonElement()}}})},this.abort=function(){n._prFrame&&n._prFrame.send({action:"stripe-pr-abort",payload:{}})},this._setupPrFrame=function(e,t){e.send({action:"stripe-pr-initialize",payload:{data:t}}),e._on("pr-cancel",(function(){n._onEvent({type:"cancel"})})),e._on("pr-close",(function(){n._onEvent({type:"close"})})),e._on("pr-error",(function(e){n._onEvent({type:"error",payload:{errorMessage:e.message||"",errorCode:e.code||""}})})),e._on("pr-callback",(function(t){var r=t.event,a=t.nonce,o=t.options;switch(r){case"token":n._onEvent({type:"paymentresponse",payload:Object(s.a)(Object(s.a)({},o),{},{complete:function(t){e.send({action:"stripe-pr-callback-complete",payload:{data:{status:t},nonce:a}})}})});break;case"shippingaddresschange":n._onEvent({type:"shippingaddresschange",payload:{shippingAddress:o.shippingAddress,updateWith:function(t){e.send({action:"stripe-pr-callback-complete",payload:{nonce:a,data:t}})}}});break;case"shippingoptionchange":n._onEvent({type:"shippingoptionchange",payload:{shippingOption:o.shippingOption,updateWith:function(t){e.send({action:"stripe-pr-callback-complete",payload:{nonce:a,data:t}})}}});break;default:throw new Error("Unexpected event from PaymentRequest inner: ".concat(r))}}))};var r=t.authentication,a=t.controller,o=t.mids,i=t.origin,c=t.usesButtonElement,u=t.options;if(this._authentication=r,this._controller=a,this._usesButtonElement=c,tt&&"https:"===window.location.protocol){this._controller.action.fetchLocale({locale:"auto"});var d=this._controller.createHiddenFrame(Ye.a.PAYMENT_REQUEST_BROWSER,{authentication:r,mids:o,origin:i});this._setupPrFrame(d,u),this._prFrame=d}else this._prFrame=null},at=n(27),ot=!1,it=function(e){Object(z.a)(n,e);var t=Object(K.a)(n);function n(e){var r;Object(l.a)(this,n),(r=t.call(this))._usedByButtonElement=null,r._showCalledByButtonElement=!1,r._isShowing=!1,r._backingLibraries={APPLE_PAY:null,GOOGLE_PAY:null,BROWSER:null},r._activeBackingLibraryName=null,r._buttonTypeName=null,r._activeBackingLibrary=null,r._canMakePaymentAvailability={APPLE_PAY:null,GOOGLE_PAY:null,BROWSER:null},r._canMakePaymentResolved=!1,r._validateUserOn=function(e,t){"string"==typeof e&&("source"===e&&r._hasRegisteredListener("paymentmethod")||"paymentmethod"===e&&r._hasRegisteredListener("source"))&&(r._report("pr.double_callback_registration"),r._controller.warn("Do not register event listeners for both `source` or `paymentmethod`. Only one of them will succeed."))},r._report=function(e,t){r._controller.report(e,Object(s.a)(Object(s.a)({},t),{},{activeBackingLibrary:r._activeBackingLibraryName,usesButtonElement:r._usedByButtonElement||!1}))},r._warn=function(e){r._controller.warn(e)},r._registerElement=function(){r._usedByButtonElement=!0},r._elementShow=function(){r._showCalledByButtonElement=!0,r.show()},r._initBackingLibraries=function(e){r._queryStrategy.forEach((function(t){var n={controller:r._controller,authentication:r._authentication,mids:r._mids,origin:window.location.origin,options:e,usesButtonElement:function(){return!0===r._usedByButtonElement},listenerRegistry:r._listenerRegistry};switch(t){case"APPLE_PAY":r._backingLibraries.APPLE_PAY=new Ke(n),r._backingLibraries.APPLE_PAY.setEventHandler(r._handleInternalEvent);break;case"GOOGLE_PAY":r._backingLibraries.GOOGLE_PAY=new et(n),r._backingLibraries.GOOGLE_PAY.setEventHandler(r._handleInternalEvent);break;case"BROWSER":r._backingLibraries.BROWSER=new rt(n),r._backingLibraries.BROWSER.setEventHandler(r._handleInternalEvent);break;default:Object(m.a)(t)}}))},r._handleInternalEvent=function(e){switch(e.type){case"paymentresponse":r._emitPaymentResponse(e.payload);break;case"error":r._report("error.pr.internal_error",{error:e.payload});break;case"close":r._isShowing=!1;break;default:r._emitExternalEvent(e)}},r._emitExternalEvent=function(e){switch(e.type){case"cancel":r._emit("cancel");break;case"shippingoptionchange":case"shippingaddresschange":var t=e.type,n=e.payload,a=null,o=!1,i=!1,c=function(c){if(i&&o)return r._report("pr.update_with_called_after_timeout",{event:t}),void r._controller.warn("Call to updateWith() was ignored because it has already timed out. Please ensure that updateWith is called within 30 seconds.");if(o)return r._report("pr.update_with_double_call",{event:t}),void r._controller.warn("Call to updateWith() was ignored because it has already been called. Do not call updateWith more than once.");a&&clearTimeout(a),o=!0,r._report("pr.update_with",{event:t});var s=Object(m.H)(de,c||{},"".concat(t," callback")),u=s.value;s.warnings.forEach((function(e){return r._controller.warn(e)}));var l=u,d=!1;if(r._initialOptions.__isCheckout&&"APPLE_PAY"===r._activeBackingLibraryName&&u.shippingOptions&&1===u.shippingOptions.length&&0===u.shippingOptions[0].amount){u.shippingOptions;l=Object(f.a)(u,["shippingOptions"]),d=!0}var p=u.shippingOptions||r._initialOptions.shippingOptions;if(!(d||"shippingaddresschange"!==e.type||u.status!==ee.success||p&&p.length))throw new k.b("When requesting shipping information, you must specify shippingOptions once a shipping address is selected.\nEither provide shippingOptions in stripe.paymentRequest(...) or listen for the shippingaddresschange event and provide shippingOptions to the updateWith callback there.");n.updateWith(l)};r._hasRegisteredListener(e.type)?(a=setTimeout((function(){i=!0,r._report("pr.update_with_timed_out",{event:t}),r._controller.warn('Timed out waiting for a call to updateWith(). If you listen to "'.concat(e.type,'" events, then you must call event.updateWith in the "').concat(e.type,'" handler within 30 seconds.')),c({status:"fail"})}),29900),r._emit(t,Object(s.a)(Object(s.a)({},n),{},{updateWith:c}))):c({status:"success"});break;case"token":case"source":case"paymentmethod":var u=e.type,l=e.payload,d=null,p=!1,h=!1,_=function(e){if(p&&h)return r._report("pr.complete_called_after_timeout"),void r._controller.warn("Call to complete() was ignored because it has already timed out. Please ensure that complete is called within 30 seconds.");if(h)return r._report("pr.complete_double_call"),void r._controller.warn("Call to complete() was ignored because it has already been called. Do not call complete more than once.");d&&clearTimeout(d),h=!0;var t=Object(m.H)(pe,e,"status for PaymentRequest completion"),n=t.value;t.warnings.forEach((function(e){return r._controller.warn(e)})),l.complete(n)};d=setTimeout((function(){p=!0,r._report("pr.complete_timed_out"),r._controller.warn('Timed out waiting for a call to complete(). Once you have processed the payment in the "'.concat(e.type,'" handler, you must call event.complete within 30 seconds.')),_("fail")}),29900),r._emit(u,Object(s.a)(Object(s.a)({},l),{},{complete:_}));break;default:Object(m.a)(e)}},r._maybeEmitPaymentResponse=function(e){r._isShowing&&r._emitExternalEvent(e)},r._emitPaymentResponse=function(e){r._report("pr.payment_authorized");var t=e.token,n=Object(f.a)(e,["token"]),a=n.payerEmail,o=n.payerPhone,i=n.complete,c=r._showCalledByButtonElement?C.e.paymentRequestButton:null;r._hasRegisteredListener("token")&&r._maybeEmitPaymentResponse({type:"token",payload:e}),r._hasRegisteredListener("paymentmethod")?r._controller.action.createPaymentMethodWithData({elementName:c,type:"card",paymentMethodData:{card:{token:t.id},billing_details:{email:r._initialOptions.__billingDetailsEmailOverride||a,phone:o}},mids:null}).then((function(e){"error"===e.type?e.error.code&&"email_invalid"===e.error.code?i("invalid_payer_email"):(r._report("fatal.pr.token_to_payment_method_failed",{error:e.error,token:t.id}),i("fail")):r._maybeEmitPaymentResponse({type:"paymentmethod",payload:Object(s.a)(Object(s.a)({},n),{},{paymentMethod:e.object})})})):r._hasRegisteredListener("source")&&r._controller.action.createSourceWithData({elementName:c,type:"card",sourceData:{token:t.id,owner:{email:r._initialOptions.__billingDetailsEmailOverride||a,phone:o}},mids:null}).then((function(e){"error"===e.type?e.error.code&&"email_invalid"===e.error.code?i("invalid_payer_email"):(r._report("fatal.pr.token_to_source_failed",{error:e.error,token:t.id}),i("fail")):r._maybeEmitPaymentResponse({type:"source",payload:Object(s.a)(Object(s.a)({},n),{},{source:e.object})})}))},r._canMakePaymentForBackingLibrary=function(e,t){var n=r._backingLibraries[e];if(!n)throw new Error("Unexpectedly calling canMakePayment on uninitialized backing library.");return E.a.race([new E.a((function(e){return setTimeout(e,1e4)})).then((function(){return!1})),n.canMakePayment({skipEnrollmentChecks:t}).then((function(e){return!!e}))]).then((function(t){return r._canMakePaymentAvailability=Object(s.a)(Object(s.a)({},r._canMakePaymentAvailability),{},Object(p.a)({},e,t)),{backingLibraryName:e,available:t}}))},r._isGooglePayOnAndroid=function(){var e=r._initialOptions.wallets,t=e&&-1===e.indexOf("googlePay");return O.a&&!t},r._constructCanMakePaymentResponse=function(){var e=r._isGooglePayOnAndroid()&&!!r._canMakePaymentAvailability.BROWSER;return{applePay:!!r._canMakePaymentAvailability.APPLE_PAY,googlePay:!!r._canMakePaymentAvailability.GOOGLE_PAY||e}},r.canMakePayment=x((function(e){var t=Boolean(null==e?void 0:e.skipEnrollmentChecks);if(r._report("pr.can_make_payment"),r._canMakePaymentResolved){var n=null!==r._activeBackingLibrary?r._constructCanMakePaymentResponse():null;return r._report("pr.can_make_payment_response",{response:n,cached:!0}),E.a.resolve(n)}if("https:"!==window.location.protocol)return ot||(r._controller.warn("If you are testing Apple Pay or Google Pay, you must serve this page over HTTPS as it will not work over HTTP. Please read https://stripe.com/docs/stripe-js/elements/payment-request-button#html-js-prerequisites for more details."),ot=!0),r._canMakePaymentResolved=!0,E.a.resolve(null);var a=r._queryStrategy.map((function(e){return function(){return r._canMakePaymentForBackingLibrary(e,!!r._initialOptions.__isCheckout&&t)}})),o=new at.a;return Object(W.c)(a,(function(e){var t=e.backingLibraryName,n=e.available;return n&&(r._activeBackingLibraryName=t,r._activeBackingLibrary=r._backingLibraries[t],r._buttonTypeName=r._activeBackingLibraryName,r._isGooglePayOnAndroid()&&(r._buttonTypeName="GOOGLE_PAY")),n})).then((function(e){var t=new at.a;r._canMakePaymentResolved=!0;var n=null;return"SATISFIED"===e.type&&(n=r._constructCanMakePaymentResponse()),r._report("pr.can_make_payment_response",{response:n,cached:!1,duration:o.getElapsedTime(t)}),n}))})),r.update=x((function(e){if(r._isShowing)throw r._report("pr.update_called_while_showing"),new k.b("You cannot update Payment Request options while the payment sheet is showing.");var t=Object(m.H)(le,e,"PaymentRequest update()"),n=t.value,a=t.warnings;r._report("pr.update"),a.forEach((function(e){return r._warn(e)})),Object(w.j)(r._backingLibraries).forEach((function(e){e&&e.update(n)}))})),r.show=x((function(){if(r._usedByButtonElement&&!r._showCalledByButtonElement&&(r._report("pr.show_called_with_button"),r._warn("Do not call show() yourself if you are using the paymentRequestButton Element. The Element handles showing the payment sheet.")),!r._canMakePaymentResolved)throw r._report("pr.show_called_before_can_make_payment"),new k.b("You must first check the Payment Request API's availability using paymentRequest.canMakePayment() before calling show().");if(!r._activeBackingLibrary)throw r._report("pr.show_called_with_can_make_payment_false"),new k.b("Payment Request is not available in this browser.");var e=r._activeBackingLibrary;r._report("pr.show",{listeners:Object.keys(r._callbacks).sort()}),r._isShowing=!0,e.show()})),r.abort=x((function(){if(r._activeBackingLibrary){var e=r._activeBackingLibrary;r._report("pr.abort"),e.abort()}})),r.isShowing=function(){return r._isShowing},r._controller=e.controller,r._authentication=e.authentication,r._mids=e.mids,r._listenerRegistry=e.listenerRegistry;var a=Object(m.H)(ue,e.rawOptions||{},"paymentRequest()"),o=a.value,i=a.warnings;if(r._report("pr.options",{options:Object(w.h)(o,["country","currency","jcbEnabled","requestPayerEmail","requestPayerName","requestPayerPhone","requestShipping","disableWallets","wallets","blockedCardBrands"])}),i.forEach((function(e){return r._warn(e)})),o.__billingDetailsEmailOverride&&o.requestPayerEmail)throw new k.b("When providing `__billingDetailsEmailOverride`, `requestPayerEmail` has to be `false` so that the customer is not prompted for their email in the payment sheet.");var c=o.disableWallets,u=c?X.filter((function(e){return-1===c.indexOf(e)})):o.wallets;return r._queryStrategy=u?me(u):e.queryStrategyOverride||fe(),r._report("pr.query_strategy",{queryStrategy:r._queryStrategy}),r._initialOptions=Object(s.a)(Object(s.a)({},o),{},{__betas:e.betas,wallets:u}),r._initBackingLibraries(r._initialOptions),r}return n}(Y),ct={base:Object(m.w)(m.t),complete:Object(m.w)(m.t),empty:Object(m.w)(m.t),invalid:Object(m.w)(m.t),paymentRequestButton:Object(m.w)(m.t)},st={classes:Object(m.w)(Object(m.y)({base:Object(m.w)(m.B),complete:Object(m.w)(m.B),empty:Object(m.w)(m.B),focus:Object(m.w)(m.B),invalid:Object(m.w)(m.B),webkitAutofill:Object(m.w)(m.B)})),hidePostalCode:Object(m.w)(m.e),hideIcon:Object(m.w)(m.e),showIcon:Object(m.w)(m.e),style:Object(m.w)(Object(m.y)(ct)),iconStyle:Object(m.w)(Object(m.u)("solid","default")),value:Object(m.w)(Object(m.x)(m.B,m.t)),__privateCvcOptional:Object(m.w)(m.e),__privateValue:Object(m.w)(Object(m.x)(m.B,m.t)),__privateEmitIbanValue:Object(m.w)(m.e),error:Object(m.w)(Object(m.y)({type:m.B,code:Object(m.w)(m.B),decline_code:Object(m.w)(m.B),param:Object(m.w)(m.B)})),locale:Object(m.n)("elements()"),fonts:Object(m.n)("elements()"),placeholder:Object(m.w)(m.B),disabled:Object(m.w)(m.e),placeholderCountry:Object(m.w)(m.B),paymentRequest:Object(m.w)(Object(m.l)(it,"stripe.paymentRequest(...)")),supportedCountries:Object(m.w)(Object(m.b)(m.B)),accountHolderType:Object(m.w)(Object(m.u)("individual","company")),issuingCard:Object(m.w)(m.B),toCopy:Object(m.w)(Object(m.u)("number","cvc","expiry","pin"))},ut=Object(m.y)(st),lt=(Qe={},Object(p.a)(Qe,C.e.card,Ye.a.CARD_ELEMENT),Object(p.a)(Qe,C.e.cardNumber,Ye.a.CARD_ELEMENT),Object(p.a)(Qe,C.e.cardExpiry,Ye.a.CARD_ELEMENT),Object(p.a)(Qe,C.e.cardCvc,Ye.a.CARD_ELEMENT),Object(p.a)(Qe,C.e.postalCode,Ye.a.CARD_ELEMENT),Object(p.a)(Qe,C.e.paymentRequestButton,Ye.a.PAYMENT_REQUEST_ELEMENT),Object(p.a)(Qe,C.e.iban,Ye.a.IBAN_ELEMENT),Object(p.a)(Qe,C.e.idealBank,Ye.a.IDEAL_BANK_ELEMENT),Object(p.a)(Qe,C.e.p24Bank,Ye.a.P24_BANK_ELEMENT),Object(p.a)(Qe,C.e.auBankAccount,Ye.a.AU_BANK_ACCOUNT_ELEMENT),Object(p.a)(Qe,C.e.fpxBank,Ye.a.FPX_BANK_ELEMENT),Object(p.a)(Qe,C.e.issuingCardNumberDisplay,Ye.a.ISSUING_CARD_NUMBER_DISPLAY_ELEMENT),Object(p.a)(Qe,C.e.issuingCardCopyButton,Ye.a.ISSUING_CARD_COPY_BUTTON_ELEMENT),Object(p.a)(Qe,C.e.issuingCardCvcDisplay,Ye.a.ISSUING_CARD_CVC_DISPLAY_ELEMENT),Object(p.a)(Qe,C.e.issuingCardExpiryDisplay,Ye.a.ISSUING_CARD_EXPIRY_DISPLAY_ELEMENT),Object(p.a)(Qe,C.e.issuingCardPinDisplay,Ye.a.ISSUING_CARD_PIN_DISPLAY_ELEMENT),Object(p.a)(Qe,C.e.epsBank,Ye.a.EPS_BANK_ELEMENT),Object(p.a)(Qe,C.e.netbankingBank,Ye.a.NETBANKING_BANK_ELEMENT),Object(p.a)(Qe,C.e.afterpayClearpayMessageModal,Ye.a.AFTERPAY_MESSAGE_MODAL_ELEMENT),Object(p.a)(Qe,C.e.autocompleteSuggestions,Ye.a.AUTOCOMPLETE_SUGGESTIONS_ELEMENT),Object(p.a)(Qe,C.e.achBankSearchResults,Ye.a.ACH_BANK_SEARCH_RESULTS_ELEMENT),Qe),dt=function(e){var t=Object(v.e)(e,null);return!!t&&"rtl"===t.getPropertyValue("direction")},pt=n(44),ft=n(57),mt=function(e){var t=document.createElement("input");return t.className=e,t.setAttribute("aria-hidden","true"),t.setAttribute("aria-label"," "),t.setAttribute("autocomplete","false"),t.maxLength=1,t.disabled=!0,Object(v.l)(t,ft.b),t},ht={margin:"0",padding:"0",border:"none",display:"block",background:"transparent",position:"relative",opacity:"1"},_t=function(e){var t=e.name,n=e.value,r=e.expiresIn,a=e.path,o=e.domain,i=e.protocol,c=e.sameSite,s=void 0===c?"Lax":c,u=new Date,l=r||31536e6;u.setTime(u.getTime()+l);var d=a||"/",p=(n||"").replace(/[^!#-+\--:<-[\]-~]/g,encodeURIComponent),f="".concat(encodeURIComponent(t),"=").concat(p,";expires=").concat(u.toGMTString(),";path=").concat(d,";SameSite=").concat(s);return o&&(f+=";domain=".concat(o)),"https:"===i&&(f+=";secure"),document.cookie=f,f},bt=function(e){var t=Object(w.a)(document.cookie.split("; "),(function(t){var n=t.indexOf("=");try{return decodeURIComponent(t.substr(0,n))===e}catch(e){return!1}}));if(!t)return null;var n=t.indexOf("=");try{return decodeURIComponent(t.substr(n+1))}catch(e){return null}},yt=n(67),vt=n.n(yt),Ot=C.n.replace(/\/$/,"");var gt="_1776170249",jt="__1104211103",wt=function(e){var t,n=(t={},Object(p.a)(t,gt,!0),Object(p.a)(t,jt,!1),t);try{var r=Object(g.a)(e.slice(e.indexOf("?")+1));Object.keys(r).forEach((function(e){var t=vt()(e),a=r[e];switch(t){case gt:"false"===a&&(n[t]=!1);break;case jt:"true"===a&&(n[t]=!0)}}))}catch(e){}return n}(function(e){try{if(e.currentScript)return e.currentScript.src;var t=e.querySelectorAll('script[src^="'.concat(Ot,'"]')),n=Object(w.a)(t,(function(e){var t=(e.getAttribute("src")||"").split("?")[0];return new RegExp("^".concat(Ot,"/?$")).test(t)}));return n&&n.getAttribute("src")||""}catch(e){return""}}(document)),kt=wt._1776170249,Et=wt.__1104211103,St=n(46),Pt=n(24);function At(e,t,n){return(At="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(e,t,n){var r=function(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=Object(Pt.a)(e)););return e}(e,t);if(r){var a=Object.getOwnPropertyDescriptor(r,t);return a.get?a.get.call(n):a.value}})(e,t,n||e)}var It,Ct=function(e){Object(z.a)(n,e);var t=Object(K.a)(n);function n(e){var r,a=e.type,o=e.controllerId,i=e.listenerRegistry,c=e.betas,s=e.appParams;return Object(l.a)(this,n),(r=t.call(this))._sendFAReq=function(e){var t=b(e.tag);return new E.a((function(n,a){r._requests[t]={resolve:n,reject:a},r._send({message:{action:"stripe-frame-action",payload:{nonce:t,faReq:e}},type:"outer",frameId:r.id,controllerId:r._controllerId})}))},r.action={perform3DS2Challenge:function(e){return r._sendFAReq({tag:"PERFORM_3DS2_CHALLENGE",value:e})},perform3DS2Fingerprint:function(e){return r._sendFAReq({tag:"PERFORM_3DS2_FINGERPRINT",value:e})},performOneClickWebauthnAuthentication:function(e){return r._sendFAReq({tag:"PERFORM_ONE_CLICK_WEBAUTHN_AUTHENTICATION",value:e})},show3DS2Spinner:function(e){return r._sendFAReq({tag:"SHOW_3DS2_SPINNER",value:e})},checkCanMakePayment:function(e){return r._sendFAReq({tag:"CHECK_CAN_MAKE_PAYMENT",value:e})},closeLightboxFrame:function(e){return r._sendFAReq({tag:"CLOSE_LIGHTBOX_FRAME",value:e})},openLightboxFrame:function(e){return r._sendFAReq({tag:"OPEN_LIGHTBOX_FRAME",value:e})},setFocusTarget:function(e){return r._sendFAReq({tag:"SET_FOCUS_TARGET",value:e})}},r.type=a,r.loaded=!1,r._controllerId=o,r._persistentMessages=[],r._queuedMessages=[],r._requests={},r._listenerRegistry=i,r.id=r._generateId(),r._iframe=r._createIFrame(a,c,s),r._on("load",(function(){r.loaded=!0,r._ensureMounted(),r.loaded&&(r._persistentMessages.forEach((function(e){return r._send(e)})),r._queuedMessages.forEach((function(e){return r._send(e)})),r._queuedMessages=[])})),r._on("title",(function(e){var t=e.title;r._iframe.setAttribute("title",t)})),r}return Object(d.a)(n,[{key:"_generateId",value:function(){return b("__privateStripeFrame")}},{key:"send",value:function(e){this._send({message:e,type:"outer",frameId:this.id,controllerId:this._controllerId})}},{key:"sendPersistent",value:function(e){this._ensureMounted();var t={message:e,type:"outer",frameId:this.id,controllerId:this._controllerId};this._persistentMessages=[].concat(Object(u.a)(this._persistentMessages),[t]),this.loaded&&Object(Ye.f)(t)}},{key:"resolve",value:function(e,t){this._requests[e]&&this._requests[e].resolve(t)}},{key:"reject",value:function(e,t){this._requests[e]&&this._requests[e].reject(t)}},{key:"_send",value:function(e){this._ensureMounted(),this.loaded?Object(Ye.f)(e):this._queuedMessages=[].concat(Object(u.a)(this._queuedMessages),[e])}},{key:"appendTo",value:function(e){this._emit("mount",{anchor:e}),e.appendChild(this._iframe)}},{key:"prependTo",value:function(e,t){this._emit("mount",{anchor:e,parent:t}),t.insertBefore(this._iframe,e)}},{key:"unmount",value:function(){this.loaded=!1,this._emit("unload")}},{key:"destroy",value:function(){this.unmount();var e=this._iframe.parentElement;e&&e.removeChild(this._iframe),this._emit("destroy")}},{key:"_ensureMounted",value:function(){this._isMounted()||this.unmount()}},{key:"_isMounted",value:function(){return!!document.body&&document.body.contains(this._iframe)}},{key:"_createIFrame",value:function(e,t,n){var r=window.location.href.toString(),a="string"==typeof n?n:Object(g.j)(Object(s.a)(Object(s.a)({},n||{}),{},{referrer:r,controllerId:this._controllerId})),o=document.createElement("iframe");o.setAttribute("name",this.id);var i=Object(Ye.b)(e);return Object.keys(i).forEach((function(e){o.setAttribute(e,i[e])})),(null==n?void 0:n.allowCamera)&&o.setAttribute("allow","camera"),o.src="".concat(Object(Ye.c)(e)).concat(a?"#":"").concat(a),o}}]),n}(Y),Tt=function(e){Object(z.a)(n,e);var t=Object(K.a)(n);function n(e){var r;if(Object(l.a)(this,n),(r=t.call(this,e)).autoload=e.autoload||!1,"complete"===document.readyState)r._ensureMounted();else{var a=r._ensureMounted.bind(Object(G.a)(r));r._listenerRegistry.addEventListener(document,"DOMContentLoaded",a),r._listenerRegistry.addEventListener(window,"load",a),setTimeout(a,5e3)}return r}return Object(d.a)(n,[{key:"_ensureMounted",value:function(){At(Object(Pt.a)(n.prototype),"_ensureMounted",this).call(this),this._isMounted()||this._autoMount()}},{key:"_autoMount",value:function(){var e=document.body;if(e){var t=document.querySelector("#stripe-hidden-frames-container")||e;this.appendTo(t)}else if("complete"===document.readyState||"interactive"===document.readyState)throw new k.b("Stripe.js requires that your page has a <body> element.");this.autoload&&(this.loaded=!0)}},{key:"_createIFrame",value:function(e,t,r){var a=At(Object(Pt.a)(n.prototype),"_createIFrame",this).call(this,e,t,r);return a.setAttribute("aria-hidden","true"),a.setAttribute("tabIndex","-1"),Object(v.k)(a),a}}]),n}(Ct),Nt=function(e){Object(z.a)(n,e);var t=Object(K.a)(n);function n(){return Object(l.a)(this,n),t.apply(this,arguments)}return Object(d.a)(n,[{key:"_generateId",value:function(){return this._controllerId}}]),n}(Tt),Mt="__privateStripeMetricsController",Rt="merchant",xt="session",Bt="NA",Lt=function(e){return 42===e.length},Dt=function(e,t,n){return n?!e||!Lt(e)&&Lt(t)?t:e:y()},qt=function(){function e(){var t=this,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(Object(l.a)(this,e),this._controllerFrame=null,this._latencies=[],this._handleMessage=function(e){return function(n){var r=n.data,a=n.origin;if(Object(g.g)(a)&&"string"==typeof r)try{var o=JSON.parse(r),i=o.originatingScript,c=o.payload;if("m2"===i){var s=c.guid,u=c.muid,l=c.sid;t._guid=s,t._muid=t._getID(Rt,u),t._sid=t._getID(xt,l),e()}}catch(e){}}},n.checkoutIds){var r=n.checkoutIds,a=r.muid,o=r.sid;this._guid=Bt,this._muid=a,this._sid=o,this._doNotPersist="NA"!==a&&"NA"!==o}else this._guid=Bt,this._muid=this._getID(Rt),this._sid=this._getID(xt),this._doNotPersist=!1;this._listenerRegistry=Object(St.a)(),this._idsPromise=new E.a((function(e){t._establishMessageChannel(e)})),this._id=b(Mt),kt&&(this._controllerFrame=new Nt({type:Ye.a.METRICS_CONTROLLER,controllerId:this._id,listenerRegistry:this._listenerRegistry,autoload:!0,appParams:this._buildFrameQueryString()}),this._startIntervalCheck(),setTimeout(this._testLatency.bind(this),2e3+500*Math.random()))}return Object(d.a)(e,[{key:"ids",value:function(){return{guid:this._guid,muid:this._muid,sid:this._sid}}},{key:"idsPromise",value:function(){var e=this;return this._idsPromise.then((function(){return e.ids()}))}},{key:"_establishMessageChannel",value:function(e){if(!kt)return this._guid=y(),void e();this._listenerRegistry.addEventListener(window,"message",this._handleMessage(e))}},{key:"_startIntervalCheck",value:function(){var e=this,t=window.location.href;setInterval((function(){var n=window.location.href;n!==t&&(e.send((function(e){return{action:"ping",payload:{sid:e.sid,muid:e.muid,title:document.title,referrer:document.referrer,url:document.location.href,version:6}}})),t=n)}),5e3)}},{key:"report",value:function(e,t){this.send((function(n){return{action:"track",payload:{sid:n.sid,muid:n.muid,url:document.location.href,source:e,data:t,version:6}}}))}},{key:"send",value:function(e){var t=this;this._idsPromise.then((function(){try{t._controllerFrame&&t._controllerFrame.send(e(t.ids()))}catch(e){}}))}},{key:"_testLatency",value:function(){var e=this,t=new Date;this._listenerRegistry.addEventListener(document,"mousemove",(function n(){try{var r=new Date;e._latencies.push(r-t),e._latencies.length>=10&&(e.report("mouse-timings-10",e._latencies),e._listenerRegistry.removeEventListener(document,"mousemove",n)),t=r}catch(e){}}))}},{key:"_extractMetaReferrerPolicy",value:function(){var e=document.querySelector("meta[name=referrer]");return null!=e&&e instanceof HTMLMetaElement?e.content.toLowerCase():null}},{key:"_extractUrl",value:function(e){var t=document.location.href;switch(e){case"origin":case"strict-origin":case"origin-when-cross-origin":case"strict-origin-when-cross-origin":return document.location.origin;case"unsafe-url":return t.split("#")[0];default:return t}}},{key:"_buildFrameQueryString",value:function(){var e=this._extractMetaReferrerPolicy(),t=this._extractUrl(e),n={url:t,title:document.title,referrer:document.referrer,muid:this._muid,sid:this._sid,version:6,preview:Object(g.g)(t)};return null!=e&&(n.metaReferrerPolicy=e),Object.keys(n).map((function(e){return null!=n[e]?"".concat(e,"=").concat(encodeURIComponent(n[e].toString())):null})).join("&")}},{key:"_getID",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Bt;switch(e){case Rt:if(this._doNotPersist)return Dt(this._muid,t,kt);try{var n="__stripe_mid",r=Dt(bt(n),t,kt);return Lt(r)&&_t({name:n,value:r,domain:".".concat(document.location.hostname),protocol:document.location.protocol,sameSite:"Strict"}),r}catch(e){return Bt}case xt:if(this._doNotPersist)return Dt(this._sid,t,kt);try{var a="__stripe_sid",o=Dt(bt(a),t,kt);return Lt(o)&&_t({name:a,value:o,domain:".".concat(document.location.hostname),protocol:document.location.protocol,sameSite:"Strict",expiresIn:18e5}),o}catch(e){return Bt}default:throw new Error("Invalid ID type specified: ".concat(e))}}}]),e}(),Ft=null,Ut=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return Ft=new qt(e)},Ht=!1,Gt=function(){var e=Ft;e&&(Ht||(Ht=!0,e.send((function(e){return{action:"ping",payload:{v2:2,sid:e.sid,muid:e.muid,title:document.title,referrer:document.referrer,url:document.location.href,version:6}}})),e.send((function(t){return{action:"track",payload:{sid:t.sid,muid:t.muid,url:document.location.href,source:"mouse-timings-10-v2",data:e._latencies,version:6}}}))))},zt=["test_id"],Kt=function(e){switch(e.type){case"object":return zt.push(e.object.id),{issuingCard:e.object};case"error":return{error:e.error};default:return Object(m.a)(e)}},Yt=function(e){switch(e.type){case"object":return{nonce:e.object.public_nonce};case"error":return{error:e.error};default:return Object(m.a)(e)}},Wt={base:"StripeElement",focus:"StripeElement--focus",invalid:"StripeElement--invalid",complete:"StripeElement--complete",empty:"StripeElement--empty",webkitAutofill:"StripeElement--webkit-autofill"},Vt="#faffbd",Jt=function(e){return parseFloat(e.toFixed(1))},Xt=function(e){return/^\d+(\.\d*)?px$/.test(e)},$t=function(){function e(t){var n=this;Object(l.a)(this,e),this.focus=function(){if(n._isIssuingDisplayElement())throw new k.b("Cannot call focus() on an ".concat(n._componentName," Element."));document.activeElement&&document.activeElement.blur&&document.activeElement.blur(),n._fakeInput.focus()},this._formSubmit=function(){for(var e=n._component.parentElement;e&&"FORM"!==e.nodeName;)e=e.parentElement;if(e){var t=document.createEvent("Event");t.initEvent("submit",!0,!0),e.dispatchEvent(t)}};var r=t.options,a=t.component,o=t.listenerRegistry,i=t.elementTimings,c=t.emitEvent,s=t.getParent,u=t.hasRegisteredListener,d=Object(w.g)(r,["loader"]),p=d.controller,f=d.componentName,h=d.publicOptions;this._componentName=f,this._component=a,this._controller=p,this._listenerRegistry=o,this._emitEvent=c,this._getParent=s,this._hasRegisteredListener=u;var _=Object(m.H)(ut,h||{},"create()"),b=_.value;_.warnings.forEach((function(e){return n._controller.warn(e)}));var y,v=b.paymentRequest,O=b.classes,g=b.issuingCard,j="paymentRequestButton"===this._componentName;if(j){if(!v)throw new k.b("You must pass in a stripe.paymentRequest object in order to use this Element.");this._paymentRequest=v,this._paymentRequest._registerElement()}if(this._isIssuingDisplayElement()){if(!g)throw new Error("You must pass in an ID to the issuingCard option in order to use this Element.");if(y=g,-1===zt.indexOf(y))throw new Error("Issuing card ".concat(g," has not been retrieved."))}this._createElement(d,b,i),this._classes=Wt,this._computeCustomClasses(O||{}),this._lastBackgroundColor="",this._focused=!1,this._empty=!j,this._invalid=!1,this._complete=!1,this._autofilled=!1,this._lastSubmittedAt=null}return Object(d.a)(e,[{key:"update",value:function(e){var t=this,n=Object(m.H)(ut,e||{},"element.update()"),r=n.value;if(n.warnings.forEach((function(e){return t._controller.warn(e)})),r){var a=r.classes,o=Object(f.a)(r,["classes"]);a&&(this._removeClasses(),this._computeCustomClasses(a),this._updateClasses()),this._updateFrameHeight(r),Object.keys(o).length&&(this._frame.update(o),this._secondaryFrame&&this._secondaryFrame.update(o))}}},{key:"blur",value:function(){if(this._isIssuingDisplayElement())throw new k.b("Cannot call blur() on an ".concat(this._componentName," Element."));this._frame.blur(),this._fakeInput.blur()}},{key:"clear",value:function(){this._frame.clear()}},{key:"unmount",value:function(){var e=this._getParent(),t=this._label;e&&(this._listenerRegistry.removeEventListener(e,"click",this.focus),this._removeClasses()),t&&(this._listenerRegistry.removeEventListener(t,"click",this.focus),this._label=null),this._secondaryFrame&&(this._secondaryFrame.unmount(),this._listenerRegistry.removeEventListener(window,"click",this._handleOutsideClick)),this._fakeInput.disabled=!0,this._frame.unmount()}},{key:"mount",value:function(){if(Object(v.g)(document,this._component)){this._controller.report("user_error.shadow_dom_mount",{element:this._componentName});var e=function(){throw new k.b("Elements cannot be mounted in a ShadowRoot. Please mount in the Light DOM.")};"test"===this._controller.keyMode()?e():setTimeout(e,0)}if(this._paymentRequest){if(!this._paymentRequest._canMakePaymentResolved)throw new k.b("For the paymentRequestButton Element, you must first check availability using paymentRequest.canMakePayment() before mounting the Element.");if(!this._paymentRequest._activeBackingLibraryName)throw new k.b("The paymentRequestButton Element is not available in the current environment.")}this._mountTimestamp=new at.a,this._findPossibleLabel(),this._updateClasses()}},{key:"_isIssuingDisplayElement",value:function(){return"issuingCardNumberDisplay"===this._componentName||"issuingCardCvcDisplay"===this._componentName||"issuingCardExpiryDisplay"===this._componentName||"issuingCardPinDisplay"===this._componentName}},{key:"_updateClasses",value:function(){var e=this._getParent();e&&Object(v.n)(e,[[this._classes.base,!0],[this._classes.empty,this._empty],[this._classes.focus,this._focused],[this._classes.invalid,this._invalid],[this._classes.complete,this._complete],[this._classes.webkitAutofill,this._autofilled]])}},{key:"_removeClasses",value:function(){var e=this._getParent();e&&Object(v.n)(e,[[this._classes.base,!1],[this._classes.empty,!1],[this._classes.focus,!1],[this._classes.invalid,!1],[this._classes.complete,!1],[this._classes.webkitAutofill,!1]])}},{key:"_findPossibleLabel",value:function(){var e=this._getParent();if(e){var t,n=e.getAttribute("id");if(n&&(t=document.querySelector("label[for='".concat(n,"']"))),t)this._listenerRegistry.addEventListener(e,"click",this.focus);else for(t=t||e.parentElement;t&&"LABEL"!==t.nodeName;)t=t.parentElement;t?(this._label=t,this._listenerRegistry.addEventListener(t,"click",this.focus)):this._listenerRegistry.addEventListener(e,"click",this.focus)}}},{key:"_computeCustomClasses",value:function(e){var t={};return Object.keys(e).forEach((function(n){if(!Wt[n])throw new k.b("".concat(n," is not a customizable class name.\nYou can customize: ").concat(Object.keys(Wt).join(", ")));var r=e[n]||Wt[n];t[n]=r.replace(/\./g," ")})),this._classes=Object(s.a)(Object(s.a)({},this._classes),t),this}},{key:"_setupEvents",value:function(e,t,n){var r=this,a=e.stripeJsLoadTimestamp,o=(e.stripeCreateTimestamp,e.groupCreateTimestamp),i=e.createTimestamp,c=0,s=0,l={stripeJsLoad:a.getAsPosixTime(),stripeCreate:i.getAsPosixTime(),groupCreate:o.getAsPosixTime(),create:i.getAsPosixTime()};if(this._frame._on("load",(function(e){var t=e.source;c++;var n=r._getParent(),a=dt(n),o=r._paymentRequest?r._paymentRequest._buttonTypeName:null;r._mountTimestamp&&(l.mount=r._mountTimestamp.getAsPosixTime()),r._frame.send({action:"stripe-user-mount",payload:{timestamps:l,loadCount:c,matchFrame:t===r._frame._iframe.contentWindow,rtl:a,paymentRequestButtonType:o}})})),this._secondaryFrame){var d=this._secondaryFrame;d._on("load",(function(e){var t=e.source;s++,r._mountTimestamp&&(l.mount=r._mountTimestamp.getAsPosixTime()),d.send({action:"stripe-user-mount",payload:{timestamps:l,loadCount:s,matchFrame:t===d._iframe.contentWindow,rtl:!1,paymentRequestButtonType:null}})}))}this._frame._on("redirectfocus",(function(e){var t=e.focusDirection,n=Object(v.d)(r._component,t);n&&n.focus()})),this._frame._on("focus",(function(){r._focused=!0,r._updateClasses()})),this._frame._on("blur",(function(){r._focused=!1,r._updateClasses(),r._lastSubmittedAt&&"paymentRequestButton"===r._componentName&&(r._controller.report("payment_request_button.sheet_visible",{latency:r._lastSubmittedAt.getElapsedTime()}),r._lastSubmittedAt=null)})),this._frame._on("submit",(function(){if("paymentRequestButton"===r._componentName){r._lastSubmittedAt=new at.a;var e=!1,t=!1;Gt(),r._emitEvent("click",{preventDefault:function(){r._controller.report("payment_request_button.default_prevented"),e&&r._controller.warn("event.preventDefault() was called after the payment sheet was shown. Make sure to call it synchronously when handling the `click` event."),t=!0}}),!t&&r._paymentRequest&&(r._paymentRequest._elementShow(),e=!0)}else r._emitEvent("submit"),r._formSubmit()})),["ready","focus","blur","escape","click"].forEach((function(e){r._frame._on(e,(function(){r._emitEvent(e)}))})),this._frame._on("change",(function(e){Gt();var t={},n=U.a[r._componentName]||[];["error","value","empty","complete"].concat(Object(u.a)(n)).forEach((function(n){return t[n]=e[n]})),r._emitEvent("change",t),r._empty=t.empty,r._invalid=!!t.error,r._complete=t.complete,r._updateClasses()})),this._frame._on("__privateIntegrationError",(function(e){var t=e.message;r._emitEvent("__privateIntegrationError",{message:t})})),this._frame._on("networkschange-start",(function(){Object(j.d)(t,j.a.networks_change_1)&&r._hasRegisteredListener("networkschange")&&r._controller.action.isCardMetadataRequired({groupId:n.groupId}).then((function(e){return e&&r._emitNetworksChangeEvent(null,!0),r._controller.action.retrieveCardNetworks({groupId:n.groupId})})).then((function(e){e&&r._emitNetworksChangeEvent(e,!1)}))})),this._frame._on("dimensions",(function(e){var t=r._getParent();if(t){var n=Object(v.e)(t,null);if(n){var a=parseFloat(n.getPropertyValue("height")),o=e.height;if("border-box"===n.getPropertyValue("box-sizing")){var i=parseFloat(n.getPropertyValue("padding-top")),c=parseFloat(n.getPropertyValue("padding-bottom"));a=a-parseFloat(n.getPropertyValue("border-top"))-parseFloat(n.getPropertyValue("border-bottom"))-i-c}var s=Jt(a),u=Jt(o);0!==a&&s<u&&r._controller.report("wrapper_height_mismatch",{height:u,outer_height:s});var l=r._component.getBoundingClientRect().height,d=Jt(l);0!==l&&0!==o&&d!==u&&(r._frame.updateStyle({height:"".concat(o,"px")}),r._controller.report("iframe_height_update",{height:u,calculated_height:d}))}}})),this._frame._on("autofill",(function(){var e=r._getParent();if(e){var t=e.style.backgroundColor,n=t===Vt||"rgb(250, 255, 189)"===t;r._lastBackgroundColor=n?r._lastBackgroundColor:t,e.style.backgroundColor=Vt,r._autofilled=!0,r._updateClasses()}})),this._frame._on("autofill-cleared",(function(){var e=r._getParent();r._autofilled=!1,e&&(e.style.backgroundColor=r._lastBackgroundColor),r._updateClasses()})),this._frame._on("update-outer-style",(function(e){Object.keys(e).forEach((function(t){r._component.style.setProperty(t,e[t])}))}))}},{key:"_emitNetworksChangeEvent",value:function(e,t){this._emitEvent("networkschange",{networks:e,loading:t})}},{key:"_handleOutsideClick",value:function(){this._secondaryFrame&&this._secondaryFrame.send({action:"stripe-outside-click",payload:{}})}},{key:"_updateFrameHeight",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=e.style;if("paymentRequestButton"===this._componentName){var r=n&&n.paymentRequestButton||{},a=r.height,o="string"==typeof a?a:void 0;(t||o)&&(this._frame.updateStyle({height:o||this._lastHeight||$,minHeight:"auto"}),this._lastHeight=o||this._lastHeight)}else{var i=n&&n.base||{},c=i.lineHeight,s=i.fontSize,u=i.padding,l="string"!=typeof c||isNaN(parseFloat(c))?void 0:c,d="string"==typeof s?s:void 0,p="string"==typeof u?u:void 0;if(d&&!Xt(d)&&this._controller.warn("The fontSize style you specified (".concat(d,") is not in px. We do not recommend using relative css units, as they will be calculated relative to our iframe's styles rather than your site's.")),t||l||d){var f=-1===C.l.indexOf(this._componentName)?void 0:p||this._lastPadding,m=Object(v.a)(l||this._lastHeight,d||this._lastFontSize,f);this._frame.updateStyle({height:m}),this._lastFontSize=d||this._lastFontSize,this._lastHeight=l||this._lastHeight,this._lastPadding=f}}}},{key:"_createElement",value:function(e,t,n){var r=this,a=(e.controller,e.publicOptions,e.componentName),o=e.groupId,i=Object(f.a)(e,["controller","publicOptions","componentName","groupId"]),c=(t.classes,t.paymentRequest,Object(f.a)(t,["classes","paymentRequest"])),u=this._component,l=mt(pt.c);Object(v.l)(u,ht);var d=dt(document.body),p=lt[a],m=Object(s.a)(Object(s.a)(Object(s.a)({},i),c),{},{rtl:d}),h=this._controller.createElementFrame(p,a,o,m);if(h._on("load",(function(){l.disabled=!1})),this._listenerRegistry.addEventListener(l,"focus",(function(){h.focus()})),h.appendTo(u),U.c[a]){var _=U.c[a].secondary,b=this._controller.createSecondaryElementFrame(p,_,a,o,m);b&&b.on&&b.on("height-change",(function(e){b.updateStyle({height:"".concat(e.height,"px")})})),this._secondaryFrame=b,b.appendTo(u),this._listenerRegistry.addEventListener(window,"click",(function(){return r._handleOutsideClick()}))}if(u.appendChild(l),O.i&&a!==C.e.paymentRequestButton){var y=function(){var e=mt(pt.d);return e.setAttribute("tabindex","-1"),e}();u.appendChild(y)}this._frame=h,this._fakeInput=l,this._setupEvents(n,e.betas,e),this._updateFrameHeight(t,!0)}}]),e}(),Qt=n(20),Zt={amount:m.r,currency:Object(m.u)("USD"),logoColor:Object(m.w)(Object(m.u)("primary","black","white")),fontColor:Object(m.w)(m.B),fontSize:Object(m.w)(m.B),textAlign:Object(m.w)(m.B),stripeMerchantId:Object(m.w)(m.B)},en=Object(m.y)(Zt),tn=function(e){var t=!1;window.Promise||(t=!0,window.Promise=E.a);var n=e();return t&&window.Promise===E.a&&delete window.Promise,n},nn=function(){return tn((function(){return n.e(3).then(n.bind(null,95))}))},rn=function(e){var t,r=e.options,a=Object(f.a)(e,["options"]),o=e.emitEvent,i=e.listenerRegistry,c=r.controller,l=r.componentName,d=r.publicOptions,p=r.groupId,h=new at.a,_=function(e){var t=Object(m.H)(en,e||{},"create()"),n=t.value,r=t.warnings;if(!Math.floor(n.amount)===n.amount)throw new k.b("'Amount' must be a whole integer number that represents the lowest denomination (cents).");return r.forEach((function(e){return c.warn(e)})),n},b=_(d),y=function(e,n){return e.apply(void 0,[t].concat(Object(u.a)(n)))},v=[],O=function(e){return function(){for(var n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];t?y(e,r):v.push([e,r])}},g=function(){};E.a.all([tn((function(){return n.e(2).then(n.bind(null,90))})),nn()]).then((function(e){var n=Object(Qt.a)(e,2),r=n[0],o=n[1],u=r.default;g=o.unmountModal;var d=Object(s.a)(Object(s.a)({},a),{},{options:{groupId:p,controller:c,componentName:l,publicOptions:b},mountModal:function(e){return o.mountModal({controller:c,listenerRegistry:i,url:e})}});t=u(d),c.report("affirm_message.loaded",{load_time:h.getElapsedTime(),currency:b.currency}),function(){for(;v.length;){var e=v.shift(),t=Object(Qt.a)(e,2),n=t[0],r=t[1];y(n,r)}}()}),(function(e){c.report("affirm_message.import_error",{error:e})}));var j=function(e){return function(){throw new k.b(e)}};return{mount:O((function(e){e.mount(b),o("mounted")})),unmount:O((function(e){g(),e.unmount()})),update:O((function(e,t){var n=Object(w.d)(b,t);b=_(n),e.update(b)})),focus:j("Focus is not supported by affirmMessage."),blur:j("Blur is not supported by affirmMessage."),clear:j("Clear is not supported by affirmMessage.")}},an={amount:m.r,currency:Object(m.u)("USD","AUD","CAD","GBP","NZD","EUR"),badgeTheme:Object(m.w)(Object(m.u)("black-on-mint","black-on-white","mint-on-black","white-on-black")),introText:Object(m.w)(Object(m.u)("In","in","Or","or","Pay","pay","Pay in","pay in")),isEligible:Object(m.w)(m.e),isCartEligible:Object(m.w)(m.e),lockupTheme:Object(m.w)(Object(m.u)("black","white","mint")),logoType:Object(m.w)(Object(m.u)("badge","lockup")),max:Object(m.w)(m.r),min:Object(m.w)(m.r),modalLinkStyle:Object(m.w)(Object(m.u)("circled-info-icon","more-info-text","learn-more-text")),modalTheme:Object(m.w)(Object(m.u)("mint","white")),showInterestFree:Object(m.w)(m.e),showLowerLimit:Object(m.w)(m.e),showUpperLimit:Object(m.w)(m.e),showWith:Object(m.w)(m.e)},on=Object(m.y)(an),cn=function(){return tn((function(){return n.e(5).then(n.bind(null,96))}))},sn=function(e){var t,r=e.emitEvent,a=e.options,o=a.controller,i=a.locale,c=a.publicOptions,s=new at.a,l=function(e){var t=Object(m.H)(on,e||{},"create()"),n=t.value;return t.warnings.forEach((function(e){return o.warn(e)})),n},d=l(c),p=function(e,n){return e.apply(void 0,[t].concat(Object(u.a)(n)))},f=[],h=function(e){return function(){for(var n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];t?p(e,r):f.push([e,r])}},_=function(){};E.a.all([tn((function(){return n.e(4).then(n.bind(null,93))})),cn()]).then((function(n){var a=Object(Qt.a)(n,2),c=a[0],u=a[1],l=c.default;_=u.unmountModal;var m=e.component,h=e.listenerRegistry;t=l({component:m,mountModal:function(e,t){return u.mountModal({controller:o,listenerRegistry:h,locale:e,modalTheme:t})},locale:i,listenerRegistry:h}),o.report("afterpay_message.loaded",{load_time:s.getElapsedTime(),locale:i,currency:d.currency}),function(){for(;f.length;){var e=f.shift(),t=Object(Qt.a)(e,2),n=t[0],r=t[1];p(n,r)}}(),r("ready")}),(function(e){o.report("afterpay_message.import_error",{error:e})}));var b=function(e){return function(){throw new k.b(e)}};return{mount:h((function(e){e.mount(d)})),unmount:h((function(e){_(),e.unmount()})),update:h((function(e,t){var n=Object(w.d)(d,t);d=l(n),e.update(d)})),focus:b("Focus is not supported by afterpayClearpayMessage."),blur:b("Blur is not supported by afterpayClearpayMessage."),clear:b("Clear is not supported by afterpayClearpayMessage.")}},un=n(26),ln=n(47),dn=n(52),pn=Object(m.y)({phone:Object(m.w)(Object(m.u)("auto","always","never"))}),fn=Object(m.y)({required:Object(m.u)("auto","always","never")}),mn=Object(m.y)({phone:Object(m.w)(fn)}),hn={locale:Object(m.n)("elements()"),fonts:Object(m.n)("elements()"),defaultValues:Object(m.w)(Object(m.y)({email:m.B}))},_n=Object(m.y)(hn),bn={locale:Object(m.n)("elements()"),fonts:Object(m.n)("elements()"),business:Object(m.w)(Object(m.y)({name:m.B})),paymentMethodOrder:Object(m.w)(Object(m.b)(m.B)),fields:Object(m.w)(ln.d),readOnly:Object(m.w)(m.e),terms:Object(m.w)(ln.e),wallets:Object(m.w)(ln.f),defaultValues:Object(m.w)(ln.c)},yn=Object.freeze({line1:Object(m.w)(Object(m.q)(m.B)),line2:Object(m.w)(Object(m.q)(m.B)),city:Object(m.w)(Object(m.q)(m.B)),state:Object(m.w)(Object(m.q)(m.B)),country:m.B,postal_code:Object(m.w)(Object(m.q)(m.B))}),vn=Object.freeze({name:Object(m.w)(Object(m.q)(m.B)),address:Object(m.w)(Object(m.y)(yn))}),On=Object.freeze({locale:Object(m.n)("elements()"),fonts:Object(m.n)("elements()"),allowedCountries:Object(m.w)(Object(m.b)(m.B)),blockPoBox:Object(m.w)(m.e),defaultValues:Object(m.w)(Object(m.y)(vn)),disableAutocomplete:Object(m.w)(m.e),fields:Object(m.w)(pn),validation:Object(m.w)(mn)}),gn=Object(m.y)(On),jn=function(e,t,n,r,a){switch(e){case"linkAuthentication":var o=Object(m.H)(_n,t,n),i=o.value;i.locale,i.fonts;return{value:Object(f.a)(i,["locale","fonts"]),warnings:o.warnings};case"payment":var c=Object(m.H)(function(e,t){var n=Object(s.a)({},bn);return Object(j.d)(t,j.a.payment_element_beta_1)&&(n=Object(s.a)(Object(s.a)({},n),{},{appearance:Object(m.w)(m.t),clientSecret:un.g}),e&&(n=Object(s.a)(Object(s.a)({},n),{},{clientSecret:Object(m.w)(un.g)}))),Object(j.d)(t,j.a.blocked_card_brands_beta_1)&&!e&&(n.allowedCardBrands=Object(m.w)(ln.b),n.disallowedCardBrands=Object(m.w)(ln.b)),Object(m.y)(n)}(r,a),t,n),u=c.value,l=(u.locale,u.fonts,u.clientSecret),d=void 0===l?void 0:l,p=Object(f.a)(u,["locale","fonts","clientSecret"]),h=c.warnings;return Object(j.d)(a,j.a.blocked_card_brands_beta_1)&&Object(dn.a)(t),{value:Object(s.a)({parsedIntentSecret:d},p),warnings:h};case"shippingAddress":var _=Object(m.H)(gn,t,n),b=_.value;b.locale,b.fonts;return{value:Object(f.a)(b,["locale","fonts"]),warnings:_.warnings};case"autocompleteSuggestions":case"achBankSearchResults":return{value:Object.freeze({}),warnings:[]};default:return Object(m.a)(e)}},wn=function(e,t){switch(e){case"linkAuthentication":case"payment":case"shippingAddress":return Object(s.a)({height:"2px",margin:"-4px",width:"calc(100% + 8px)"},t?{opacity:"0",transition:"opacity 0.4s ease 0.1s"}:null);case"autocompleteSuggestions":case"achBankSearchResults":return{height:"2px",margin:"-4px",width:"calc(100% + 8px)"};default:return Object(m.a)(e)}},kn=function(e){var t=e.wallet,n=e.options;if(n.controller.keyMode()===He.a.unknown)return!1;var r=!n.publicOptions.hasOwnProperty("wallets")||"never"!==n.publicOptions.wallets[t],a=Object(j.d)(n.betas,"payment_element_beta_1")&&!Object(j.d)(n.betas,"payment_element_apple_pay_beta_1");return r&&!a},En=function(e){var t=e.elementFrame,n=e.component,r=e.componentName,a=e.listenerRegistry,o=e.loaderEnabled,i=function(e){var t=e[r];if(!t)return null;var n=function(e){var t=[],n=function e(n){var r=document.createElement("div");return Object(v.l)(r,n.style),n.isShimmerNode&&t.push(r),Array.isArray(n.children)&&n.children.forEach((function(t){return r.appendChild(e(t))})),r}(e);return n.className="__PrivateStripeElementLoader",{loaderComponent:n,shimmerNodes:t}}(t),a=n.loaderComponent,o=n.shimmerNodes;return Object(s.a)({loaderComponent:a},function(e){var t,n,r=3e3,a=function(){clearTimeout(t),clearTimeout(n)};return{startAnimation:function(){a();var o=function(t){Object(v.q)((function(){e.forEach((function(e){e.style.transition="start"===t?"transform ".concat(r,"ms ease"):"",e.style.transform="start"===t?"translateX(200%)":"translateX(-100%)"}))}))};!function e(){o("start"),n=setTimeout((function(){return o("stop")}),r),t=setTimeout(e,3500)}()},stopAnimation:a}}(o))},c=new E.a((function(e){var t=It;t&&o?(t._emit("get-element-loader-ui",{}),t._on("element-loader-ui-callback",(function(t){var n=t.message.elementLoaderUi;e(i(n))}))):e(null)})),u=function(e){return function(){c.then((function(t){t&&e(t)}))}},l=function(e){e.height&&(n.style.height=e.height)};return{show:u((function(e){var r=e.loaderComponent,a=e.startAnimation;r.style.opacity="1",t.updateStyle({opacity:"0"}),n.style.height=r.style.height,n.appendChild(r),a(),t._on("set_styles",l)})),hide:u((function(e){var r=e.loaderComponent,o=e.stopAnimation,i=Object(W.d)((function(){t._off("set_styles",l),n.style.height="",o(),n.contains(r)&&n.removeChild(r)}));a.addEventListener(r,"transitionend",i),setTimeout(i,600),r.style.opacity="0",t.updateStyle({opacity:"1"})})),unmount:u((function(e){var r=e.loaderComponent,a=e.stopAnimation;r.style.opacity="0",t.updateStyle({opacity:"1"}),t._off("set_styles",l),n.style.height="",a(),n.contains(r)&&n.removeChild(r)}))}},Sn="close",Pn="complete",An=(Object(m.A)("bcsess_"),function(e,t){return new E.a((function(n){var r;try{r=t.createLightboxFrame({type:Ye.a.LINKED_ACCOUNTS_INNER,options:e})}catch(e){return n({error:{message:e.message}})}return r.show(),r.fadeInBackdrop(),r._on(Sn,(function(){r.fadeOutBackdrop()})),r._on(Pn,(function(e){r.destroy(!0).then((function(){n(function(e){switch(e.linkAccountSessionCompleteResponse.type){case"object":var t=e.linkedAccounts,n=e.linkAccountSessionCompleteResponse,r=e.consumer,a=n.object,o=a.id,i=a.filters,c=a.permissions,s=a.payment_account,u=a.bank_account_token,l=a.return_url,d={id:o,linkedAccounts:t};return u&&(d.bankAccountToken=u),s&&!u&&(d.paymentAccount=s),i&&(d.filters=i),c&&(d.permissions=c),l&&(d.returnUrl=l),{linkAccountSession:d,consumer:r};case"error":return{error:{message:e.linkAccountSessionCompleteResponse.error.message||"stripe.collectFinancialConnectionsAccounts: an unknown error occurred.",type:e.linkAccountSessionCompleteResponse.error.type,code:e.linkAccountSessionCompleteResponse.error.code}};default:return Object(m.a)(e.linkAccountSessionCompleteResponse)}}(e))}))})),null}))}),In=function(e,t){return new E.a((function(n){var r;try{r=t.createLightboxFrame({type:Ye.a.LINKED_ACCOUNTS_INNER,options:e})}catch(e){return n({error:{message:e.message}})}return r.show(),r.fadeInBackdrop(),r._on(Sn,(function(){r.fadeOutBackdrop()})),r._on(Pn,(function(e){r.destroy(!0).then((function(){n(function(e){switch(e.linkAccountSessionCompleteResponse.type){case"object":var t=e.linkedAccounts,n=e.linkAccountSessionCompleteResponse,r=e.consumer,a=n.object,o=a.id,i=a.filters,c=a.permissions,s=a.return_url,u={id:o,accounts:t};return i&&(u.filters=i),c&&(u.permissions=c),s&&(u.return_url=s),{financialConnectionsSession:u,consumer:r};case"error":return{error:{message:e.linkAccountSessionCompleteResponse.error.message||"stripe.collectFinancialConnectionsAccounts: an unknown error occurred.",type:e.linkAccountSessionCompleteResponse.error.type,code:e.linkAccountSessionCompleteResponse.error.code}};default:return Object(m.a)(e.linkAccountSessionCompleteResponse)}}(e))}))})),null}))},Cn=function(e){var t=e.linkAccountSessionCreatorClientSecret,n=e.linkAccountSessionCreatorType,r=e.linkAccountSessionCreatorId,a=e.controller,o=e.consumerSessionSecret,i=e.linkAccountSessionCreationParams,c=e.consumerPublishableKey,s=e.checkoutPriceAmount,u=e.email,l=e.linkMobilePhone,d=e.linkMobilePhoneCountry,p=e.useContinueButtonOnSuccess;Object(v.o)(a.warn);var f=a._stripeAccount,m=a._apiVersion,h=a._apiKey;return"link_payment_intent"===n&&c&&(h=c,f=null,m=null),An({clientSecret:t,linkAccountSessionCreatorType:n,linkAccountSessionCreatorId:r,linkAccountSessionCreationParams:i,apiKey:h,consumerPublishableKey:c,consumerSessionSecret:o,stripeAccount:f,stripeVersion:m,checkoutPriceAmount:s,email:u,linkMobilePhone:l,linkMobilePhoneCountry:d,useContinueButtonOnSuccess:p},a)},Tn=function(e,t){return function(e){var t=e.linkAccountSessionCreatorClientSecret,n=e.linkAccountSessionCreatorType,r=e.linkAccountSessionCreatorId,a=e.controller,o=e.consumerSessionSecret,i=e.linkAccountSessionCreationParams,c=e.consumerPublishableKey,s=e.checkoutPriceAmount,u=e.email,l=e.linkMobilePhone,d=e.linkMobilePhoneCountry;Object(v.o)(a.warn);var p=a._stripeAccount,f=a._apiVersion,m=a._apiKey;return"link_payment_intent"===n&&c&&(m=c,p=null,f=null),In({clientSecret:t,linkAccountSessionCreatorType:n,linkAccountSessionCreatorId:r,linkAccountSessionCreationParams:i,apiKey:m,consumerPublishableKey:c,consumerSessionSecret:o,stripeAccount:p,stripeVersion:f,checkoutPriceAmount:s,email:u,linkMobilePhone:l,linkMobilePhoneCountry:d,useContinueButtonOnSuccess:!1},a)}({linkAccountSessionCreatorClientSecret:t.clientSecret,linkAccountSessionCreatorType:"link_account_session",controller:e,consumerPublishableKey:null,checkoutPriceAmount:{amount:null,currency:null},email:null,linkMobilePhone:null,linkMobilePhoneCountry:null,useContinueButtonOnSuccess:!1}).then((function(e){return"error"in e?e:{financialConnectionsSession:e.financialConnectionsSession}}))},Nn=function(e,t,n,r){return Cn({linkAccountSessionCreatorClientSecret:e,linkAccountSessionCreatorType:"payment_intent",linkAccountSessionCreatorId:t,controller:n,linkAccountSessionCreationParams:{payment_method_data:r},consumerPublishableKey:null,checkoutPriceAmount:{amount:null,currency:null},email:null,linkMobilePhone:null,linkMobilePhoneCountry:null,useContinueButtonOnSuccess:!1})},Mn=function(e,t,n,r){return Cn({linkAccountSessionCreatorClientSecret:e,linkAccountSessionCreatorType:"setup_intent",linkAccountSessionCreatorId:t,controller:n,linkAccountSessionCreationParams:{payment_method_data:r},consumerPublishableKey:null,checkoutPriceAmount:{amount:null,currency:null},email:null,linkMobilePhone:null,linkMobilePhoneCountry:null,useContinueButtonOnSuccess:!1})},Rn={country:"US",currency:"usd",total:{amount:0,label:""},requestPayerName:!0,requestPayerEmail:!1,requestPayerPhone:!1},xn=function(e,t,n,r){var a="applePay"===r?"googlePay":"applePay",o=new it({controller:e.controller,authentication:{apiKey:e.controller._apiKey,accountId:e.controller._stripeAccount||null},mids:e.mids,rawOptions:Object(s.a)(Object(s.a)({},Rn),{},{disableWallets:["browserCard",a]}),betas:e.betas,queryStrategyOverride:null,listenerRegistry:t});o._on("token",(function(t){e.controller.action.completeWalletConfirm({type:"token",token:t.token.id}).then((function(){t.complete("success")})).catch((function(){t.complete("unexpected failure")}))})),o._on("cancel",(function(){e.controller.action.completeWalletConfirm({type:"cancelled"})}));var i=o.canMakePayment().then((function(e){e&&e[r]&&(n.send({action:"should-list-wallet",payload:{wallet:r}}),n._on("show-wallet",(function(e){(function(e){return e.replace(/_./g,(function(e){return e[1].toUpperCase()}))})(e)===r&&o.show()})))}));return{pr:o,canMakePaymentPromise:i}},Bn=n(19),Ln={PAYMENT_INTENT:"payment_intent",SETUP_INTENT:"setup_intent"},Dn=function(e,t,n,r,a){(function(e){var t=e.linkAccountSessionCreatorClientSecret,n=e.linkAccountSessionCreatorType,r=e.createdBy,a=e.controller,o=e.attachRequired,i=e.institution,c=e.data,s=e.manualEntryOnly,u=e.searchSession;return Cn({linkAccountSessionCreatorClientSecret:t,linkAccountSessionCreatorType:n,linkAccountSessionCreatorId:r,controller:a,linkAccountSessionCreationParams:{attach_required:o,initial_institution:i,payment_method_data:c,manual_entry_only:s,search_session:u},consumerPublishableKey:null,checkoutPriceAmount:{amount:null,currency:null},email:null,linkMobilePhone:null,linkMobilePhoneCountry:null,useContinueButtonOnSuccess:!0})})({linkAccountSessionCreatorClientSecret:r.clientSecret,linkAccountSessionCreatorType:Ln[r.type],createdBy:r.id,controller:e.controller,attachRequired:!1,institution:t,data:{type:"us_bank_account"},searchSession:a,manualEntryOnly:n}).then((function(t){if("error"in t)e.controller.action.completeLinkAccountSessionElements({groupId:e.groupId,error:Bn.d});else if(t.linkAccountSession.paymentAccount){var n=t.linkAccountSession.paymentAccount;switch(n.object){case"financial_connections.account":case"linked_account":var r=n;e.controller.action.completeLinkAccountSessionElements({groupId:e.groupId,bankAccount:{sessionId:t.linkAccountSession.id,displayName:r.display_name,bankName:r.institution_name,last4:r.last4||"",type:"instant"}});break;case void 0:var a=n;e.controller.action.completeLinkAccountSessionElements({groupId:e.groupId,bankAccount:{sessionId:t.linkAccountSession.id,displayName:"Bank account",bankName:a.bank_name,last4:a.last4,type:"manual"}});break;default:Object(m.a)(n)}}else e.controller.action.completeLinkAccountSessionElements({groupId:e.groupId,error:Bn.e})}))},qn=function(e){var t=e.options,n=e.institutionId,r=e.manualEntryOnly,a=e.parsedClientSecret,o=e.searchSession;Dn(t,n,r,a,o)},Fn=function(e,t){var n=e.createHiddenFrame(Ye.a.GOOGLE_MAPS_APP,{apiKey:"AIzaSyCab6eIMNih34mQb3XI_QWXagmF2_rvQAg"});return n._on("get-google-maps-predictions",(function(e){!function(e,t){n.send({action:"get-google-maps-predictions",payload:{data:{search:e,countryRestrictions:t}}})}(e.search,e.countryRestrictions)})),n._on("get-google-maps-details",(function(e){!function(e){n.send({action:"get-google-maps-details",payload:{data:{placeId:e}}})}(e.placeId)})),n._on("google-maps-callback",(function(e){var n=e.event,r=e.message;switch(n){case"gotPredictions":!function(e){t.send({action:"google-maps-predictions",payload:{data:e}})}(r);break;case"gotDetails":!function(e){t.send({action:"google-maps-details",payload:{data:e}})}(r)}})),n},Un=function(e){e.parsedIntentSecret,e.appearance;return Object(f.a)(e,["parsedIntentSecret","appearance"])},Hn=function(e){var t=e.controller,n=e.componentName,r=e.groupId,a=e.fonts,o=e.wait,i=e.publicOptions,c=e.controllingElement,s=e.mountedInternal,u={fonts:a,wait:o,rtl:dt(document.body),publicOptions:Un(i),controllingElement:c,mountedInternal:s},l=pt.b[n];return t.createElementFrame(l,n,r,u)},Gn=function(e){var t=e.props,n=e.componentName,r=e.controllingElement,a=e.ariaHidden,o=t.component,i=t.elementTimings,c=t.getParent,u=t.options,l=Hn(Object(s.a)(Object(s.a)({},u),{},{componentName:n,controllingElement:r}));l.appendTo(o),l.updateStyle(Object(s.a)(Object(s.a)({},wn(n,!1)),{},{position:"absolute",zIndex:"1"})),l._iframe.setAttribute("aria-hidden",a),l._on("load",(function(){l.send({action:"stripe-user-mount",payload:{timestamps:{stripeJsLoad:i.stripeJsLoadTimestamp.getAsPosixTime(),stripeCreate:i.stripeCreateTimestamp.getAsPosixTime(),groupCreate:i.groupCreateTimestamp.getAsPosixTime(),create:i.createTimestamp.getAsPosixTime(),mount:(new at.a).getAsPosixTime()},rtl:dt(c())}})})),l._on("set_styles",(function(e){l.updateStyle(e)})),"achBankSearchResults"===n&&l._on("us-bank-account-v2-launch",(function(e){return qn(Object(s.a)({options:u},e))}))},zn=function(e){var t=e.controller,n=e.locale,r=e.isDarkMode,a=e.businessName,o=e.financialIncentive,i=t.createLightboxFrame({type:Ye.a.LINK_INFO_MODAL,options:{locale:n,isDarkMode:r,businessName:a,financialIncentive:o}});i.show(),i.fadeInBackdrop();i._on("close",(function(){i.fadeOutBackdrop(),i.destroy(!0)}))},Kn=function(e){var t=e.component,n=e.listenerRegistry,r=e.elementTimings,a=e.getParent,o=e.emitEvent,i=e.options,c=e.selfDestruct,u=null,l=[],d=Hn(i),p=-1!==["auto","always"].indexOf(i.loader)&&-1!==["linkAuthentication","payment","shippingAddress"].indexOf(i.componentName),f=En({controller:i.controller,elementFrame:d,component:t,componentName:i.componentName,listenerRegistry:n,loaderEnabled:p});if(d._on("load-error",(function(e){o("loaderror",{error:e}),c()})),"shippingAddress"===i.componentName&&d._on("setup-google-maps-autocomplete",(function(){!function(e,t){var n=Fn(e,t);t._on("get-google-maps-predictions",(function(e){n._emit("get-google-maps-predictions",e)})),t._on("get-google-maps-details",(function(e){n._emit("get-google-maps-details",e)}))}(i.controller,d),Gn({props:e,componentName:"autocompleteSuggestions",controllingElement:"shippingAddressElement"})})),"payment"===i.componentName){var m;if(i.publicOptions.parsedIntentSecret)i.controller.action.setupStoreForElementsGroup({clientSecret:i.publicOptions.parsedIntentSecret,customerOptions:null,locale:i.locale,groupId:i.groupId,appearance:null!==(m=i.publicOptions.appearance)&&void 0!==m?m:i.appearance});var h=null,_=function(){return cn().then((function(e){var t=e.mountModal,n=e.unmountModal;return l.push((function(){n()})),t}))};d._on("setup-afterpay-modal",(function(){h||(h=_())})),d._on("mount-afterpay-modal",(function(e){var t=e.locale,r=e.modalTheme;h||(h=_()),h.then((function(e){e({controller:i.controller,listenerRegistry:n,locale:t,modalTheme:r})}))}));var b=null,y=function(){return nn().then((function(e){var t=e.mountModal,n=e.unmountModal;return l.push((function(){n()})),t}))};d._on("setup-affirm-modal",(function(){b||(b=y())})),d._on("affirm-modal-open",(function(e){var t=e.link;b||(b=y()),b.then((function(e){e({controller:i.controller,listenerRegistry:n,url:t})}))})),d._on("setup-us-bank-account",(function(){Gn({props:e,componentName:"achBankSearchResults",controllingElement:"paymentElement",ariaHidden:"true"})}));var O=null;!O&&kn({wallet:"applePay",options:i})&&(O=xn(i,n,d,"applePay")),d._on("update-apple-pay",(function(e){var t;null===(t=O)||void 0===t||t.pr.update(e)}));var g=null;if(!g&&kn({wallet:"googlePay",options:i})&&(g=xn(i,n,d,"googlePay")),d._on("update-google-pay",(function(e){var t;null===(t=g)||void 0===t||t.pr.update(e)})),g||O){var j,w,k=i.groupId;i.controller.action.fetchingWallets({groupId:k,isComplete:!1}),E.a.all([null===(j=g)||void 0===j?void 0:j.canMakePaymentPromise,null===(w=O)||void 0===w?void 0:w.canMakePaymentPromise]).then((function(){i.controller.action.fetchingWallets({groupId:k,isComplete:!0})}))}d._on("link-launch",(function(e){var t=e.institutionId,n=e.parsedClientSecret,r=e.consumerClientSecret,a=e.consumerPublishableKey,o=e.checkoutPriceAmount,c=e.email,s=e.linkMobilePhone,u=e.linkMobilePhoneCountry;(function(e,t,n,r,a,o,i,c,s,u){return Cn({linkAccountSessionCreatorClientSecret:t,linkAccountSessionCreatorType:"link_payment_intent",linkAccountSessionCreatorId:n,controller:r,linkAccountSessionCreationParams:{initial_institution:e},consumerSessionSecret:a,consumerPublishableKey:o,checkoutPriceAmount:i,email:c,linkMobilePhone:s,linkMobilePhoneCountry:u,useContinueButtonOnSuccess:!1})})(t,n.clientSecret,n.id,i.controller,null!=r?r:void 0,a,o,c,s,u).then((function(e){e.error||(null!=e.consumer?i.controller.action.loginWithConsumerInfo({consumerInfo:e.consumer,groupId:i.groupId}):e.linkAccountSession.paymentAccount&&i.controller.action.createBankPaymentDetails({bankAccount:e.linkAccountSession.paymentAccount.id,groupId:i.groupId}))}))})),d._on("us-bank-account-v2-launch",(function(e){qn(Object(s.a)({options:i},e))}))}d._on("mount-link-info-modal",(function(e){zn(Object(s.a)({controller:i.controller},e))})),Object(v.l)(t,Object(s.a)(Object(s.a)({},ft.a),{},{margin:"-4px 0",transition:"height .35s ease"})),d.appendTo(t),d.updateStyle(wn(i.componentName,p)),d._on("load",(function(){d.send({action:"stripe-user-mount",payload:{timestamps:{stripeJsLoad:r.stripeJsLoadTimestamp.getAsPosixTime(),stripeCreate:r.stripeCreateTimestamp.getAsPosixTime(),groupCreate:r.groupCreateTimestamp.getAsPosixTime(),create:r.createTimestamp.getAsPosixTime(),mount:u?u.getAsPosixTime():0},rtl:dt(a())}})})),pt.e.forEach((function(e){d._on(e,(function(t){return o(e,t)}))})),d._on("set_styles",(function(e){d.updateStyle(e)})),d._on("redirectfocus",(function(e){var n,r=e.focusDirection;null===(n=Object(v.d)(t,r))||void 0===n||n.focus()})),d._on("submit",(function(){o("submit");var e=t.closest("form");if(e){var n=['button[type="submit"]','input[type="submit"]','input[type="image"]'].map((function(t){return e.querySelector(t)})).filter((function(e){return!!e}))[0];n&&n.click()}}));p&&d._on("ready",(function(){f.hide()}));return{update:function(e){e.appearance&&i.controller.action.updateElementsOptions({locale:void 0,appearance:e.appearance,groupId:i.groupId}),d.update(e)},focus:function(){document.activeElement&&document.activeElement.blur&&document.activeElement.blur(),d.focus(),d.send({action:"stripe-user-focus",payload:{}})},blur:function(){d.blur()},clear:function(){d.clear()},mount:function(){u=new at.a;var e=a();e&&(p&&(f.show(),l.push(f.unmount)),Object(v.n)(e,[[pt.a,!0]]),l.push((function(){Object(v.n)(e,[[pt.a,!1]])})))},unmount:function(){for(;l.length;)l.pop()();d.unmount()},collapse:function(){d.collapse()},_frame:d}},Yn=function(e){var t=e.options,n=Object(f.a)(e,["options"]),r=t.controller,a=t.componentName,o=t.publicOptions,i=Object(f.a)(t,["controller","componentName","publicOptions"]),c=function(e){switch(e){case"linkAuthentication":case"payment":case"shippingAddress":case"autocompleteSuggestions":case"achBankSearchResults":return e;default:throw new Error("Unexpected element type for implementation")}}(a),u=jn(c,o||{},"elements.create('".concat(c,"')"),!1,t.betas);u.warnings.forEach((function(e){return r.warn(e)}));var l=["payment","linkAuthentication"].indexOf(a)>-1,d="payment"===t.componentName&&(u.value.parsedIntentSecret||null);if(l&&!t.clientSecret&&!d)throw new k.b("In order to create a ".concat(t.componentName,' element, you must pass a valid PaymentIntent or SetupIntent client secret when creating the Elements group.\n\n e.g. stripe.elements({clientSecret: "{{CLIENT_SECRET}}"})'));var p=Kn(Object(s.a)(Object(s.a)({},n),{},{options:Object(s.a)(Object(s.a)({},i),{},{controller:r,componentName:c,publicOptions:u.value})})),m=p.update,h=Object(f.a)(p,["update"]);return Object(s.a)({update:function(e){var n=jn(c,e||{},"".concat(c,".update()"),!0,t.betas);n.warnings.forEach((function(e){return r.warn(e)})),m(n.value)}},h)},Wn=Object.freeze({header:Object(m.w)(Object(m.y)({text:Object(m.w)(m.B)})),showOnAdd:Object(m.w)(Object(m.u)("auto","never"))}),Vn=Object.freeze(Object(s.a)({clientSecret:dn.c,descriptor:Object(m.w)(Object(m.u)("cart","bag","basket"))},Wn)),Jn=(Object.freeze(Object(s.a)({},Object(w.g)(Vn,["clientSecret"]))),Object.freeze({price:Object(m.w)(m.B),product:Object(m.w)(m.B),quantity:Object(m.w)(m.r)})),Xn=(Object.freeze(Object(s.a)(Object(s.a)({},Jn),{},{quantity:m.r,outerRequestId:m.r})),["ready","change","checkout"]),$n="StripeElement",Qn={margin:"0",padding:"0",border:"none",display:"block",background:"transparent",position:"relative",opacity:"1"},Zn={visibility:"hidden",position:"fixed",top:"0px",left:"100%",width:"100%",height:"100%","pointer-events":"none","max-width":"none","max-height":"none","min-width":"none","min-height":"none"},er={visibility:"visible",position:"fixed",top:"0px",left:"0px","z-index":"99999",width:"100%",height:"100%","pointer-events":"all","max-width":"none","max-height":"none","min-width":"none","min-height":"none"},tr=function(e){var t=e.component,n=e.getParent,r=e.emitEvent,a=e.options,o=e.selfDestruct,i={mounted:!1,frameReady:!1,visible:!1,showStarted:!1,releasePageScroll:null,restoreFocus:null,runOnUnmount:[],addRequestIdCounter:0};Object(v.l)(t,Qn);var c=function(e){var t=e.controller,n=e.componentName,r=e.groupId,a={fonts:e.fonts,wait:e.wait,rtl:!1,publicOptions:e.publicOptions,controllingElement:e.controllingElement};return t.createElementFrame(Ye.a.CART_ELEMENT,n,r,a)}(a);c.updateStyle(Zn),c.appendTo(t);var u=function(e){return function(t){i.mounted&&i.frameReady&&e(t)}},l=u((function(){i.visible||(i.visible=!0,c.updateStyle(er),c.show(),i.releasePageScroll=Object(v.i)(),(i.restoreFocus?i.restoreFocus():E.a.resolve()).then((function(){var e=Object(v.b)(c._iframe),t=e.lockedPromise,n=e.lockedElements;i.restoreFocus=function(){return Object(v.j)(t,n)}})))})),d=u((function(){i.visible&&(c.hide(),i.showStarted||(b(),y()))})),p=u((function(e){c.cancelCheckout(e)})),f=function(e){return function(){throw new k.b(e)}},m=f("focus() is not supported by the cart Element."),h=f("blur() is not supported by the cart Element."),_=f("clear() is not supported by the cart Element.");c._on("load-error",(function(e){null==r||r("loaderror",{error:e}),null==o||o()})),c._on("ready",(function(){i.frameReady=!0})),Xn.forEach((function(e){c._on(e,(function(t){return null==r?void 0:r(e,t)}))})),c._on("lineitemclick",(function(e){var t=e.url,n=!1;r("lineitemclick",{preventDefault:function(){n=!0},url:t}),n||(window.location.href=t)})),c._on("show-start",(function(){i.visible&&(i.showStarted=!0)}));var b=function(){var e,t;null===(e=i.releasePageScroll)||void 0===e||e.call(i),i.releasePageScroll=null,null===(t=i.restoreFocus)||void 0===t||t.call(i).then((function(){i.restoreFocus=null})),i.showStarted=!1,i.visible=!1},y=function(){i.visible||c.updateStyle(Zn)};return c._on("hide-start",b),c._on("hide-complete",y),c._on("show",l),{update:function(e){c.update(e)},focus:m,blur:h,clear:_,mount:function(){i.mounted=!0;var e=n();e&&(Object(v.n)(e,[[$n,!0]]),i.runOnUnmount.push((function(){Object(v.n)(e,[[$n,!1]])})));var t=function(){p()};window.addEventListener("beforeunload",t),i.runOnUnmount.push((function(){return window.removeEventListener("beforeunload",t)}));var r=function(e){"Escape"===e.code&&d()};window.addEventListener("keydown",r),i.runOnUnmount.push((function(){return window.removeEventListener("keydown",r)}))},unmount:function(){for(var e,t;i.runOnUnmount.length;){var n;null===(n=i.runOnUnmount.pop())||void 0===n||n()}null===(e=i.releasePageScroll)||void 0===e||e.call(i),null===(t=i.restoreFocus)||void 0===t||t.call(i),i.mounted=!1,i.releasePageScroll=null,i.restoreFocus=null,c.unmount()},show:l,hide:d,addLineItem:function(e){if(!i.frameReady||!i.mounted)return E.a.resolve({clientError:"initializing"});var t=++i.addRequestIdCounter;return c.addLineItem(Object(s.a)(Object(s.a)({},e),{},{quantity:e.quantity||1,outerRequestId:t})),new E.a((function(e){c._on("add-line-item-response",(function n(r){var a=r.outerRequestId,o=r.error;a===t&&(c._off("add-line-item-response",n),e(o?{error:o}:{}))}))}))},cancelCheckout:p,_frame:c}},nr=function(e){var t=e.options,n=Object(f.a)(e,["options"]),r=t.controller,a=t.publicOptions,o=(t.componentName,Object(f.a)(t,["controller","publicOptions","componentName"]));if(r.keyMode()===He.a.unknown)throw new k.b("It looks like you're using an older Stripe key. The Cart Element is only available for use with a modern API key, which is prefixed with 'pk_live_' or 'pk_test_'.\n You can roll your publishable key here: https://dashboard.stripe.com/account/apikeys");var i,c,u,l=(i=a||{},c="elements.create('cart', options)",Object(m.H)(Object(m.y)(Vn),i,c,u?{authenticatedOrigin:u}:null)),d=l.value,p=d.clientSecret,h=Object(f.a)(d,["clientSecret"]);l.warnings.forEach((function(e){return r.warn(e)}));var _={},b=function(e,t){return e.forEach((function(e){return r.warn(e)})),E.a.resolve({clientError:t})},y=tr(Object(s.a)(Object(s.a)({},n),{},{options:Object(s.a)(Object(s.a)({},o),{},{componentName:"cart",controller:r,publicOptions:h})})),v=y.update,O=y.cancelCheckout,g=y.addLineItem,j=Object(f.a)(y,["update","cancelCheckout","addLineItem"]);return r.action.fetchCartSession({clientSecret:p,groupId:t.groupId}).catch((function(t){e.emitEvent("loaderror",{error:t}),e.selfDestruct()})),Object(s.a)(Object(s.a)({},j),{},{update:function(e){var t=function(e,t,n){return Object(m.H)(Object(m.y)(Wn),e,t,n?{authenticatedOrigin:n}:null)}(e||{},"cart.update()"),n=t.value;t.warnings.forEach((function(e){return r.warn(e)})),v(n)},addLineItem:function(e){var t=function(e,t){var n=Object(m.H)(Object(m.y)(Jn),e,"cart.addLineItem()",t?{authenticatedOrigin:t}:null);return{value:n.value,warnings:n.warnings}}(e||{}),n=t.value,r=t.warnings,a=n.product||n.price;if(a){if(function(e){var t=Date.now(),n=_[e],r=void 0!==n&&t-n<200;return r||(_[e]=t),r}(a))return r.push("addLineItem() cannot be consecutively called within ".concat(200," milliseconds for the same price or product.")),b(r,"throttled")}else r.push("addLineItem() must be provided either a product or price.");return r.length?b(r,"integration"):g(n)},cancelCheckout:function(e){var t="string"==typeof e,n=t?e:"";t||r.warn("Expected a string passed to cancelCheckout(), but received ".concat(typeof e,".")),O(n)}})},rr=function(e,t){var n=function(e){if(!U.b[e])throw new Error("Unexpected Element type: ".concat(e,"."));return U.b[e].implementation}(e);switch(n){case"legacy":return new $t(t);case"affirm_message":return rn(t);case"afterpay_message":return sn(t);case"frame":return Yn(t);case"cart":return nr(t);default:return Object(m.a)(n,"Unexpected implementation type: ".concat(n,"."))}},ar=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return Object(w.h)(e,["business","fields","paymentMethodOrder","readOnly","terms","wallets","allowedCardBrands","disallowedCardBrands","accountHolderType","disabled","hideIcon","hidePostalCode","iconStyle","placeholderCountry","rtl","showIcon","supportedCountries","betas","componentName","groupId","locale","loader"])},or=function(e){Object(z.a)(n,e);var t=Object(K.a)(n);function n(e,r,a){var o;Object(l.a)(this,n),(o=t.call(this)).mount=x((function(e){var t;if(o._checkDestroyed(),!e)throw new k.b("Missing argument. Make sure to call mount() with a valid DOM element or selector.");if("string"==typeof e){var n=document.querySelectorAll(e);if(n.length>1&&o._controller.warn("The selector you specified (".concat(e,") applies to ").concat(n.length," DOM elements that are currently on the page.\nThe Stripe Element will be mounted to the first one.")),!n.length)throw new k.b("The selector you specified (".concat(e,") applies to no DOM elements that are currently on the page.\nMake sure the element exists on the page before calling mount()."));t=n[0]}else{if(!e.appendChild)throw new k.b("Invalid DOM element. Make sure to call mount() with a valid DOM element or selector.");t=e}if("INPUT"===t.nodeName)throw new k.b("Stripe Elements must be mounted in a DOM element that\ncan contain child nodes. `input` elements are not permitted to have child\nnodes. Try using a `div` element instead.");t.children.length&&t!==document.body&&o._controller.warn("This Element will be mounted to a DOM element that contains child nodes."),o._mountToParent(t)})),o.update=x((function(e){return o._controller.report("update",{options:ar(e),element:o._componentName}),o._checkDestroyed(),o._implementation.update(e),Object(G.a)(o)})),o.focus=x((function(e){return o._checkDestroyed(),e&&e.preventDefault(),o._implementation.focus(),Object(G.a)(o)})),o.blur=x((function(){return o._checkDestroyed(),o._implementation.blur(),Object(G.a)(o)})),o.clear=x((function(){return o._checkDestroyed(),o._implementation.clear(),Object(G.a)(o)})),o.collapse=x((function(){if(o._checkDestroyed(),!o._implementation.collapse)throw new k.b("Collapse is not supported by the ".concat(o._componentName," Element."));return o._implementation.collapse(),Object(G.a)(o)})),o.show=x((function(){if(o._checkDestroyed(),!o._implementation.show)throw new k.b("show() is not supported by the ".concat(o._componentName," Element."));return o._implementation.show(),Object(G.a)(o)})),o.hide=x((function(){if(o._checkDestroyed(),!o._implementation.hide)throw new k.b("hide() is not supported by the ".concat(o._componentName," Element."));return o._implementation.hide(),Object(G.a)(o)})),o.addLineItem=x((function(e){if(o._checkDestroyed(),o._implementation.addLineItem)return o._implementation.addLineItem(e);throw new k.b("addLineItem() is not supported by the ".concat(o._componentName," Element."))})),o.cancelCheckout=x((function(e){if(o._checkDestroyed(),!o._implementation.cancelCheckout)throw new k.b("cancelCheckout() is not supported by the ".concat(o._componentName," Element."));return o._implementation.cancelCheckout(e),Object(G.a)(o)})),o.unmount=x((function(){return o._checkDestroyed(),o._unmount(),Object(G.a)(o)})),o.destroy=x((function(){return o._checkDestroyed(),o.unmount(),o._destroyed=!0,o._emitEvent("destroy"),Object(G.a)(o)})),o._getParent=function(){return o._parent},o._emitEvent=function(e,t){return"loaderror"!==e||o._hasRegisteredListener("loaderror")||o._controller.keyMode()!==He.a.test||console.error("Unhandled ".concat(o._componentName," Element loaderror"),t),o._emit(e,Object(s.a)({elementType:o._componentName},t))};var i=e.controller,c=e.componentName,u=e.groupId,d=e.locale,p=e.betas,f=e.mids;o._controller=i,o._componentName=c,o._destroyed=!1,o._mids=f;var m=document.createElement("div");return m.className=U.d,o._component=m,i.report("create",{options:ar(Object(s.a)({componentName:c,groupId:u,locale:d,betas:p},e.publicOptions)),element:c}),o._implementation=rr(o._componentName,{options:e,component:m,listenerRegistry:r,elementTimings:a,emitEvent:o._emitEvent,getParent:o._getParent,hasRegisteredListener:o._hasRegisteredListener,selfDestruct:function(){o.destroy()}}),o}return Object(d.a)(n,[{key:"_checkDestroyed",value:function(){if(this._destroyed)throw new k.b("This Element has already been destroyed. Please create a new one.")}},{key:"_isMounted",value:function(){return!!document.body&&document.body.contains(this._component)}},{key:"_unmount",value:function(){var e=this._component.parentElement;e&&e.removeChild(this._component),this._implementation.unmount(),this._parent=null}},{key:"_mountToParent",value:function(e){var t=this._component.parentElement,n=this._isMounted();if(e===t){if(n)return;this.unmount(),this._mountTo(e)}else if(t){if(n)throw new k.b("This Element is already mounted. Use `unmount()` to unmount the Element before re-mounting.");this.unmount(),this._mountTo(e)}else this._mountTo(e)}},{key:"_mountTo",value:function(e){for(this._parent=e;e.firstChild&&e!==document.body;)e.removeChild(e.firstChild);e.appendChild(this._component),this._controller.report("mount",{element:this._componentName}),this._implementation.mount()}}]),n}(Y),ir=function(e,t){e._controller.report("legacy_private_property_used",{prop:t,componentName:e._componentName})};["_autofilled","_classes","_complete","_empty","_fakeInput","_focused","_frame","_invalid","_lastBackgroundColor","_lastFontSize","_lastHeight","_lastPadding","_lastSubmittedAt","_listenerRegistry","_paymentRequest"].forEach((function(e){Object.defineProperty(or.prototype,e,{enumerable:!1,get:function(){return ir(this,e),this._implementation[e]}})}));["_formSubmit","_isIssuingDisplayElement"].forEach((function(e){Object.defineProperty(or.prototype,e,{enumerable:!1,writable:!1,value:function(){return ir(this,e),this._implementation[e]()}})}));var cr=or,sr=Object(m.y)({locale:Object(m.w)(m.B),appearance:Object(m.w)(m.t)}),ur=function e(t,n,r,a,o,i){var c=this;Object(l.a)(this,e),this.getElement=x((function(e){var t,n=(null!=(t=e)&&t.__elementType&&"string"==typeof t.__elementType&&"function"==typeof t?t.__elementType:null)||e;return H(n,c._betas),Object(w.a)(c._elements,(function(e){return e._componentName===n}))||null})),this.update=x((function(e){var t=Object(m.H)(sr,e||{},"elements.update()"),n=t.value;t.warnings.forEach((function(e){return c._controller.warn(e)}));var r=n.locale,a=n.appearance,o=void 0===a?void 0:a,i=Object(j.f)(r,c._betas);i&&c._controller.action.fetchLocale({locale:i}),(o||i)&&c._controller.action.updateElementsOptions({locale:i,appearance:o,groupId:c._id})})),this.create=B((function(e,t){var n=new at.a;!function(e,t,n){if(H(e,n),U.b[e].unique&&-1!==t.indexOf(e))throw new k.b("Can only create one Element of type ".concat(e,"."));var r=U.b[e].conflict,a=Object(w.i)(t,r);if(a.length){var o=a[0];throw new k.b("Cannot create an Element of type ".concat(e," after an Element of type ").concat(o," has already been created."))}}(e,c._elements.map((function(e){return e._componentName})),c._betas);var r=Object(s.a)(Object(s.a)(Object(s.a)({},t),c._commonOptions),{},{componentName:e,groupId:c._id}),a=(r.paymentRequest,Object(f.a)(r,["paymentRequest"])),o=(O.e||O.g)&&Object(g.j)(a).length>2e3,i=!!c._pendingFonts||o,l=new cr(Object(s.a)(Object(s.a)({publicOptions:t},c._commonOptions),{},{componentName:e,groupId:c._id,fonts:o?null:c._commonOptions.fonts,controller:c._controller,wait:i,mids:c._mids}),c._listenerRegistry,Object(s.a)(Object(s.a)({},c._timings),{},{createTimestamp:n}));return c._elements=[].concat(Object(u.a)(c._elements),[l]),l._on("destroy",(function(){c._elements=c._elements.filter((function(t){return t._componentName!==e}))})),o&&l._implementation.update({fonts:c._commonOptions.fonts}),l})),this.fetchUpdates=L((function(){if(c._commonOptions.clientSecret)return c._controller.action.fetchUpdates({clientSecret:c._commonOptions.clientSecret,customerOptions:c._customerOptions,locale:c._commonOptions.locale,groupId:c._id}).then((function(e){if("error"===(null==e?void 0:e.type)){var t=e.error,n=t.message,r=t.extra_fields;return(null==r?void 0:r.status)?{error:{message:n,status:r.status}}:{error:{message:n}}}return{}}));throw new k.b('In order to call fetchUpdates, you must pass a valid PaymentIntent or SetupIntent client secret when creating the Elements group.\n\n e.g. stripe.elements({clientSecret: "{{CLIENT_SECRET}}"})')}));var d=new at.a,p=Object(m.H)(function(e){var t={locale:Object(m.w)(m.B),fonts:Object(m.w)(Object(m.b)(m.t)),appearance:Object(m.w)(m.t),clientSecret:Object(m.w)(dn.d),loader:Object(m.w)(Object(m.u)("auto","always","never"))};return Object(j.d)(e,j.a.elements_customers_beta_1)?Object(m.y)(Object(s.a)(Object(s.a)({},t),{},{customerOptions:Object(m.w)(Object(m.y)({customer:m.B,ephemeralKey:m.B}))})):Object(m.y)(t)}(a),i||{},"elements()"),h=p.value;p.warnings.forEach((function(e){return t.warn(e)})),Object(v.p)(t.warn),t.report("elements",{options:h}),h.loader||(Object(j.d)(a,j.a.link_beta_3)?h.loader="auto":h.loader="never");var _=h.fonts,y=void 0===_?[]:_,E=h.locale,S=h.customerOptions,P=void 0===S?null:S,A=Object(f.a)(h,["fonts","locale","customerOptions"]);this._customerOptions=P;var I=h.appearance?h.appearance:{};this._elements=[],this._id=b("elements"),this._timings=Object(s.a)(Object(s.a)({},r),{},{groupCreateTimestamp:d}),this._controller=t,this._betas=a,this._listenerRegistry=n,this._mids=o;var C=Object(j.f)(E,a);this._controller.action.fetchLocale({locale:C||"auto"});var T=y.filter((function(e){return!e.cssSrc||"string"!=typeof e.cssSrc})).map((function(e){return Object(s.a)(Object(s.a)({},e),{},{__resolveFontRelativeTo:window.location.href})})),M=y.map((function(e){return e.cssSrc})).reduce((function(e,t){return"string"==typeof t?[].concat(Object(u.a)(e),[t]):e}),[]).map((function(e){return Object(g.d)(e)?e:Object(g.h)(window.location.href,e)}));(this._pendingFonts=M.length,Object(j.d)(a,j.a.payment_element_beta_1)&&!A.clientSecret||t.action.setupStoreForElementsGroup({clientSecret:A.clientSecret,customerOptions:P,locale:E,appearance:I,groupId:this._id}),this._commonOptions=Object(s.a)(Object(s.a)({},A),{},{betas:a,appearance:I,locale:C,fonts:T}),M.forEach((function(e){if("string"==typeof e){var t=new at.a;N(e).then((function(n){c._controller.report("font.loaded",{load_time:t.getElapsedTime(),font_count:n.length,css_src:e});var r=n.map((function(t){return Object(s.a)(Object(s.a)({},t),{},{__resolveFontRelativeTo:e})}));c._controller.action.updateCSSFonts({fonts:r,groupId:c._id}),c._commonOptions=Object(s.a)(Object(s.a)({},c._commonOptions),{},{fonts:[].concat(Object(u.a)(c._commonOptions.fonts?c._commonOptions.fonts:[]),Object(u.a)(r))})})).catch((function(n){c._controller.report("error.font.not_loaded",{load_time:t.getElapsedTime(),message:n&&n.message&&n.message,css_src:e}),c._controller.warn("Failed to load CSS file at ".concat(e,"."))}))}})),"never"!==h.loader)&&function(e){return It||((It=e.createHiddenFrame(Ye.a.LOADER_UI_APP,{}))._on("generate-loader-ui",(function(e){It.send({action:"generate-loader-ui",payload:{data:e}})})),It._on("get-element-loader-ui",(function(e){It.send({action:"get-element-loader-ui",payload:{}})})),It)}(t)._emit("generate-loader-ui",{rawAppearanceConfig:I});return this},lr=function(e,t,n,r,a,o,i){return new it({controller:e,authentication:t,mids:n,rawOptions:r,betas:a,queryStrategyOverride:o,listenerRegistry:i})},dr=Object(m.y)({name:Object(m.u)("react-stripe-js","stripe-js","react-stripe-elements"),version:Object(m.q)(m.B),startTime:Object(m.w)(m.r)}),pr=Object(m.h)({name:Object(m.z)(1,30),partner_id:Object(m.w)(Object(m.A)("pp_partner_")),version:Object(m.w)(Object(m.z)(5,15)),url:Object(m.w)(Object(m.z)(4,60))}),fr=n(11),mr={border:"none",margin:"0",padding:"0",width:"1px","min-width":"100%",overflow:"hidden",display:"block","user-select":"none",transform:"translate(0)","color-scheme":"only light"},hr=function(e){Object(z.a)(n,e);var t=Object(K.a)(n);function n(e){var r;return Object(l.a)(this,n),r=t.call(this,e),O.j&&r._listenerRegistry.addEventListener(document,"transitionstart",(function(e){switch(e.propertyName){case"opacity":case"transform":case"visibility":var t=e.target;r._isMounted()&&t.contains(r._iframe)&&r._forceRepaint()}}),{passive:!0}),r}return Object(d.a)(n,[{key:"update",value:function(e){this.send({action:"stripe-user-update",payload:e})}},{key:"updateStyle",value:function(e){var t=this;Object.keys(e).forEach((function(n){t._iframe.style[n]=e[n]}))}},{key:"focus",value:function(){this.loaded&&(O.j?this._iframe.focus():this.send({action:"stripe-user-focus",payload:{}}))}},{key:"blur",value:function(){this.loaded&&(this._iframe.contentWindow.blur(),this._iframe.blur(),document.activeElement===this._iframe&&(window.focus(),document.activeElement&&"function"==typeof document.activeElement.blur&&document.activeElement.blur()))}},{key:"clear",value:function(){this.send({action:"stripe-user-clear",payload:{}})}},{key:"collapse",value:function(){this.send({action:"stripe-user-collapse",payload:{}})}},{key:"show",value:function(){this.send({action:"stripe-user-show",payload:{}})}},{key:"hide",value:function(){this.send({action:"stripe-user-hide",payload:{}})}},{key:"addLineItem",value:function(e){this.send({action:"stripe-user-add-line-item",payload:e})}},{key:"cancelCheckout",value:function(e){this.send({action:"stripe-user-cancel-checkout",payload:{errorMessage:e}})}},{key:"_createIFrame",value:function(e,t,r){var a=At(Object(Pt.a)(n.prototype),"_createIFrame",this).call(this,e,t,r);return a.setAttribute("title","Secure payment input frame"),Object(v.l)(a,mr),a}},{key:"_forceRepaint",value:function(){var e=this._iframe,t=e.style.display;e.style.display="none";var n=e.offsetHeight;return e.style.display=t,n}}]),n}(Ct),_r={position:"absolute",left:"0",top:"0",height:"100%",width:"100%"},br=function(e){Object(z.a)(n,e);var t=Object(K.a)(n);function n(e){var r,a,o,i=e.type,c=e.controllerId,s=e.listenerRegistry,u=e.options;return Object(l.a)(this,n),(o=t.call(this,{type:i,controllerId:c,listenerRegistry:s,appParams:u}))._autoMount=function(){o.appendTo(o._backdrop.domElement),o._backdrop.mount()},o.show=function(){o._backdrop.show(),Object(v.l)(o._iframe,_r),o.isVisible=!0},o.fadeInBackdrop=function(){o._backdrop.fadeIn()},o._backdropFadeoutPromise=null,o.fadeOutBackdrop=function(){return o._backdropFadeoutPromise||(o._backdropFadeoutPromise=o._backdrop.fadeOut()),o._backdropFadeoutPromise.then((function(){o._backdropFadeoutPromise=null}))},o.destroy=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=o.fadeOutBackdrop().then((function(){o._backdrop.unmount(),e||At((r=Object(G.a)(o),Object(Pt.a)(n.prototype)),"destroy",r).call(r)}));return e&&At((a=Object(G.a)(o),Object(Pt.a)(n.prototype)),"destroy",a).call(a),o.isVisible=!1,t},o._backdrop=new Je({lockScrolling:!0,lockFocus:!0,lockFocusOn:o._iframe,listenerRegistry:s}),o._autoMount(),o.isVisible=!1,o}return n}(Ct),yr={display:"block",position:"absolute","z-index":"1000",width:"1px","min-width":"100%",margin:"2px 0 0 0",padding:"0",border:"none",overflow:"hidden"},vr=function(e){Object(z.a)(n,e);var t=Object(K.a)(n);function n(){return Object(l.a)(this,n),t.apply(this,arguments)}return Object(d.a)(n,[{key:"updateStyle",value:function(e){var t=this;Object.keys(e).forEach((function(n){t._iframe.style[n]=e[n]}))}},{key:"update",value:function(e){this.send({action:"stripe-user-update",payload:e})}},{key:"_createIFrame",value:function(e,t,r){var a=At(Object(Pt.a)(n.prototype),"_createIFrame",this).call(this,e,t,r&&"object"==typeof r?Object(s.a)(Object(s.a)({},r),{},{isSecondaryFrame:!0}):r);return Object(v.l)(a,yr),a.style.height="0",a}}]),n}(Ct),Or=!1,gr=function(e){Or||"null"===(null!=e?e:window.origin)&&(Or=!0,console.error("Stripe.js requires 'allow-same-origin' if sandboxed."))},jr=n(22),wr={attachLinkAccountSessionForPayment:null,attachLinkAccountSessionForSetup:null,authenticate3DS2:null,cancelCardImageVerificationChallenge:null,cancelPaymentIntentSource:null,cancelSetupIntentSource:null,completeLinkAccountSessionElements:null,completeWalletConfirm:null,confirmPaymentIntent:null,confirmReturnIntent:null,confirmSetupIntent:null,createAcssDebitSession:null,createApplePaySession:null,createBankPaymentDetails:null,createConsumerPaymentDetails:null,createEphemeralKeyNonce:null,createPaymentMethodWithData:null,createPaymentMethodWithElement:null,createPaymentPage:null,createPaymentPageWithSession:null,createRadarSession:null,createSourceWithData:null,createSourceWithElement:null,fetchingWallets:null,fetchLocale:null,fetchUpdates:null,localizeError:null,loginWithConsumerInfo:null,lookupLocale:null,refreshPaymentIntent:null,refreshSetupIntent:null,retrieveIssuingCard:null,retrieveIssuingCardWithoutNonce:null,retrieveOrder:null,retrievePaymentIntent:null,retrieveSetupIntent:null,retrieveSource:null,fetchCartSession:null,setupStoreForElementsGroup:null,submitOrder:null,tokenizeCvcUpdate:null,tokenizeWithData:null,tokenizeWithElement:null,updateCSSFonts:null,updateElementsOptions:null,updateOrder:null,updatePaymentIntent:null,verifyCardImageVerificationChallenge:null,verifyMicrodepositsForPayment:null,verifyMicrodepositsForSetup:null,retrieveCardNetworks:null,isCardMetadataRequired:null},kr=function(){function e(){var t=this;Object(l.a)(this,e),this._state="pending",this._state="pending",this.promise=new E.a((function(e,n){t._resolve=e,t._reject=n})),this.promise.then((function(){t._state="resolved"}),(function(){t._state="rejected"}))}return Object(d.a)(e,[{key:"resolve",value:function(e){this._resolve(e)}},{key:"reject",value:function(e){this._reject(e)}},{key:"isResolved",value:function(){return"resolved"===this._state}},{key:"isRejected",value:function(){return"rejected"===this._state}},{key:"isPending",value:function(){return"pending"===this._state}}]),e}(),Er=!1,Sr={},Pr=function(e,t){return document.activeElement===e._iframe||e._iframe.parentElement&&document.activeElement===t},Ar=function(e){return"object"==typeof e&&null!==e&&"IntegrationError"===e.name?new k.b("string"==typeof e.message?e.message:""):e},Ir=function(){function e(t){var n=this;Object(l.a)(this,e),this._sendCaReq=function(e,t){var r=b(e),a=new kr;return n._requests[r]=a,n._controllerFrame.send({action:"stripe-controller-action-request",payload:{nonce:r,actionName:e,request:t}}),a.promise},this.keyMode=function(){return Object(He.c)(n._apiKey)},this.action=Object.keys(wr).reduce((function(e,t){return Object(s.a)(Object(s.a)({},e),{},Object(p.a)({},t,(function(e){return n._sendCaReq(t,e)})))}),{}),this.createElementFrame=function(e,t,r,a){var o=n._betas,i=new hr({type:e,betas:o,controllerId:n._id,listenerRegistry:n._listenerRegistry,appParams:Object(s.a)(Object(s.a)({},a),{},{componentName:t,keyMode:Object(He.c)(n._apiKey),apiKey:n._apiKey})});return n._setupFrame(i,e,r)},this.createSecondaryElementFrame=function(e,t,r,a,o){var i=n._betas,c=new vr({type:e,betas:i,controllerId:n._id,listenerRegistry:n._listenerRegistry,appParams:Object(s.a)(Object(s.a)({},o),{},{componentName:t,primaryElementType:r,keyMode:Object(He.c)(n._apiKey)})});return n._setupFrame(c,e,a)},this.createHiddenFrame=function(e,t){var r=new Tt({type:e,betas:n._betas,controllerId:n._id,listenerRegistry:n._listenerRegistry,appParams:t});return n._setupFrame(r,e)},this.getCredentials=function(){return{publishableKey:n._apiKey,stripeAccount:n._stripeAccount,apiVersion:n._apiVersion}},this.createLightboxFrame=function(e){var t=e.type,r=e.options,a=new br({type:t,controllerId:n._id,listenerRegistry:n._listenerRegistry,options:Object(s.a)(Object(s.a)({},r),{},{betas:n._betas})}),o="LINK_AUTOFILL_MODAL"===e.type?e.groupId:null;return n._setupFrame(a,t,o)},this._setupFrame=function(e,t,r){return n._frames[e.id]=e,n._controllerFrame.sendPersistent({action:"stripe-user-createframe",payload:{newFrameId:e.id,frameType:t,groupId:r}}),e._on("unload",(function(){n._controllerFrame.sendPersistent({action:"stripe-frame-unload",payload:{unloadedFrameId:e.id}})})),e._on("destroy",(function(){delete n._frames[e.id],n._controllerFrame.sendPersistent({action:"stripe-frame-destroy",payload:{destroyedFrameId:e.id}})})),e._on("load",(function(){n._controllerFrame.sendPersistent({action:"stripe-frame-load",payload:{loadedFrameId:e.id}}),n._controllerFrame.loaded&&e.send({action:"stripe-controller-load",payload:{}})})),e},this.report=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};n._controllerFrame.send({action:"stripe-controller-report",payload:{event:e,data:t}})},this.warn=function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];n._controllerFrame.send({action:"stripe-controller-warn",payload:{args:t}})},this.controllerFor=function(){return"outer"},this._setupPostMessage=function(){n._listenerRegistry.addEventListener(window,"message",(function(e){var t=e.data,r=e.origin,a=e.source,o=Object(Ye.e)(t);o&&(Object(g.e)(C.k,r)?n._handleMessage(o,a):gr(r))}))},this._nodeIsKnownElement=function(e){return e&&"IFRAME"===e.nodeName&&!!n._frames[e.getAttribute("name")||""]},this._handleMessage=function(e,t){var r=e.controllerId,a=e.frameId,o=e.message,i=n._frames[a];if(r===n._id)switch(o.action){case"stripe-frame-event":var c=o.payload.event,u=o.payload.data;if(i){if(O.i){var l=i._iframe.parentElement,d=l&&l.querySelector(".".concat(pt.c));if("focus"===c&&!Er&&d&&!Pr(i,d)&&!Sr[a]){d.focus(),Er=!0,Sr[a]=!0,setTimeout((function(){Sr[a]=!1}),1e3);break}if("blur"===c&&Er){Er=!1;break}"blur"===c&&O.k&&setTimeout((function(){var e=document.activeElement;if(e&&!Pr(i,d)&&!Object(v.h)(e)&&!n._nodeIsKnownElement(e)){var t=l&&l.querySelector(".".concat(pt.d));if(t){var r=t;r.disabled=!1,r.focus(),r.blur(),r.disabled=!0}e.focus()}}),400)}"load"===c&&(u=Object(s.a)(Object(s.a)({},u),{},{source:t})),i._emit(c,u)}break;case"stripe-frame-action-response":i&&i.resolve(o.payload.nonce,o.payload.faRes);break;case"stripe-frame-action-error":i&&i.reject(o.payload.nonce,Ar(o.payload.faErr));break;case"stripe-frame-error":throw new k.b(o.payload.message);case"stripe-integration-error":i&&i._emit("__privateIntegrationError",{message:o.payload.message});break;case"stripe-controller-load":n._controllerFrame._emit("load",{source:t}),n._loadCount++,Object.keys(n._frames).forEach((function(e){return n._frames[e].send({action:"stripe-controller-load",payload:{}})}));var p=n._createTimestamp.getAsPosixTime(),f={stripeJsLoad:n._stripeJsLoadTimestamp.getAsPosixTime(),stripeCreate:p,create:p};n._mountTimestamp&&(f.mount=n._mountTimestamp.getAsPosixTime()),n._controllerFrame.send({action:"stripe-user-mount",payload:{timestamps:f,loadCount:n._loadCount,matchFrame:t===n._controllerFrame._iframe.contentWindow,rtl:!1,paymentRequestButtonType:null}});break;case"stripe-controller-action-response":n._requests[o.payload.nonce]&&n._requests[o.payload.nonce].resolve(o.payload.response);break;case"stripe-controller-action-error":n._requests[o.payload.nonce]&&n._requests[o.payload.nonce].reject(Ar(o.payload.error));break;case"stripe-api-call":Gt();break;case"show-wallet":var m=n._frames[o.payload.frameId];m&&m._emit("show-wallet",o.payload.wallet);break;case"show-bacs-mandate-confirmation":var h=n.createLightboxFrame({type:Ye.a.BACS_MANDATE_CONFIRMATION_APP,options:{locale:n._locale||"en"}});h._on("load",(function(){h.show(),h.fadeInBackdrop()})),h._once("request-close",(function(){Object(jr.a)(h).then((function(){}))}))}};var r=t.listenerRegistry,a=t.stripeJsLoadTimestamp,o=t.stripeCreateTimestamp,i=t.onFirstLoad,c=t.betas,u=Object(f.a)(t,["listenerRegistry","stripeJsLoadTimestamp","stripeCreateTimestamp","onFirstLoad","betas"]),d=u.apiKey,m=u.apiVersion,h=u.stripeAccount,_=u.stripeJsId,y=u.locale;this._id=b("__privateStripeController"),this._stripeJsId=_,this._apiKey=d,this._apiVersion=m,this._stripeAccount=h,this._listenerRegistry=r,this._betas=c,this._locale=y,this._controllerFrame=new Nt({type:Ye.a.CONTROLLER,betas:c,controllerId:this._id,listenerRegistry:r,appParams:Object(s.a)(Object(s.a)({},u),{},{betas:c,stripeJsLoadTime:a.getAsPosixTime()})}),this._stripeJsLoadTimestamp=a,this._createTimestamp=o,this._loadCount=0;var j=function(e){var t=e.anchor;n._mountTimestamp=new at.a,t!==document.body&&n.report("controller.mount.custom_container")};this._controllerFrame._isMounted()?j({anchor:this._controllerFrame._iframe.parentElement}):this._controllerFrame._once("mount",j),i&&this._controllerFrame._once("load",i),this._frames={},this._requests={},this._setupPostMessage(),this._handleMessage=B(this._handleMessage,this),this.action.fetchLocale({locale:y||"auto"})}return Object(d.a)(e,[{key:"registerWrapper",value:function(e){this._controllerFrame.send({action:"stripe-wrapper-register",payload:{stripeWrapperLibrary:e}})}},{key:"registerAppInfo",value:function(e){this._controllerFrame.send({action:"stripe-app-info-register",payload:{wrapperLibrary:e}})}}]),e}(),Cr=["elements","createToken","createPaymentMethod"],Tr=["elements","createSource","createToken","createPaymentMethod"],Nr=function(){function e(t){var n=this;Object(l.a)(this,e),this._gets=[],this._didDetect=!1,this._onDetection=function(e){n._didDetect=!0,t(e)},window.Stripe&&window.Stripe.__cachedInstances&&this._onDetection("react-stripe-elements")}return Object(d.a)(e,[{key:"got",value:function(e){this._didDetect||("elements"===e?this._gets=["elements"]:this._gets.push(e),this._checkForWrapper())}},{key:"called",value:function(e){this._didDetect||(this._gets=this._gets.filter((function(t){return t!==e})))}},{key:"_checkForWrapper",value:function(){Object(w.c)(this._gets,Cr)?this._onDetection("react-stripe-js"):Object(w.c)(this._gets,Tr)&&this._onDetection("react-stripe-elements")}}]),e}(),Mr=function(e){if(!e||"object"!=typeof e)return null;var t=e.type;return{type:"string"==typeof t?t:null,data:Object(f.a)(e,["type"])}},Rr=function(e){switch(e.type){case"object":return{source:e.object};case"error":return{error:e.error};default:return Object(m.a)(e)}},xr={source:Object(m.y)({id:Object(m.A)("src_"),client_secret:Object(m.A)("src_client_secret_")})},Br=Object(m.y)(xr),Lr=function(e){switch(e.type){case"object":return{paymentMethod:e.object};case"error":return{error:e.error};default:return Object(m.a)(e)}},Dr=function(e,t,n,r,a){if("string"==typeof n)return function(e,t,n,r,a){var o=Object(m.c)(r),i=Mr(o?a:r),c=i||{type:null,data:{}},s=c.type,u=c.data;if(s&&n!==s)return E.a.reject(new k.b("The type supplied in payment_method_data is not consistent."));if(o){var l=o._implementation._frame.id,d=o._componentName;return e.action.createPaymentMethodWithElement({frameId:l,elementName:d,type:n,paymentMethodData:u,mids:t}).then(Lr)}return i?e.action.createPaymentMethodWithData({elementName:null,type:n,paymentMethodData:u,mids:t}).then(Lr):E.a.reject(new k.b("Please provide either an Element or PaymentMethod creation parameters to createPaymentMethod."))}(e,t,n,r,a);try{var o=(d=n,Object(m.H)(Object(un.e)(null),d,"createPaymentMethod").value),i=o.element,c=o.type,s=o.data;if(i){var u=i._implementation._frame.id,l=i._componentName;return e.action.createPaymentMethodWithElement({frameId:u,elementName:l,type:c,paymentMethodData:s,mids:t}).then(Lr)}return e.action.createPaymentMethodWithData({elementName:null,type:c,paymentMethodData:s,mids:t}).then(Lr)}catch(e){return E.a.reject(e)}var d},qr=n(43),Fr=n(10),Ur=n(42),Hr=n(59),Gr={clientSecret:Object(m.w)(m.B),params:Object(m.w)(m.t),elements:Object(m.w)(m.t)},zr=function(e,t){var n=e.rawSecret,r=e.rawElements,a=e.validatedUpdateParams;if(function(e,t){var n=e.rawSecret,r=e.rawElements;if(n&&r)throw new k.b("".concat(t,": expected either `elements` or `clientSecret`, but not both."));if(!n&&!r)throw new k.b("".concat(t,": expected either `elements` or `clientSecret`, but got neither."))}({rawSecret:n,rawElements:r},t),n){if((null==a?void 0:a.payment_method)&&(null==a?void 0:a.payment_method_data))throw new k.b("".concat(t,": Expected either `payment_method` or `payment_method_data`, but not both."));return{type:"clientSecret",clientSecret:n}}var o=Object(m.d)(r);if(!o)throw new k.b("Invalid value for ".concat(t,": elements should be an Elements group. You specified: ").concat(typeof r,"."));return{type:"elements",elements:o}},Kr=function(e,t,n,r,a){var o,i,c=function(e){var t=e.rawUpdateData,n=e.controller,r=e.errorMessageMethodName,a=Object(m.H)(Object(m.y)(Gr),t,r),o=a.value,i=o.elements,c=void 0===i?void 0:i,s=o.params,u=o.clientSecret,l=a.warnings,d=Object(m.H)(Object(m.w)(Object(m.y)({payment_method:Object(m.w)(m.B),payment_method_data:Object(m.w)(m.t),payment_method_options:Object(m.w)(m.t),setup_future_usage:Object(m.w)(m.e)})),s,r,{path:["params"]}).value,p=zr({rawSecret:u,rawElements:c,validatedUpdateParams:d},r);return l.forEach((function(e){return n.warn(e)})),{validatedUpdateParams:d,rawUpdateParams:s,validatedParams:p}}({rawUpdateData:n,controller:e,errorMessageMethodName:a}),u=c.validatedParams,l=c.validatedUpdateParams,d=c.rawUpdateParams,p=null!=d?d:{},h=(p.payment_method,p.payment_method_data,p.payment_method_options,Object(f.a)(p,["payment_method","payment_method_data","payment_method_options"]));return"elements"===u.type?{mode:{tag:"elements",groupId:u.elements._id,data:null!==(o=null==l?void 0:l.payment_method_data)&&void 0!==o?o:{},options:null!==(i=null==l?void 0:l.payment_method_options)&&void 0!==i?i:{}},otherParams:h,expectedType:null,mids:t,options:null}:function(e){var t,n=e.validatedParams,r=e.validatedConfirmParams,a=e.otherParams,o=e.intentType,i=e.mids,c=null!=r?r:{},u=c.payment_method_data,l=c.payment_method,d=c.payment_method_options,p="payment"===o?Object(Bn.k)(n.clientSecret,"confirmPayment"):Object(Bn.l)(n.clientSecret,"confirmSetup"),f=Object(Bn.h)({payment_method:u}),m={};return"paymentMethod"===(t=u&&f?{intentSecret:p,tag:"paymentMethod-from-data",type:f,data:u,options:null!=d?d:{}}:l?{intentSecret:p,tag:"paymentMethod",paymentMethod:l,options:null!=d?d:{}}:{intentSecret:p,tag:"none"}).tag&&(m={mandate_data:{customer_acceptance:{type:"online",online:{infer_from_client:!0}}}}),{mids:i,mode:t,expectedType:f,otherParams:Object(s.a)(Object(s.a)({},m),a),options:{handleActions:!1}}}({validatedParams:u,validatedConfirmParams:l,otherParams:h,intentType:r,mids:t})},Yr=function(e,t){return function(n,r,a,o,i){var c=Object(Bn.k)(a,e),u=Object(Bn.j)(t,e,o,c),l=Object(Bn.i)(e,i),d="none"===u.mode.tag,p=n.action.confirmPaymentIntent(Object(s.a)(Object(s.a)({},u),{},{expectedType:t,options:l,mids:r}));return l.handleActions?p.then(Object(Ur.b)(n,d,!1,u.otherParams.expand)):p.then(Fr.g)}},Wr=Yr("confirmAcssDebitPayment",fr.b.acss_debit),Vr=Yr("confirmAffirmPayment",fr.b.affirm),Jr=Yr("confirmAfterpayClearpayPayment",fr.b.afterpay_clearpay),Xr=Yr("confirmAuBecsDebitPayment",fr.b.au_becs_debit),$r=Yr("confirmBacsDebitPayment",fr.b.bacs_debit),Qr=Yr("confirmBancontactPayment",fr.b.bancontact),Zr=Yr("confirmBoletoPayment",fr.b.boleto),ea=Yr("confirmCardPayment",fr.b.card),ta=Yr("confirmEpsPayment",fr.b.eps),na=Yr("confirmFpxPayment",fr.b.fpx),ra=Yr("confirmGiropayPayment",fr.b.giropay),aa=Yr("confirmGrabPayPayment",fr.b.grabpay),oa=Yr("confirmIdealPayment",fr.b.ideal),ia=Yr("confirmKlarnaPayment",fr.b.klarna),ca=Yr("confirmKonbiniPayment",fr.b.konbini),sa=Yr("confirmOxxoPayment",fr.b.oxxo),ua=Yr("confirmAlipayPayment",fr.b.alipay),la=Yr("confirmP24Payment",fr.b.p24),da=Yr("confirmPayByBankPayment",fr.b.pay_by_bank),pa=Yr("confirmPayPalPayment",fr.b.paypal),fa=Yr("confirmSepaDebitPayment",fr.b.sepa_debit),ma=Yr("confirmSofortPayment",fr.b.sofort),ha=Yr("confirmIdBankTransferPayment",fr.b.id_bank_transfer),_a=Yr("confirmUpiPayment",fr.b.upi),ba=Yr("confirmUsBankAccountPayment",fr.b.us_bank_account),ya=Yr("confirmNzBankAccountPayment",fr.b.nz_bank_account),va=Yr("confirmBlikPayment",fr.b.blik),Oa=function(e,t,n,r,a){return Yr("confirmCustomerBalancePayment",fr.b.customer_balance)(e,t,n,r,a)},ga=function(e,t,n,r,a){if(a&&!0===a.handleActions)throw new k.b("Expected option `handleActions` to be `false`.");var o=Object(s.a)(Object(s.a)({},r),{},{payment_method:Object(s.a)({},r&&r.payment_method||{}),payment_method_options:Object(s.a)(Object(s.a)({},r&&r.payment_method_options||{}),{},{wechat_pay:Object(s.a)(Object(s.a)({},r&&r.payment_method_options&&r.payment_method_options.wechat_pay||{}),{},{client:"web"})})});return Yr("confirmWechatPayPayment",fr.b.wechat_pay)(e,t,n,o,a)},ja=function(e,t,n,r,a){if(!r||!r.payment_method_options||!r.payment_method_options.wechat_pay||"web"!==r.payment_method_options.wechat_pay.client&&"mobile_web"!==r.payment_method_options.wechat_pay.client)throw new k.b("Expected client value `web` or `mobile_web` in payment_method_options.");var o={};"string"==typeof r.payment_method&&(o=r.payment_method),"object"==typeof r.payment_method&&(o=Object(s.a)({},r.payment_method||{}));var i=Object(s.a)(Object(s.a)({},r),{},{payment_method:o,payment_method_options:Object(s.a)(Object(s.a)({},r&&r.payment_method_options||{}),{},{wechat_pay:Object(s.a)({},r&&r.payment_method_options&&r.payment_method_options.wechat_pay||{})})});return Yr("confirmWechatPayPayment",fr.b.wechat_pay)(e,t,n,i,a)},wa=Yr("confirmPayNowPayment",fr.b.paynow),ka=Yr("confirmPixPayment",fr.b.pix),Ea=Yr("confirmPromptPayPayment",fr.b.promptpay),Sa=Yr("confirmQrisPayment",fr.b.qris),Pa=Yr("confirmNetbankingPayment",fr.b.netbanking),Aa=function(e,t,n,r){var a=Object(Bn.k)(n,"updatePaymentIntent"),o=Object(Bn.h)(r),i=Object(Bn.j)(o,"updatePaymentIntent",r,a);return e.action.updatePaymentIntent(Object(s.a)(Object(s.a)({},i),{},{expectedType:o,mids:t,options:null})).then(Fr.g)},Ia=function(e,t,n){var r=Object(Bn.k)(t,"verifyMicrodepositsForPayment"),a=Object(m.H)(m.t,n,"stripe.verifyMicrodepositsForPayment");return e.action.verifyMicrodepositsForPayment({intentSecret:r,data:a.value}).then(Fr.g)},Ca=function(e,t,n){var r=Object(Bn.k)(t,"collectUsBankAccountForPayment"),a=Object(m.H)(Object(un.b)("us_bank_account"),n,"stripe.collectUsBankAccountForPayment").value,o=a.paymentMethodData,i=a.otherParams;return Nn(r.clientSecret,r.id,e,o).then((function(t){return t.error?e.action.localizeError(t.error).then((function(e){return E.a.resolve({error:e})})):t.linkAccountSession.paymentAccount?e.action.attachLinkAccountSessionForPayment({intentSecret:r,linkAccountSessionId:t.linkAccountSession.id,expandParam:i.expand}).then((function(e){return Object(Fr.g)(e)})):e.action.retrievePaymentIntent({intentSecret:r,hosted:!1}).then(Fr.g)}))},Ta=function(e,t){var n=Object(m.H)(Object(un.a)(un.h),t,"stripe.collectBankAccountForPayment").value,r=n.clientSecret,a=n.paymentMethodData,o=n.otherParams;return Nn(r.clientSecret,r.id,e,a).then((function(t){return t.error?e.action.localizeError(t.error).then((function(e){return E.a.resolve({error:e})})):t.linkAccountSession.paymentAccount?e.action.attachLinkAccountSessionForPayment({intentSecret:r,linkAccountSessionId:t.linkAccountSession.id,expandParam:o.expand}).then((function(e){return Object(Fr.g)(e)})):e.action.retrievePaymentIntent({intentSecret:r,hosted:!1}).then(Fr.g)}))},Na=function(e,t){var n=Object(Bn.k)(e,"handleCardAction");return t.action.retrievePaymentIntent({intentSecret:n,hosted:!1}).then((function(e){var n=Object(Ur.a)(e);switch(n.type){case"error":return E.a.resolve(Object(Fr.g)(e));case"object":var r=n.object;if(Object(Fr.f)(r.status)){if("manual"!==r.confirmation_method)throw new k.b("handleCardAction: The PaymentIntent supplied does not require manual server-side confirmation. Please use confirmCardPayment instead to complete the payment.");return Object(Ur.c)(t,r,n.locale,!1)}throw new k.b("handleCardAction: The PaymentIntent supplied is not in the requires_action state.");default:return Object(m.a)(n)}}))},Ma=Bn.m,Ra=function(e){var t=e.mode;return!("paymentMethod-from-data"===t.tag&&t.data.acss_debit)},xa=function(e){return null!==e&&"object"==typeof e&&!0===e.skipMandate},Ba=function(e){return null!==e&&"object"==typeof e&&!!e.shouldCreatePaymentMethod},La=function(e){var t=e.controller,n=e.shouldCreatePaymentMethod,r=e.intentSecret,a=e.mode,o=e.confirmIntentData;return t.action.createAcssDebitSession({intentSecret:r,shouldCreatePaymentMethod:n,confirmIntentData:o,mode:a}).then((function(e){if("error"===e.type)return{type:"error",error:e.error};var n=Object(jr.b)(t,{url:Object(Ye.g)(e.object.url),size:"400x600",locale:e.locale,frameTitle:"acss.dialog_frame_title",useLightboxHostedCloseButton:!1});return new E.a((function(e){n._on("request-close",(function(){Object(jr.a)(n).then((function(){return t.action.localizeError(Bn.c)})).then((function(t){e({type:"error",error:t})}))})),n._on("session-complete",(function(t){var r=t.paymentMethod;Object(jr.a)(n).then((function(){e({type:"success",paymentMethod:r})}))}))}))}))},Da=function(e,t,n,r,a){var o="confirmAcssDebitPayment",i=fr.b.acss_debit,c=Object(Bn.k)(n,o),u=Object(Bn.j)(i,o,r,c),l=Ba(a);return Ma(a,o),xa(a)||!Ra(u)?e.action.confirmPaymentIntent(Object(s.a)(Object(s.a)({},u),{},{expectedType:i,options:{handleActions:!1},mids:t})).then(Fr.g):La({controller:e,shouldCreatePaymentMethod:l,intentSecret:c,mode:"payment",confirmIntentData:u}).then((function(n){switch(n.type){case"error":return{error:n.error};case"success":return e.action.confirmPaymentIntent({mode:{tag:"paymentMethod",paymentMethod:n.paymentMethod,options:u.mode.options||{},intentSecret:c},otherParams:u.otherParams,expectedType:i,options:{handleActions:!1},mids:t}).then(Fr.g);default:return Object(m.a)(n.type)}}))},qa=function(e,t,n,r,a){var o="confirmAcssDebitSetup",i=fr.b.acss_debit,c=Object(Bn.l)(n,o),u=Object(Bn.j)(i,o,r,c),l=Ba(a);return Ma(a,o),xa(a)||!Ra(u)?e.action.confirmSetupIntent(Object(s.a)(Object(s.a)({},u),{},{expectedType:i,options:{handleActions:!1},mids:t})).then(Fr.h):La({controller:e,shouldCreatePaymentMethod:l,intentSecret:c,mode:"setup",confirmIntentData:u}).then((function(n){switch(n.type){case"error":return{error:n.error};case"success":return e.action.confirmSetupIntent({mode:{tag:"paymentMethod",paymentMethod:n.paymentMethod,options:u.mode.options||{},intentSecret:c},otherParams:u.otherParams,expectedType:i,options:{handleActions:!1},mids:t}).then(Fr.h);default:return Object(m.a)(n.type)}}))},Fa={type:"validation_error",code:"errors.code.unexpected"},Ua={type:"validation_error",code:"errors.code.incomplete_payment_details"},Ha=function(e,t,n,r,a){var o="confirmInstantDebitsPilotPayment",i=Object(Bn.k)(n,o),c=Object(Bn.i)(o,a),u=Object(Bn.j)(null,o,r,i),l=e.createLightboxFrame({type:Ye.a.INSTANT_DEBITS_APP,options:{intentId:i.id,clientSecret:i.clientSecret,apiKey:e._apiKey,returnOnConfirm:!1===c.handleActions}});return l.show(),l.fadeInBackdrop(),new E.a((function(n){var r=function(e){l.fadeOutBackdrop().then((function(){n(e)}))};l._once("cancel",(function(){l.fadeOutBackdrop(),e.action.localizeError(Ua).then((function(e){r({error:e})}))})),l._on("instant-debits-fetch-payment-intent",(function(){e.action.retrievePaymentIntent({intentSecret:i,hosted:!1}).then((function(t){if(t.object){var a=t.object;l.send({action:"stripe-instant-debits-received-payment-intent",payload:{paymentIntent:a}}),!1===c.handleActions&&setTimeout((function(){l.fadeOutBackdrop(),r(Object(Fr.g)(t))}),2e3)}else{var o=t.error;e.action.localizeError(o).then((function(e){n({error:e})}))}}))})),l._on("instant-debits-attempt-payment",(function(n){e.action.confirmPaymentIntent(Object(s.a)(Object(s.a)({},u),{},{mode:{tag:"none",intentSecret:i},expectedType:null,options:c,mids:t})).then((function(t){t.object?(l.send({action:"stripe-instant-debits-successful-payment-intent",payload:{paymentIntent:t.object}}),setTimeout((function(){r(Object(Fr.g)(t))}),2e3)):e.action.localizeError(t.error).then((function(e){r({error:e})}))}))})),l._on("instant-debits-flow-error",(function(t){e.action.localizeError(Fa).then((function(e){r({error:e})}))}))}))},Ga=n(60),za=n(61),Ka=n(65),Ya=n(62),Wa=n(56),Va=function(e,t,n,r,a){var o=Object(Ga.a)(Object(Fr.c)(t)),i=Object(Fr.e)(t);if(!o)return E.a.resolve({setupIntent:t});switch(o.type){case"captcha-challenge":return Object(Ya.a)(o,t,e,n);case"3ds1-modal":return Object(za.a)(o,i,C.g.SETUP_INTENT,e,n,a);case"3ds2-fingerprint":case"3ds2-challenge":return Object(Ka.a)(o,{intentSecret:i,intentType:C.g.SETUP_INTENT,controller:e,locale:n,hosted:r},a);case"redirect":return Object(Wa.b)(t,o.redirectUrl,e);default:return E.a.resolve({setupIntent:t})}},Ja=function e(t,n,r,a,o){var i=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;if(C.i<i)throw new Error("max action recursion depth reached");return Va(t,n,r,a,o||[]).then((function(n){if(n.paymentIntent)throw new Error("Got unexpected PaymentIntent response");if(n.setupIntent&&null!=n.setupIntent.next_action&&"use_stripe_sdk"===n.setupIntent.next_action.type&&-1!==C.j.indexOf(n.setupIntent.next_action.use_stripe_sdk.type)){var c=i;return e(t,n.setupIntent,r,a,o,++c)}return n}))},Xa=function(e,t,n,r){return function(a){switch(a.type){case"error":var o=a.error,i=o.setup_intent;return t&&i&&"succeeded"===i.status?E.a.resolve({setupIntent:i}):E.a.resolve({error:o});case"object":var c=a.object;return Ja(e,c,a.locale,n,r);default:return Object(m.a)(a)}}},$a=function(e,t){var n=Object(m.H)(Object(m.y)({clientSecret:un.g}),t,"stripe.handleNextAction").value.clientSecret;return"SETUP_INTENT"===n.type?function(e,t){return e.action.retrieveSetupIntent({intentSecret:t,hosted:!1}).then((function(t){switch(t.type){case"error":return E.a.resolve(Object(Fr.h)(t));case"object":var n=t.object;if(Object(Fr.f)(n.status))return Ja(e,n,t.locale,!1);throw new k.b("handleNextAction: The SetupIntent supplied is not in the requires_action state.");default:return Object(m.a)(t)}}))}(e,n):function(e,t){return e.action.retrievePaymentIntent({intentSecret:t,hosted:!1}).then((function(t){switch(t.type){case"error":return E.a.resolve(Object(Fr.g)(t));case"object":var n=t.object;if(Object(Fr.f)(n.status))return Object(Ur.c)(e,n,t.locale,!1);throw new k.b("handleNextAction: The PaymentIntent supplied is not in the requires_action state.");default:return Object(m.a)(t)}}))}(e,n)},Qa=function(e,t){if(null==e)return Object(m.G)(null);var n=e.type,r=Object(f.a)(e,["type"]),a=Object(m.J)(m.B,(function(){return null}))(n,Object(m.i)(t,"type"));return"error"===a.type?a:Object(m.G)({type:a.value,data:r})},Za=function(e,t,n,r){if(null===e){if(null===t){var a=r?"source_data":"payment_method_data";throw new k.b("".concat(n,": you must additionally specify the type of payment method to create within ").concat(a,"."))}return t}if(null===t)return e;if(t!==e)throw new k.b("".concat(n,": you specified `type: ").concat(t,"`, but ").concat(n," will create a ").concat(e," payment method."));return e},eo=function(e){return function(t,n){if("object"==typeof t&&null!==t){var r=t.source,a=t.source_data,o=t.payment_method,i=t.payment_method_data,c=Object(f.a)(t,["source","source_data","payment_method","payment_method_data"]);if(null!=r&&"string"!=typeof r)return Object(m.k)("string",typeof r,Object(m.i)(n,"source"));if(null!=o&&"string"!=typeof o)return Object(m.k)("string",typeof o,Object(m.i)(n,"payment_method"));if(null!=a&&"object"!=typeof a)return Object(m.k)("object",typeof a,Object(m.i)(n,"source_data"));if(null!=i&&"object"!=typeof i)return Object(m.k)("object",typeof i,Object(m.i)(n,"payment_method_data"));var u=Qa(a,Object(m.i)(n,"source_data"));if("error"===u.type)return u;var l=u.value,d=Qa(i,Object(m.i)(n,"payment_method_data"));if("error"===d.type)return d;var p=d.value;return Object(m.G)({sourceData:l,source:null==r?null:r,paymentMethodData:p,paymentMethod:null==o?null:o,otherParams:Object(s.a)(Object(s.a)({},e),c)})}return null===t?Object(m.k)("object","null",n):Object(m.k)("object",typeof t,n)}},to=function(e){return function(t,n){if(void 0===t)return Object(m.G)({sourceData:null,paymentMethodData:null,source:null,paymentMethod:null,otherParams:{}});if("object"!=typeof t)return Object(m.k)("object",typeof t,n);if(null===t)return Object(m.k)("object","null",n);if(e){if(!t.payment_intent){var r=Object(m.H)(Object(m.y)({return_url:Object(m.w)(m.B),expand:Object(m.w)(Object(m.b)(m.B)),shipping:Object(m.w)(Object(m.h)({name:m.B,address:Object(m.h)({line1:Object(m.w)(m.B),line2:Object(m.w)(m.B),city:Object(m.w)(m.B),state:Object(m.w)(m.B),postal_code:Object(m.w)(m.B),country:Object(m.w)(m.B)})}))}),t,"validate otherParams").value,a=Object(s.a)(Object(s.a)({},t),r);return Object(m.G)({sourceData:null,paymentMethodData:null,source:null,paymentMethod:null,otherParams:a})}var o=t.payment_intent,i=Object(f.a)(t,["payment_intent"]);return eo(i)(o,Object(m.i)(n,"payment_intent"))}return t.payment_intent?Object(m.j)(new k.b("The payment_intent parameter has been removed. To fix, move everything nested under the payment_intent parameter to the top-level object.")):eo({})(t,n)}},no=function(e,t,n,r,a){return function(o,i){var c=function(e,t,n,r,a,o,i){var c=Object(m.I)(m.g,a,r);if("error"===c.type)return null;var u=c.value,l=Object(m.H)(to(t),o,r).value,d=l.sourceData,p=l.source,f=l.paymentMethodData,h=l.paymentMethod,_=l.otherParams;if(!e&&d)throw new k.b("".concat(r,": Expected payment_method_data, not source_data."));if(null!=p)throw new k.b("When calling ".concat(r," on an Element, you can't pass in a pre-existing source ID, as a source will be created using the Element."));if(null!=h)throw new k.b("When calling ".concat(r," on an Element, you can't pass in a pre-existing PaymentMethod ID, as a PaymentMethod will be created using the Element."));var b=u._componentName,y=u._implementation._frame.id,v=d||f||{type:null,data:{}},O=v.type,g=v.data,j=Object(fr.d)(b,O),w=e&&!f,E={elementName:b,frameId:y,type:Za(n,j,r,w),data:g};return w?{mode:Object(s.a)({tag:"source-from-element",intentSecret:i},E),otherParams:_}:{mode:Object(s.a)({tag:"paymentMethod-from-element",options:null,intentSecret:i},E),otherParams:_}}(e,t,n,r,o,i,a);if(c)return c;var u=function(e,t,n,r,a,o,i){var c=Object(m.H)(to(t),a,r).value,s=c.sourceData,u=c.source,l=c.paymentMethodData,d=c.paymentMethod,p=c.otherParams;if(!e&&s)throw new k.b("".concat(r,": Expected payment_method, source, or payment_method_data, not source_data."));if(null!==u&&null!==s)throw new k.b("".concat(r,": Expected either source or source_data, but not both."));if(null!==d&&null!==l)throw new k.b("".concat(r,": Expected either payment_method or payment_method_data, but not both."));if(null!==d&&null!==u)throw new k.b("".concat(r,": Expected either payment_method or source, but not both."));if(s||l){var f=s||l||{},h=f.type,_=f.data,b=e&&!l,y=Za(n,h,r,b);return b?{mode:{tag:"source-from-data",intentSecret:i,type:y,data:_},otherParams:p}:{mode:{tag:"paymentMethod-from-data",type:y,data:_,intentSecret:i,options:null},otherParams:p}}return null!==u?{mode:{tag:"source",intentSecret:i,source:u},otherParams:p}:null!==d?{mode:{tag:"paymentMethod",paymentMethod:d,intentSecret:i,options:null},otherParams:p}:{mode:{tag:"none",intentSecret:i},otherParams:p}}(e,t,n,r,o,0,a);if(u)return u;throw new k.b("Expected: stripe.".concat(r,"(intentSecret, element[, data]) or stripe.").concat(r,"(intentSecret[, data]). Please see the docs for more usage examples https://stripe.com/docs/payments/dynamic-authentication"))}},ro=function(e,t,n,r,a,o){var i=Object(m.H)(un.h,r,"stripe.confirmPaymentIntent intent secret").value,c=no(e,!1,null,"confirmPaymentIntent",i)(a,o);return t.action.confirmPaymentIntent(Object(s.a)(Object(s.a)({},c),{},{expectedType:null,options:{handleActions:!1},mids:n})).then(Fr.g)},ao=function(e,t,n,r,a,o,i){var c=Object(m.H)(un.h,a,"stripe.handleCardPayment intent secret").value,u=fr.b.card,l=no(e,r,u,"handleCardPayment",c)(o,i),d=!o&&!i;return t.action.confirmPaymentIntent(Object(s.a)(Object(s.a)({},l),{},{expectedType:u,options:{handleActions:!0},mids:n})).then(Object(Ur.b)(t,d,!1))},oo=function(e,t,n,r,a,o){var i=Object(m.H)(un.h,r,"stripe.handleSepaDebitPayment intent secret").value,c=fr.b.sepa_debit,u=no(!1,n,c,"handleSepaDebitPayment",i)(a,o),l=!a&&!o;return e.action.confirmPaymentIntent(Object(s.a)(Object(s.a)({},u),{},{expectedType:c,options:{handleActions:!0},mids:t})).then(Object(Ur.b)(e,l,!1))},io=function(e,t,n,r,a,o,i){var c=Object(m.H)(un.h,a,"stripe.handleIdealPayment intent secret").value,u=fr.b.ideal,l=no(e,r,u,"handleIdealPayment",c)(o,i),d=!o&&!i;return t.action.confirmPaymentIntent(Object(s.a)(Object(s.a)({},l),{},{expectedType:u,options:{handleActions:!0},mids:n})).then(Object(Ur.b)(t,d,!1))},co=function(e,t,n,r,a,o){var i=Object(m.H)(un.h,r,"stripe.handleFpxPayment intent secret").value,c=fr.b.fpx,u=no(!1,n,c,"handleFpxPayment",i)(a,o),l=!a&&!o;return e.action.confirmPaymentIntent(Object(s.a)(Object(s.a)({},u),{},{expectedType:c,options:{handleActions:!0},mids:t})).then(Object(Ur.b)(e,l,!1))},so=function(e){switch(e.type){case"object":return{returnIntent:e.object};case"error":return{error:e.error};default:return Object(m.a)(e)}},uo=function(e,t,n){return e.action.confirmReturnIntent({returnIntentId:t,data:n}).then(so)},lo=function(e,t){return function(n,r,a,o,i){var c=Object(Bn.l)(a,e),u=Object(Bn.j)(t,e,o,c),l=Object(Bn.i)(e,i),d="none"===u.mode.tag,p=n.action.confirmSetupIntent(Object(s.a)(Object(s.a)({},u),{},{expectedType:t,options:l,mids:r}));return l.handleActions?p.then(Xa(n,d,!1,u.otherParams.expand)):p.then(Fr.h)}},po=lo("confirmAcssDebitSetup",fr.b.acss_debit),fo=lo("confirmAfterpayClearpaySetup",fr.b.afterpay_clearpay),mo=lo("confirmCardSetup",fr.b.card),ho=lo("confirmSepaDebitSetup",fr.b.sepa_debit),_o=lo("confirmAuBecsDebitSetup",fr.b.au_becs_debit),bo=lo("confirmBacsDebitSetup",fr.b.bacs_debit),yo=lo("confirmIdealSetup",fr.b.ideal),vo=lo("confirmAlipaySetup",fr.b.alipay),Oo=lo("confirmSofortSetup",fr.b.sofort),go=lo("confirmBancontactSetup",fr.b.bancontact),jo=lo("confirmIdBankTransferSetup",fr.b.id_bank_transfer),wo=lo("confirmPayPalSetup",fr.b.paypal),ko=lo("confirmUsBankAccountSetup",fr.b.us_bank_account),Eo=lo("confirmNzBankAccountSetup",fr.b.nz_bank_account),So=function(e,t,n){var r=Object(Bn.l)(t,"verifyMicrodepositsForSetup"),a=Object(m.H)(m.t,n,"stripe.verifyMicrodepositsForSetup");return e.action.verifyMicrodepositsForSetup({intentSecret:r,data:a.value}).then(Fr.h)},Po=function(e,t,n){var r=Object(Bn.l)(t,"collectUsBankAccountForSetup"),a=Object(m.H)(Object(un.b)("us_bank_account"),n,"stripe.collectUsBankAccountForSetup").value,o=a.paymentMethodData,i=a.otherParams;return Mn(r.clientSecret,r.id,e,o).then((function(t){return t.error?e.action.localizeError(t.error).then((function(e){return E.a.resolve({error:e})})):t.linkAccountSession.paymentAccount?e.action.attachLinkAccountSessionForSetup({intentSecret:r,linkAccountSessionId:t.linkAccountSession.id,expandParam:i.expand}).then((function(e){return Object(Fr.h)(e)})):e.action.retrieveSetupIntent({intentSecret:r,hosted:!1}).then(Fr.h)}))},Ao=function(e,t){var n=Object(m.H)(Object(un.a)(un.i),t,"stripe.collectBankAccountForSetup").value,r=n.clientSecret,a=n.paymentMethodData,o=n.otherParams;return Mn(r.clientSecret,r.id,e,a).then((function(t){return t.error?e.action.localizeError(t.error).then((function(e){return E.a.resolve({error:e})})):t.linkAccountSession.paymentAccount?e.action.attachLinkAccountSessionForSetup({intentSecret:r,linkAccountSessionId:t.linkAccountSession.id,expandParam:o.expand}).then((function(e){return Object(Fr.h)(e)})):e.action.retrieveSetupIntent({intentSecret:r,hosted:!1}).then(Fr.h)}))},Io=function(e,t,n,r,a){var o=Object(m.H)(un.i,n,"stripe.handleCardSetup intent secret").value,i=fr.b.card,c=no(!1,!1,i,"handleCardSetup",o)(r,a),u=!r&&!a;return e.action.confirmSetupIntent(Object(s.a)(Object(s.a)({},c),{},{expectedType:i,options:{handleActions:!0},mids:t})).then(Xa(e,u,!1,c.otherParams.expand))},Co=function(e,t,n,r,a){var o=Object(m.H)(un.i,n,"stripe.handleSepaDebitSetup intent secret").value,i=fr.b.sepa_debit,c=no(!1,!1,i,"handleSepaDebitSetup",o)(r,a),u=!r&&!a;return e.action.confirmSetupIntent(Object(s.a)(Object(s.a)({},c),{},{expectedType:i,options:{handleActions:!0},mids:t})).then(Xa(e,u,!1))},To=function(e,t,n,r,a){var o=Object(m.H)(un.i,n,"stripe.confirmSetupIntent intent secret").value,i=no(!1,!1,null,"confirmSetupIntent",o)(r,a);return e.action.confirmSetupIntent(Object(s.a)(Object(s.a)({},i),{},{otherParams:Object(s.a)({},i.otherParams),expectedType:null,options:{handleActions:!1},mids:t})).then(Fr.h)},No=function(e,t){var n=function(e){if("string"==typeof e){var t=e.trim().match(/^((vi|vs)_[0-9a-zA-Z]+)_secret_(.+)$/);if(!t)throw new k.b("stripe.verifyIdentity: Could not parse client secret.");return{identityClientSecret:t[0],id:t[1],token:t[3]}}throw new k.b("stripe.verifyIdentity: Could not parse client secret.")}(e),r=n.id;return function(e){var t=e.controller,n=e.url,r=(e.id,e.locale),a=void 0===r?"en-US":r,o=Object(jr.b)(t,{url:Object(Ye.g)(n),size:"1100x800",frameTitle:"identity.verification_frame_title",locale:a,useLightboxHostedCloseButton:!0,allowCamera:!0,appType:"identity"});return new E.a((function(e){var t={type:"user_action",code:"session_cancelled"};o._on("identity-frame-close",(function(){Object(jr.a)(o).then((function(){e({error:t})}))})),o._on("identity-frame-error",(function(e){var n=e.type,r=e.code;t={type:n,code:r}})),o._on("identity-frame-session-complete",(function(){t=null})),o._on("request-close",(function(n){Object(jr.a)(o).then((function(){e({error:t})}))}))}))}({controller:t,url:function(e){return"".concat(C.f,"start/").concat(e)}(n.token),id:r})},Mo=["number","cvc","pin.number"],Ro=function(e,t){if("string"!=typeof e)return Object(m.m)("an Issuing card ID of the form ic_xxx",e,t);var n,r=(n=e.trim().match(/ic_[a-zA-Z0-9_]+$/))?n[0]:null;return null===r?Object(m.m)("an Issuing card ID of the form ic_xxx",e,t):Object(m.G)(r,[])},xo=function(e,t){return Object(m.H)(Ro,e,"stripe.".concat(t," cardId")).value},Bo=function(e,t){if("string"!=typeof e)return Object(m.m)("an ephemeral key secret of the form ek_xxx",e,t);var n,r=(n=e.trim().match(/ek_[a-zA-Z0-9_]+$/))?n[0]:null;return null===r?Object(m.m)("an ephemeral key secret of the form ek_xxx",e,t):Object(m.G)(r,[])},Lo=function(e,t){return"string"!=typeof e?Object(m.m)("a string",e,t):Mo.indexOf(e)<0?Object(m.m)("any of ".concat(Mo.join(", ")),e,t):Object(m.G)(e,[])},Do=function(e,t){return Object(m.H)(Bo,e,"stripe.".concat(t," ephemeral key secret")).value},qo=function(e,t){if("string"!=typeof e)return Object(m.m)("an ephemeral key nonce of the form ephkn_xxx",e,t);var n,r=(n=e.trim().match(/ephkn_[a-zA-Z0-9_]+$/))?n[0]:null;return null===r?Object(m.m)("an ephemeral key nonce of the form ephkn_xxx",e,t):Object(m.G)(r,[])},Fo=function(e){if("object"==typeof e&&e&&e.ephemeralKeySecret&&e.nonce){var t,n=Do(e.ephemeralKeySecret,"retrieveIssuingCard"),r=(a=e.nonce,o="retrieveIssuingCard",Object(m.H)(qo,a,"stripe.".concat(o," ephemeral key nonce")).value);return Array.isArray(e.expand)&&(t=e.expand.map((function(e){return function(e,t){return Object(m.H)(Lo,e,"stripe.".concat(t," expand param")).value}(e,"retrieveIssuingCard")}))),{ephemeralKeySecret:n,publicNonce:r,expand:t}}throw new k.b("When retrieving an Issuing card, you must specify an ephemeral key secret and an ephemeral key nonce in the options argument of stripe.retrieveIssuingCard.");var a,o},Uo=function(e,t){var n=function(e){if("object"==typeof e&&e&&e.issuingCard)return{issuingCard:xo(e.issuingCard,"createEphemeralKeyNonce")};throw new k.b("When creating an ephemeral key nonce, you must specify an Issuing card ID in the options argument of stripe.createEphemeralKeyNonce.")}(e);return t.action.createEphemeralKeyNonce({cardId:n.issuingCard}).then(Yt)},Ho=n(63),Go=n(71),zo=function(e){switch(e.type){case"object":return{token:e.object};case"error":return{error:e.error};default:return Object(m.a)(e)}},Ko=function(e){return"object"==typeof e&&null!==e?e:{}},Yo=function(e){switch(e.type){case"object":return{radarSession:e.object};case"error":return{error:e.error};default:return Object(m.a)(e)}},Wo="securitypolicyviolation",Vo=window,Jo=/^require-trusted-types-for/,Xo="LOAD_ERROR",$o="REPORT_ONLY",Qo="BLOCKED",Zo=new at.a,ei=document?document.readyState:"unknown",ti=!1;switch(ei){case"loading":ti=!0;break;case"interactive":try{var ni=function(){ti=!0};setTimeout((function(){document.removeEventListener("DOMContentLoaded",ni)}),0),document.addEventListener("DOMContentLoaded",ni)}catch(e){}}var ri,ai=!1,oi=function e(t,r,a,o){if(!ai||o){ai=!0;var i=o||new at.a;if("complete"===document.readyState){var c=null,u=null,l=null,d=null,f=null;if(window.performance){if(window.performance.timing){var m=window.performance.timing,h=m.fetchStart;c=m.domLoading-h,u=m.domInteractive-h,l=m.domComplete-h,d=at.a.fromPosixTime(h).getElapsedTime(Zo)}if(window.performance.getEntriesByType){var _=window.performance.getEntriesByType("resource"),b="https://js.stripe.com/v3/".replace(/\/$/,"");f=_.reduce((function(e,t){if(0===t.name.indexOf(b)){var n=t.name.match(/\/([^/#?]*)\/?(?:$|[#?])/);if(n&&n[1]){var r=n[1].replace(/-[0-9a-f]{32}\./,".");return"v3"===r&&(r="stripe.js"),Object(s.a)(Object(s.a)({},e),{},Object(p.a)({},r,{transfer_size:t.transferSize,duration:Math.round(t.duration)}))}}return e}),{})}}t.report("timings",{element:t.controllerFor(),dom_loading:c,dom_interactive:u,dom_complete:l,since_fetch:d,load_count:1,load_before_dom_content_loaded:ti,load_ready_state:ei,first_create_ready_state:r,first_mount_readyState:a,until_first_create:Zo.getElapsedTime(t._createTimestamp),until_first_mount:t._mountTimestamp?Zo.getElapsedTime(t._mountTimestamp):null,until_first_load:Zo.getElapsedTime(i),resource_timings:f}),setTimeout((function(){new E.a((function(e){if(Vo.trustedTypes&&Vo.Promise){var t,r=!1,a=function(e){(Jo.test(e.effectiveDirective)||Jo.test(e.violatedDirective))&&(Object(g.f)(e.blockedURI)||Object(g.f)(e.sourceFile))&&(r=!0)},o=function(){return r?Qo:Xo};Vo.addEventListener(Wo,a);try{t=n.e(13).then(n.bind(null,92)).then((function(e){return(e.loaded&&r?$o:"ALLOWED")||Xo}),o)}catch(e){t=new E.a((function(e){return setTimeout(e,0)})).then(o)}t.then((function(){Vo.removeEventListener(Wo,a)})),e(t)}else e("NOT_SUPPORTED")})).then((function(e){t.report("trusted_types_check",{result:e}),function(e){switch(e){case $o:case Qo:return!0}return!1}(e)&&t.warn("We noticed that you are using Trusted Types. Nothing has broken, but we plan to add dynamic loading to parts of Stripe.js. Please allow scripts from 'https://js.stripe.com' in your default Trusted Types policy. For more information: https://stripe.com/docs/security/guide#content-security-policy")}))}),5e3)}else window.addEventListener("load",(function(){try{e(t,r,a,i)}catch(e){}}))}},ii=Object(m.y)({apiKey:m.B,stripeAccount:Object(m.w)(m.B),locale:Object(m.w)(m.B),apiVersion:Object(m.w)(m.B),__privateApiUrl:Object(m.w)(m.B),__checkout:Object(m.w)(Object(m.y)({mids:Object(m.y)({muid:m.B,sid:m.B})})),__dashboard:Object(m.w)(m.t),__hosted3DS:Object(m.w)(m.e),canCreateRadarSession:Object(m.w)(m.e),betas:Object(m.w)(Object(m.b)(m.B))}),ci=function(e){return"You have an in-flight ".concat(e,"! Please be sure to disable your form submit button when ").concat(e," is called.")},si=function(e){return function(){throw new k.b("You cannot call `stripe.".concat(e,"` without supplying an appropriate beta flag when initializing Stripe.js."))}},ui=function(e){return function(){throw new k.b("You cannot call `stripe.".concat(e,"` without supplying an Issuing beta flag when initializing Stripe.js."))}},li=function(){function e(t,n){var r=this;Object(l.a)(this,e),this._listenerRegistry=Object(St.a)(),this.elements=x((function(e){return new ur(r._controller,r._listenerRegistry,{stripeJsLoadTimestamp:Zo,stripeCreateTimestamp:r._controller._createTimestamp},r._betas,r._mids(),Object(s.a)(Object(s.a)({},r._locale?{locale:r._locale}:{}),e))}),void 0,"elements"),this.createToken=q((function(e,t){var n=r._mids();return"cvc_update"===e?function(e,t,n){var r=Object(m.c)(t);if(r&&"cardCvc"===r._componentName){var a=r._implementation._frame.id;return e.action.tokenizeCvcUpdate({frameId:a,mids:n}).then(zo)}throw new k.b("You must provide a `cardCvc` Element to create a `cvc_update` token.")}(r._controller,t,n):function(e,t){return function(n,r){var a=Object(m.c)(n);if(a){var o=a._implementation._frame.id,i=a._componentName,c=Ko(r);return e.action.tokenizeWithElement({frameId:o,elementName:i,tokenData:c,mids:t}).then(zo)}if("string"==typeof n){var s=n,u=Ko(r);return e.action.tokenizeWithData({elementName:null,type:s,tokenData:u,mids:t}).then(zo)}throw new k.b("You must provide a Stripe Element or a valid token type to create a Token.")}}(r._controller,n)(e,t)}),void 0,"createToken"),this.createSource=q((function(e,t){var n=Object(m.c)(e),a=Mr(n?t:e),o=a||{type:null,data:{}},i=o.type,c=o.data;if(n){var s=n._implementation._frame.id,u=n._componentName;return!a&&Object(fr.c)(u)?E.a.reject(new k.b("Please provide Source creation parameters to createSource.")):r._controller.action.createSourceWithElement({frameId:s,elementName:u,type:i,sourceData:c,mids:r._mids()}).then(Rr)}return a?i?r._controller.action.createSourceWithData({elementName:null,type:i,sourceData:c,mids:r._mids()}).then(Rr):E.a.reject(new k.b("Please provide a source type to createSource.")):E.a.reject(new k.b("Please provide either an Element or Source creation parameters to createSource."))}),void 0,"createSource"),this.retrieveSource=D((function(e){var t=Object(m.H)(Br,{source:e},"retrieveSource"),n=t.value;return t.warnings.forEach((function(e){return r._controller.warn(e)})),r._controller.action.retrieveSource(n).then(Rr)}),void 0,"retrieveSource"),this.paymentRequest=B((function(e,t){Object(He.b)(r._keyMode);var n=r._isCheckout&&t?t:null;return lr(r._controller,{apiKey:r._apiKey,accountId:r._stripeAccount},r._mids(),e,r._betas,n,r._listenerRegistry)}),void 0,"paymentRequest");var a=new at.a,o=Object(m.H)(ii,t||{},"Stripe()"),i=o.value,c=o.warnings,u=i.apiKey,d=i.stripeAccount,p=i.apiVersion,f=i.locale,h=i.__dashboard,_=i.__privateApiUrl,b=i.__checkout,y=i.__hosted3DS,v=i.canCreateRadarSession,O=i.betas,g=Object(j.e)(O||null),w=g.validBetas,S=g.betaWarning;S&&c.push(S),Object(He.d)(u),(null==b?void 0:b.mids)&&(e._ec=Ut({checkoutIds:b.mids})),this._apiKey=u.trim(),this._keyMode=Object(He.c)(this._apiKey),this._betas=w,this._locale=Object(j.f)(f,this._betas)||null,this._stripeAccount=d||null,this._isCheckout=!!b;var P=h?"".concat(C.d):void 0;this._attachControllerGetter(p,_,P,d,a),c.forEach((function(e){return r._controller.warn(e)})),gr(),this._ensureHTTPOnlyLinkCookie(),this._ensureHTTPS(),this._ensureStripeHosted(n),this._attachPaymentIntentMethods(this._betas,!!y),this._attachLegacyPaymentIntentMethods(this._betas),this._attachCheckoutMethods(this._betas),this._attachPrivateMethodsForCheckout(this._isCheckout),this._attachPrivateMethodsForConsumer(Et),this._attachCreateRadarSession(v||!1),this._attachGetters(),this._attachIssuingCardMethods(this._betas),this._attachIdentityMethods(this._betas),this._attachLinkedAccountsMethods(this._betas),this._attachAppInfo()}return Object(d.a)(e,[{key:"_attachCreateRadarSession",value:function(e){var t=this;e&&(this.createRadarSession=L((function(){return t._midsPromise().then((function(e){return n=t._controller,r=e,n.action.createRadarSession({mids:r}).then(Yo);var n,r}))})))}},{key:"_attachPaymentIntentMethods",value:function(e,t){var r,a,o,i=this,c=function(){return i._mids()};this.createPaymentMethod=(r=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return Dr.apply(void 0,[i._controller,c()].concat(t))},a=void 0,o="createPaymentMethod",function(e,t,n){try{return r.call(this,e,t,n)}catch(e){return R(e,a||this&&this._controller,!1,o)}}),this._createPaymentMethod=this.createPaymentMethod,this.retrievePaymentIntent=D((function(e){return function(e,t){var n=Object(Bn.k)(e,"retrievePaymentIntent");return t.action.retrievePaymentIntent({intentSecret:n,hosted:!1}).then(Fr.g)}(e,i._controller)}),void 0,"retrievePaymentIntent"),this.retrieveSetupIntent=D((function(e){return function(e,t){var n=Object(Bn.l)(e,"retrieveSetupIntent");return t.action.retrieveSetupIntent({intentSecret:n,hosted:!1}).then(Fr.h)}(e,i._controller)}),void 0,"retrieveSetupIntent"),this.updatePaymentIntent=si("updatePaymentIntent"),Object(j.d)(this._betas,j.a.line_items_beta_1)||Object(j.d)(this._betas,j.a.tax_product_beta_1)?this.updatePaymentIntent=q((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return Aa.apply(void 0,[i._controller,c()].concat(t))}),void 0,"updatePaymentIntent"):Object(j.d)(this._betas,j.a.server_side_confirmation_beta_1)&&(this.updatePaymentIntent=D((function(e){return function(e,t,n){var r=Kr(e,t,n,"payment","stripe.updatePaymentIntent()");return e.action.updatePaymentIntent(r).then(Fr.g)}(i._controller,c(),e)}),void 0,"updatePaymentIntent"));var s=Object(W.a)(Na,ci("handleCardAction"));this.handleCardAction=D((function(e){return s(e,i._controller)}),void 0,"handleCardAction");var u=Object(W.a)($a,ci("handleNextAction"));this.handleNextAction=D((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return u.apply(void 0,[i._controller].concat(t))}),void 0,"handleNextAction");var l=Object(W.a)(ea,ci("confirmCardPayment"));this.confirmCardPayment=F((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return l.apply(void 0,[i._controller,c()].concat(t))}),void 0,"confirmCardPayment");var d=Object(W.a)(mo,ci("confirmCardSetup"));this.confirmCardSetup=F((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return d.apply(void 0,[i._controller,c()].concat(t))}),void 0,"confirmCardSetup"),this.confirmIdealPayment=F((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return oa.apply(void 0,[i._controller,c()].concat(t))}),void 0,"confirmIdealPayment"),this.confirmSepaDebitPayment=F((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return fa.apply(void 0,[i._controller,c()].concat(t))}),void 0,"confirmSepaDebitPayment"),this.confirmSepaDebitSetup=F((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return ho.apply(void 0,[i._controller,c()].concat(t))}),void 0,"confirmSepaDebitSetup"),this.confirmFpxPayment=F((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return na.apply(void 0,[i._controller,c()].concat(t))}),void 0,"confirmFpxPayment"),this.confirmAlipayPayment=F((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return ua.apply(void 0,[i._controller,c()].concat(t))}),void 0,"confirmAlipayPayment"),this.confirmAlipaySetup=F((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return vo.apply(void 0,[i._controller,c()].concat(t))}),void 0,"confirmAlipaySetup"),this.confirmAuBecsDebitPayment=F((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return Xr.apply(void 0,[i._controller,c()].concat(t))}),void 0,"confirmAuBecsDebitPayment"),this.confirmAuBecsDebitSetup=F((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return _o.apply(void 0,[i._controller,c()].concat(t))}),void 0,"confirmAuBecsDebitSetup"),this.confirmBacsDebitPayment=F((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return $r.apply(void 0,[i._controller,c()].concat(t))}),void 0,"confirmBacsDebitPayment"),this.confirmBacsDebitSetup=F((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return bo.apply(void 0,[i._controller,c()].concat(t))}),void 0,"confirmBacsDebitSetup"),this.confirmBancontactPayment=F((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return Qr.apply(void 0,[i._controller,c()].concat(t))}),void 0,"confirmBancontactPayment"),this.confirmBoletoPayment=F((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return Zr.apply(void 0,[i._controller,c()].concat(t))}),void 0,"confirmBoletoPayment"),this.confirmEpsPayment=F((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return ta.apply(void 0,[i._controller,c()].concat(t))}),void 0,"confirmEpsPayment"),this.confirmGiropayPayment=F((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return ra.apply(void 0,[i._controller,c()].concat(t))}),void 0,"confirmGiropayPayment"),this.confirmOxxoPayment=F((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return sa.apply(void 0,[i._controller,c()].concat(t))}),void 0,"confirmOxxoPayment"),this.confirmP24Payment=F((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return la.apply(void 0,[i._controller,c()].concat(t))}),void 0,"confirmP24Payment"),this.confirmSofortPayment=F((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return ma.apply(void 0,[i._controller,c()].concat(t))}),void 0,"confirmSofortPayment"),this.confirmIdealSetup=F((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return yo.apply(void 0,[i._controller,c()].concat(t))}),void 0,"confirmIdealSetup"),this.confirmSofortSetup=F((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return Oo.apply(void 0,[i._controller,c()].concat(t))}),void 0,"confirmSofortSetup"),this.confirmBancontactSetup=F((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return go.apply(void 0,[i._controller,c()].concat(t))}),void 0,"confirmBancontactSetup"),this.confirmGrabPayPayment=F((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return aa.apply(void 0,[i._controller,c()].concat(t))}),void 0,"confirmGrabPayPayment"),this.confirmAffirmPayment=F((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return Vr.apply(void 0,[i._controller,c()].concat(t))}),void 0,"confirmAffirmPayment"),this.confirmAfterpayClearpayPayment=F((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return Jr.apply(void 0,[i._controller,c()].concat(t))}),void 0,"confirmAfterpayClearpayPayment"),this.verifyMicrodepositsForPayment=q((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return Ia.apply(void 0,[i._controller].concat(t))}),void 0,"verifyMicrodepositsForPayment"),this.verifyMicrodepositsForSetup=q((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return So.apply(void 0,[i._controller].concat(t))}),void 0,"verifyMicrodepositsForSetup"),this.confirmPayment=D((function(e){return function(e,t,n,r){var a=Object(Hr.a)(e,t,n,r,"payment","stripe.confirmPayment()"),o=a.intentMutationRequest,i=e.action.confirmPaymentIntent(o);return Object(j.d)(n,j.a.server_side_confirmation_beta_1)&&null!==o.options&&!o.options.handleActions?i.then(Fr.g):i.then(Object(Ur.b)(e,!1,!1,o.otherParams.expand)).then((function(t){return t.error||"always"!==a.redirect?t:Object(qr.a)(Object(Bn.g)(a.returnUrl,t.paymentIntent)).then((function(n){return Object(qr.b)(e,"confirmPayment redirect",n),Object(Fr.g)(n,t.paymentIntent)}))}))}(i._controller,c(),i._betas,e)}),void 0,"confirmPayment"),this.confirmSetup=D((function(e){return function(e,t,n,r){var a=Object(Hr.a)(e,t,n,r,"setup","stripe.confirmSetup()"),o=a.intentMutationRequest,i=e.action.confirmSetupIntent(o);return Object(j.d)(n,j.a.server_side_confirmation_beta_1)&&null!==o.options&&!o.options.handleActions?i.then(Fr.h):i.then(Xa(e,!1,!1,o.otherParams.expand)).then((function(t){return t.error||"always"!==a.redirect?t:Object(qr.a)(Object(Bn.g)(a.returnUrl,t.setupIntent)).then((function(n){return Object(qr.b)(e,"confirmSetup redirect",n),Object(Fr.h)(n,t.setupIntent)}))}))}(i._controller,c(),i._betas,e)}),void 0,"confirmSetup"),this.confirmKlarnaPayment=F((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return ia.apply(void 0,[i._controller,c()].concat(t))}),void 0,"confirmKlarnaPayment"),Object(j.d)(this._betas,j.a.process_order_beta_1)&&(this.processOrder=D((function(e){return n.e(6).then(n.bind(null,94)).then((function(t){return(0,t.processOrder)(i._controller,c(),i._betas,e)}))}),void 0,"processOrder")),Object(j.d)(this._betas,j.a.process_order_beta_1)&&(this.retrieveOrder=D((function(e){return n.e(6).then(n.bind(null,94)).then((function(t){return(0,t.retrieveOrder)(e,i._controller)}))}),void 0,"retrieveOrder")),Object(j.d)(this._betas,j.a.update_order_beta_1)&&(this.updateOrder=D((function(e){return n.e(6).then(n.bind(null,94)).then((function(t){return(0,t.updateOrder)(i._controller,e)}))}),void 0,"updateOrder")),this.collectBankAccountForPayment=D((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return Ta.apply(void 0,[i._controller].concat(t))}),void 0,"collectBankAccountForPayment"),this.collectBankAccountForSetup=D((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return Ao.apply(void 0,[i._controller].concat(t))}),void 0,"collectBankAccountForSetup"),Object(j.d)(this._betas,j.a.us_bank_account_beta_2)&&(this.collectUsBankAccountForPayment=q((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return Ca.apply(void 0,[i._controller].concat(t))}),void 0,"collectUsBankAccountForPayment"),this.collectUsBankAccountForSetup=q((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return Po.apply(void 0,[i._controller].concat(t))}),void 0,"collectUsBankAccountForSetup")),Object(j.d)(this._betas,j.a.acss_debit_beta_1)?(this.confirmAcssDebitPayment=F((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return Wr.apply(void 0,[i._controller,c()].concat(t))}),void 0,"confirmAcssDebitPayment"),this.confirmAcssDebitSetup=F((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return po.apply(void 0,[i._controller,c()].concat(t))}),void 0,"confirmAcssDebitSetup")):(this.confirmAcssDebitPayment=F((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return Da.apply(void 0,[i._controller,c()].concat(t))}),void 0,"confirmAcssDebitPayment"),this.confirmAcssDebitSetup=F((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return qa.apply(void 0,[i._controller,c()].concat(t))}),void 0,"confirmAcssDebitSetup")),this.confirmAfterpayClearpaySetup=si("confirmAfterpayClearpaySetup"),Object(j.d)(this._betas,j.a.afterpay_clearpay_setup_intents_beta)&&(this.confirmAfterpayClearpaySetup=F((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return fo.apply(void 0,[i._controller,c()].concat(t))}),void 0,"confirmAfterpayClearpaySetup")),this.confirmBlikPayment=si("confirmBlikPayment"),Object(j.d)(this._betas,j.a.blik_beta_1)&&(this.confirmBlikPayment=F((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return va.apply(void 0,[i._controller,c()].concat(t))}),void 0,"confirmBlikPayment")),this.confirmCustomerBalancePayment=si("confirmCustomerBalancePayment"),Object(j.d)(this._betas,j.a.customer_balance_beta_1)&&(this.confirmCustomerBalancePayment=F((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return Oa.apply(void 0,[i._controller,c()].concat(t))}),void 0,"confirmCustomerBalancePayment")),Object(j.d)(this._betas,j.a.return_intents_beta_1)&&(this.confirmReturnIntent=q((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return uo.apply(void 0,[i._controller].concat(t))}),void 0,"confirmReturnIntent")),this.confirmKonbiniPayment=F((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return ca.apply(void 0,[i._controller,c()].concat(t))}),void 0,"confirmKonbiniPayment"),Object(j.d)(this._betas,j.a.oxxo_pm_beta_1)&&(this.confirmOxxoPayment=F((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return sa.apply(void 0,[i._controller,c()].concat(t))}),void 0,"confirmOxxoPayment")),this.confirmWechatPayPayment=F((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return ja.apply(void 0,[i._controller,c()].concat(t))}),void 0,"confirmWechatPayPayment"),Object(j.d)(this._betas,j.a.wechat_pay_pm_beta_1)&&(this.confirmWechatPayPayment=F((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return ga.apply(void 0,[i._controller,c()].concat(t))}),void 0,"confirmWechatPayPayment")),this.confirmPayByBankPayment=si("confirmPayByBankPayment"),Object(j.d)(this._betas,j.a.pay_by_bank_beta_1)&&(this.confirmPayByBankPayment=F((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return da.apply(void 0,[i._controller,c()].concat(t))}),void 0,"confirmPayByBankPayment")),this.confirmPayNowPayment=F((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return wa.apply(void 0,[i._controller,c()].concat(t))}),void 0,"confirmPayNowPayPayment"),this.confirmPixPayment=si("confirmPixPayment"),Object(j.d)(this._betas,[j.a.pix_beta_1,j.a.pix_beta_2])&&(this.confirmPixPayment=F((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return ka.apply(void 0,[i._controller,c()].concat(t))}),void 0,"confirmPixPayment")),this.confirmPromptPayPayment=F((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return Ea.apply(void 0,[i._controller,c()].concat(t))}),void 0,"confirmPromptPayPayment"),this.confirmPayPalPayment=si("confirmPayPalPayment"),Object(j.d)(this._betas,j.a.paypal_pm_beta_1)&&(this.confirmPayPalPayment=F((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return pa.apply(void 0,[i._controller,c()].concat(t))}),void 0,"confirmPayPalPayment")),Object(j.d)(this._betas,j.a.paypal_pm_beta_1)&&(this.confirmPayPalSetup=F((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return wo.apply(void 0,[i._controller,c()].concat(t))}),void 0,"confirmPayPalSetup")),this.confirmQrisPayment=si("confirmQrisPayment"),Object(j.d)(this._betas,j.a.qris_beta_1)&&(this.confirmQrisPayment=F((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return Sa.apply(void 0,[i._controller,c()].concat(t))}),void 0,"confirmQrisPayment")),this.confirmUpiPayment=si("confirmUpiPayment"),Object(j.d)(this._betas,j.a.upi_beta_1)&&(this.confirmUpiPayment=F((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return _a.apply(void 0,[i._controller,c()].concat(t))}),void 0,"confirmUpiPayment")),this.confirmUsBankAccountPayment=F((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return ba.apply(void 0,[i._controller,c()].concat(t))}),void 0,"confirmUsBankAccountPayment"),this.confirmUsBankAccountSetup=F((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return ko.apply(void 0,[i._controller,c()].concat(t))}),void 0,"confirmUsBankAccountSetup"),Object(j.d)(this._betas,j.a.nz_bank_account_beta_1)&&(this.confirmNzBankAccountPayment=F((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return ya.apply(void 0,[i._controller,c()].concat(t))}),void 0,"confirmNzBankAccountPayment"),this.confirmNzBankAccountSetup=F((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return Eo.apply(void 0,[i._controller,c()].concat(t))}),void 0,"confirmNzBankAccountSetup")),this.confirmNetbankingPayment=si("confirmNetbankingPayment"),Object(j.d)(this._betas,j.a.netbanking_beta_1)&&(this.confirmNetbankingPayment=F((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return Pa.apply(void 0,[i._controller,c()].concat(t))}),void 0,"confirmNetbankingPayment")),this.confirmInstantDebitsPilotPayment=si("confirmInstantDebitsPilotPayment"),Object(j.d)(this._betas,j.a.instant_debits_beta_1)&&(this.confirmInstantDebitsPilotPayment=F((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return Ha.apply(void 0,[i._controller,c()].concat(t))}),void 0,"confirmInstantDebitsPilotPayment")),this.linkAutofillModal=si("linkAutofillModal"),Object(j.d)(this._betas,j.a.link_autofill_modal_beta_1)&&(this.linkAutofillModal=x((function(e){return function(e,t,n){var r=function(e){throw new k.b("stripe.linkAutofill.".concat(e," can only be called when the user is logged-in."))},a=!1,o=!1,i=e.createLightboxFrame({type:Ye.a.LINK_AUTOFILL_MODAL,options:{apiKey:e._apiKey,stripeAccount:e._stripeAccount,locale:n||""},groupId:t._id}),c=function(){a=!0,i.show(),i.fadeInBackdrop()},s=function(){a=!1,i.fadeOutBackdrop()};i._on("open",(function(){c()})),i._on("cancel",(function(){s()}));var u=[];i._on("link-autofill-modal-authenticated",(function(e){o=!0,u.forEach((function(t){t({value:{email:e.emailAddress}})}))}));var l=[];return i._on("link-autofill-modal-autofill-info",(function(e){s(),l.forEach((function(t){t({empty:!e.info.hasPaymentDetails,value:{shippingAddress:e.info.shippingAddress,billingAddress:e.info.billingAddress}})}))})),{on:function(t,n){if("function"!=typeof n)throw new k.b("stripe.linkAutofill.on: Expected the handler to be a function.");switch(t){case"authenticated":u.push(x(n,e,"authenticationHandler"));break;case"autofill":l.push(x(n,e,"autofillHandler"));break;default:throw new k.b("stripe.linkAutofill.on: Expected either 'authenticated' or 'autofill' as an event name.")}},launch:function(e){var t=e.email;i.send({action:"stripe-link-autofill-modal-email-attempt",payload:{email:t}})},show:function(){o||r("show"),a||c()},logout:function(){if(o||r("logout"),a)throw new k.b("stripe.linkAutofill.logout can only be called when the modal is closed. Did you call it from outside a click event?");o=!1,i.send({action:"stripe-link-autofill-modal-logout",payload:{}})}}}(i._controller,e,i._locale)}),void 0,"linkAutofillModal")),this.confirmIdBankTransferPayment=si("confirmIdBankTransferPayment"),this.confirmIdBankTransferSetup=si("confirmIdBankTransferSetup"),(Object(j.d)(this._betas,j.a.id_bank_transfer_beta_1)||Object(j.d)(this._betas,j.a.id_bank_transfer_beta_2))&&(this.confirmIdBankTransferPayment=F((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return ha.apply(void 0,[i._controller,c()].concat(t))}),void 0,"confirmIdBankTransferPayment"),this.confirmIdBankTransferSetup=F((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return jo.apply(void 0,[i._controller,c()].concat(t))}),void 0,"confirmIdBankTransferSetup")),t&&(this.handleHosted3DS2Payment=D((function(e){return function(e,t){var n=Object(Bn.k)(e,"handleHosted3DS2Setup [internal]");return t.action.retrievePaymentIntent({intentSecret:n,hosted:!0}).then(Object(Ur.b)(t,!1,!0))}(e,i._controller)})),this.handleHosted3DS2Setup=D((function(e){return function(e,t){var n=Object(Bn.l)(e,"handleHosted3DS2Setup [internal]");return t.action.retrieveSetupIntent({intentSecret:n,hosted:!0}).then(Xa(t,!1,!0))}(e,i._controller)})))}},{key:"_attachLegacyPaymentIntentMethods",value:function(e){var t=this,n=Object(j.d)(this._betas,j.a.payment_intent_beta_1)||Object(j.d)(this._betas,j.a.payment_intent_beta_2),r=function(){return t._mids()},a=F((function(){for(var e=arguments.length,n=new Array(e),a=0;a<e;a++)n[a]=arguments[a];return ro.apply(void 0,[!0,t._controller,r()].concat(n))}),void 0,"confirmPaymentIntent"),o=F((function(){for(var e=arguments.length,n=new Array(e),a=0;a<e;a++)n[a]=arguments[a];return ro.apply(void 0,[!1,t._controller,r()].concat(n))}),void 0,"confirmPaymentIntent"),i=Object(W.a)(ao,ci("handleCardPayment")),c=F((function(){for(var e=arguments.length,a=new Array(e),o=0;o<e;o++)a[o]=arguments[o];return i.apply(void 0,[!0,t._controller,r(),n].concat(a))}),void 0,"handleCardPayment"),s=F((function(){for(var e=arguments.length,a=new Array(e),o=0;o<e;o++)a[o]=arguments[o];return i.apply(void 0,[!1,t._controller,r(),n].concat(a))}),void 0,"handleCardPayment"),u=Object(W.a)(Io,ci("handleCardSetup")),l=F((function(){for(var e=arguments.length,n=new Array(e),a=0;a<e;a++)n[a]=arguments[a];return u.apply(void 0,[t._controller,r()].concat(n))}),void 0,"handleCardSetup"),d=F((function(){for(var e=arguments.length,n=new Array(e),a=0;a<e;a++)n[a]=arguments[a];return To.apply(void 0,[t._controller,r()].concat(n))}),void 0,"confirmSetupIntent"),p=F((function(){for(var e=arguments.length,a=new Array(e),o=0;o<e;o++)a[o]=arguments[o];return oo.apply(void 0,[t._controller,r(),n].concat(a))}),void 0,"handleSepaDebitPayment"),f=F((function(){for(var e=arguments.length,n=new Array(e),a=0;a<e;a++)n[a]=arguments[a];return Co.apply(void 0,[t._controller,r()].concat(n))}),void 0,"handleSepaDebitSetup"),m=F((function(){for(var e=arguments.length,a=new Array(e),o=0;o<e;o++)a[o]=arguments[o];return io.apply(void 0,[!0,t._controller,r(),n].concat(a))}),void 0,"handleIdealPayment"),h=F((function(){for(var e=arguments.length,a=new Array(e),o=0;o<e;o++)a[o]=arguments[o];return io.apply(void 0,[!1,t._controller,r(),n].concat(a))}),void 0,"handleIdealPayment"),_=F((function(){for(var e=arguments.length,a=new Array(e),o=0;o<e;o++)a[o]=arguments[o];return co.apply(void 0,[t._controller,r(),n].concat(a))}),void 0,"handleFpxPayment");this.handleCardPayment=s,this.confirmPaymentIntent=o,this.handleCardSetup=l,this.confirmSetupIntent=d,this.fulfillPaymentIntent=si("fulfillPaymentIntent"),this.handleSepaDebitPayment=si("handleSepaDebitPayment"),this.handleSepaDebitSetup=si("handleSepaDebitSetup"),this.handleIdealPayment=si("handleIdealPayment"),this.handleFpxPayment=si("handleFpxPayment"),Object(j.d)(this._betas,j.a.payment_intent_beta_1)?this.fulfillPaymentIntent=c:(Object(j.d)(this._betas,j.a.payment_intent_beta_3)||Object(j.d)(this._betas,j.a.payment_intent_beta_2))&&(this.handleCardPayment=c),Object(j.d)(this._betas,j.a.payment_intent_beta_3)&&(this.confirmPaymentIntent=a,this.handleIdealPayment=m,this.handleSepaDebitPayment=p),Object(j.d)(this._betas,j.a.fpx_bank_beta_1)&&(this.handleFpxPayment=_),Object(j.d)(this._betas,j.a.ideal_pm_beta_1)&&(this.handleIdealPayment=h),Object(j.d)(this._betas,j.a.sepa_pm_beta_1)&&(this.handleSepaDebitPayment=p,this.handleSepaDebitSetup=f)}},{key:"_attachPrivateMethodsForCheckout",value:function(e){var t=this;e&&(this.sendInteractionEvent=Gt,this.tryNextAction=q((function(e){var n=Object(m.H)(un.f,e,"Payment Intent").value;return"payment_intent"===n.object?Object(Ur.c)(t._controller,n,"auto",!1):Ja(t._controller,n,"auto",!1)})))}},{key:"_attachCheckoutMethods",value:function(e){var t=this,n=function(){return t._mids()},r=e.reduce((function(e,t){var n=Object(w.a)(Ho.a,(function(e){return e===t}));return n?[].concat(Object(u.a)(e),[n]):e}),[]);this.redirectToCheckout=function(e){return Object(Go.a)(t._controller,r,n,t._locale,e)}}},{key:"_attachPrivateMethodsForConsumer",value:function(e){var t=this;e&&(this.__createConsumerPaymentDetails=q((function(e,n){var r,a={};if(!n.email)return E.a.reject(new k.b("You must pass email"));if(!e)return E.a.reject(new k.b("You must pass a clientSecret"));if(n.cardElement){if(!n.billing_details||!n.billing_details.country_code)return E.a.reject(new k.b("You must pass in billing_details.country_code if you are using the Card Element"));var o=Object(m.c)(n.cardElement);if(!o)return E.a.reject(new k.b("Card Element is invalid"));var i=o._implementation._frame.id,c=o._componentName;if("card"!==c&&"cardNumber"!==c)return E.a.reject(new k.b("Please provide a Card Element to __createConsumerPaymentDetails"));a={frameId:i,elementName:c,billingDetails:n.billing_details,requestSurface:n.request_surface}}else if(n.elements){var s;a={elementsId:null==n||null===(s=n.elements)||void 0===s?void 0:s._id,billingDetails:(null==n?void 0:n.billing_details)||{},requestSurface:null==n?void 0:n.request_surface}}return a.elementsId?t._controller.action.createConsumerPaymentDetails({email:n.email,clientSecret:e,billingDetails:a.billingDetails,isDefault:!!n.is_default,requestSurface:n.request_surface,elementsId:a.elementsId}):a.frameId&&a.elementName&&(null==n||null===(r=n.billing_details)||void 0===r?void 0:r.country_code)?t._controller.action.createConsumerPaymentDetails({email:n.email,clientSecret:e,billingDetails:a.billingDetails,isDefault:!!n.is_default,requestSurface:n.request_surface,frameId:a.frameId,elementName:a.elementName}):E.a.reject(new k.b("Please provide either an Elements or Card Element creation parameters to __createConsumerPaymentDetails."))}),void 0,"__createConsumerPaymentDetails"))}},{key:"_attachGetters",value:function(){var e=this,t=new Nr((function(t){e._registerWrapper({name:t,version:null})}));["elements","createToken","createSource","createPaymentMethod"].forEach((function(n){if(e.hasOwnProperty(n)){var r=e[n],a=function(){t.called(n);for(var e=arguments.length,a=new Array(e),o=0;o<e;o++)a[o]=arguments[o];return r.apply(this,a)};Object.defineProperty(e,n,{enumerable:!0,get:function(){return t.got(n),a}})}}))}},{key:"_attachIssuingCardMethods",value:function(e){var t=this;this.retrieveIssuingCard=ui("retrieveIssuingCard"),this.createEphemeralKeyNonce=ui("createEphemeralKeyNonce"),Object(j.d)(this._betas,j.a.issuing_elements_1)?this.retrieveIssuingCard=q((function(e,n){return function(e,t,n){var r=xo(e,"retrieveIssuingCard"),a=Do(t,"retrieveIssuingCard");return n.action.retrieveIssuingCardWithoutNonce({cardId:r,ephemeralKeySecret:a}).then(Kt)}(e,n,t._controller)})):Object(j.d)(this._betas,j.a.issuing_elements_2)&&(this.retrieveIssuingCard=q((function(e,n){return function(e,t,n){var r=xo(e,"retrieveIssuingCard"),a=Fo(t);return n.action.retrieveIssuingCard({cardId:r,ephemeralKeySecret:a.ephemeralKeySecret,publicNonce:a.publicNonce,expand:a.expand}).then(Kt)}(e,n,t._controller)})),this.createEphemeralKeyNonce=D((function(e){return Uo(e,t._controller)})))}},{key:"_attachIdentityMethods",value:function(e){var t=this;this.verifyIdentity=D((function(e){return No(e,t._controller)}))}},{key:"_attachControllerGetter",value:function(t,n,r,a,o){var i,c=this,u=[],l=document.readyState;Object.defineProperties(this,{_registerWrapper:{enumerable:!1,configurable:!0,writable:!1,value:function(e){u.push(e)}},_controller:{enumerable:!0,configurable:!0,get:function(){return function(){if(i)return i;var d=document.readyState;return i=new Ir(Object(s.a)({apiKey:c._apiKey,apiVersion:c._injectBetaHeader(t),__privateApiUrl:n,__privatePaymentUserAgentSuffix:r,stripeAccount:a,betas:c._betas,stripeJsId:e.stripeJsId,stripeJsLoadTimestamp:Zo,stripeCreateTimestamp:o,onFirstLoad:function(){try{oi(i,l,d)}catch(e){}},listenerRegistry:c._listenerRegistry},c._locale?{locale:c._locale}:{})),Object.defineProperties(c,{_registerWrapper:{value:di,writable:!1,enumerable:!1,configurable:!0},_controller:{value:i,writable:!0,enumerable:!0,configurable:!0}}),u.forEach((function(e){return c._registerWrapper(e)})),u.splice(0),i}()}}})}},{key:"_attachLinkedAccountsMethods",value:function(e){var t=this;this.collectFinancialConnectionsAccounts=D((function(e){return Tn(t._controller,e)})),this.collectBankAccountToken=D((function(e){return function(e,t){return Cn({linkAccountSessionCreatorClientSecret:t.clientSecret,linkAccountSessionCreatorType:"link_account_session",controller:e,consumerPublishableKey:null,checkoutPriceAmount:{amount:null,currency:null},email:null,linkMobilePhone:null,linkMobilePhoneCountry:null,useContinueButtonOnSuccess:!1}).then((function(e){if("error"in e)return e;var t=e.linkAccountSession,n=t.linkedAccounts,r=Object(f.a)(t,["linkedAccounts"]);return{token:e.linkAccountSession.bankAccountToken,linkAccountSession:e.linkAccountSession,financialConnectionsSession:Object(s.a)(Object(s.a)({},r),{},{accounts:n})}}))}(t._controller,e)}))}},{key:"_attachAppInfo",value:function(){var e=this;this.registerAppInfo=x((function(t){var n=Object(m.I)(pr,t,"WrapperLibrary");"error"!==n.type?e._controller.registerAppInfo(n.value):e._controller.warn("Failed to register your library: ".concat(n.error.message))}))}},{key:"_injectBetaHeader",value:function(e){return e}},{key:"_ensureHTTPS",value:function(){var e=window.location.protocol,t=-1!==["localhost","127.0.0.1","0.0.0.0"].indexOf(window.location.hostname),n=!0===window.isSecureContext&&!t||-1!==["https:","file:","ionic:","httpsionic:","chrome-extension:","moz-extension:"].indexOf(e),r=this._keyMode===He.a.live,a="Live Stripe.js integrations must use HTTPS. For more information: https://stripe.com/docs/security/guide#tls";if(!n){if(r&&!t)throw this._controller.report("user_error.non_https_error",{protocol:e}),new k.b(a);!r||t?window.console&&console.warn("You may test your Stripe.js integration over HTTP. However, live Stripe.js integrations must use HTTPS."):window.console&&console.warn(a)}}},{key:"_ensureHTTPOnlyLinkCookie",value:function(){if(!(this._keyMode===He.a.live)&&bt("stripe.link.persistent_token"))throw new k.b("`stripe.link.persistent_token` must be set as an httpOnly cookie. For more information https://stripe.com/docs/payments/link/accept-a-payment?platform=web#merchant-domain-cookie")}},{key:"_ensureStripeHosted",value:function(e){if(!e)throw this._controller.report("user_error.self_hosted"),new k.b("Stripe.js must be loaded from js.stripe.com. For more information https://stripe.com/docs/stripe-js/reference#including-stripejs")}},{key:"_mids",value:function(){return e._ec?e._ec.ids():null}},{key:"_midsPromise",value:function(){return e._ec?e._ec.idsPromise():E.a.resolve(this._mids())}}]),e}();li.version=3,li.stripeJsId=y(),li._ec=(ri=new RegExp("".concat(document.location.protocol,"//").concat(document.location.host)),"https://checkout.stripe.com/".match(ri)?null:Ut());var di=function(e){var t=Object(m.I)(dr,e,"StripeWrapperLibrary");if("error"!==t.type){var n=t.value,r=n.name,a=n.version,o=n.startTime;this._controller.registerWrapper({name:r,version:a,startTime:o})}else this._controller.report("register_wrapper.error",{error:t.error.message})},pi=li,fi=function(){if(document.currentScript){var e=Object(g.i)(document.currentScript.src);return!e||Object(g.g)(e.origin)}return!0}(),mi=function(e,t){return new pi(Object(s.a)({apiKey:e},t&&"object"==typeof t?t:{}),fi)};mi.version=pi.version,window.Stripe&&2===window.Stripe.version&&!window.Stripe.StripeV3?window.Stripe.StripeV3=mi:window.Stripe?window.console&&console.warn("It looks like Stripe.js was loaded more than one time. Please only load it once per page."):window.Stripe=mi;t.default=mi}]); diff --git a/public/js/sw.js b/public/js/sw.js new file mode 100644 index 0000000..c25d4b3 --- /dev/null +++ b/public/js/sw.js @@ -0,0 +1,75 @@ +const addResourcesToCache = async (resources) => { + const cache = await caches.open('v0'); + await cache.addAll(resources); +}; + +const putInCache = async (request, response) => { + const cache = await caches.open('v0'); + await cache.put(request, response); +}; + +const cacheFirst = async ({ request, preloadResponsePromise, fallbackUrl }) => { + // First try to get the resource from the cache + const responseFromCache = await caches.match(request); + if (responseFromCache) { + return responseFromCache; + } + + // Next try to use (and cache) the preloaded response, if it's there + const preloadResponse = await preloadResponsePromise; + if (preloadResponse) { + putInCache(request, preloadResponse.clone()); + return preloadResponse; + } + + // Next try to get the resource from the network + try { + const responseFromNetwork = await fetch(request); + putInCache(request, responseFromNetwork.clone()); + return responseFromNetwork; + } catch (_error) { + const fallbackResponse = await caches.match(fallbackUrl); + if (fallbackResponse) { + return fallbackResponse; + } + + return new Response('Network error happened', { + status: 408, + headers: { 'Content-Type': 'text/plain' }, + }); + } +}; + +const enableNavigationPreload = async () => { + if (self.registration.navigationPreload) { + await self.registration.navigationPreload.enable(); + } +}; + +self.addEventListener('activate', (event) => { + event.waitUntil(enableNavigationPreload()); +}); + +self.addEventListener('install', (event) => { + event.waitUntil( + addResourcesToCache([ + '/', + '/public/css/style.css', + '/public/manifest.json', + '/public/js/script.js', + '/public/js/userbase.js', + '/public/js/stripe.js', + '/public/js/sweetalert.js', + ]), + ); +}); + +self.addEventListener('fetch', (event) => { + event.respondWith( + cacheFirst({ + request: event.request, + preloadResponsePromise: event.preloadResponse, + fallbackUrl: '/', + }), + ); +}); diff --git a/public/js/sweetalert.js b/public/js/sweetalert.js new file mode 100644 index 0000000..cb7f489 --- /dev/null +++ b/public/js/sweetalert.js @@ -0,0 +1,2 @@ +!function (e, t) { "object" == typeof exports && "undefined" != typeof module ? module.exports = t() : "function" == typeof define && define.amd ? define(t) : (e = e || self).Sweetalert2 = t() }(this, function () { "use strict"; const D = "SweetAlert2:", q = e => e.charAt(0).toUpperCase() + e.slice(1), i = e => Array.prototype.slice.call(e), a = e => { console.warn("".concat(D, " ").concat("object" == typeof e ? e.join(" ") : e)) }, l = e => { console.error("".concat(D, " ").concat(e)) }, V = [], N = (e, t) => { e = '"'.concat(e, '" is deprecated and will be removed in the next major release. Please use "').concat(t, '" instead.'), V.includes(e) || (V.push(e), a(e)) }, R = e => "function" == typeof e ? e() : e, F = e => e && "function" == typeof e.toPromise, u = e => F(e) ? e.toPromise() : Promise.resolve(e), U = e => e && Promise.resolve(e) === e; const r = { title: "", titleText: "", text: "", html: "", footer: "", icon: void 0, iconColor: void 0, iconHtml: void 0, template: void 0, toast: !1, showClass: { popup: "swal2-show", backdrop: "swal2-backdrop-show", icon: "swal2-icon-show" }, hideClass: { popup: "swal2-hide", backdrop: "swal2-backdrop-hide", icon: "swal2-icon-hide" }, customClass: {}, target: "body", color: void 0, backdrop: !0, heightAuto: !0, allowOutsideClick: !0, allowEscapeKey: !0, allowEnterKey: !0, stopKeydownPropagation: !0, keydownListenerCapture: !1, showConfirmButton: !0, showDenyButton: !1, showCancelButton: !1, preConfirm: void 0, preDeny: void 0, confirmButtonText: "OK", confirmButtonAriaLabel: "", confirmButtonColor: void 0, denyButtonText: "No", denyButtonAriaLabel: "", denyButtonColor: void 0, cancelButtonText: "Cancel", cancelButtonAriaLabel: "", cancelButtonColor: void 0, buttonsStyling: !0, reverseButtons: !1, focusConfirm: !0, focusDeny: !1, focusCancel: !1, returnFocus: !0, showCloseButton: !1, closeButtonHtml: "×", closeButtonAriaLabel: "Close this dialog", loaderHtml: "", showLoaderOnConfirm: !1, showLoaderOnDeny: !1, imageUrl: void 0, imageWidth: void 0, imageHeight: void 0, imageAlt: "", timer: void 0, timerProgressBar: !1, width: void 0, padding: void 0, background: void 0, input: void 0, inputPlaceholder: "", inputLabel: "", inputValue: "", inputOptions: {}, inputAutoTrim: !0, inputAttributes: {}, inputValidator: void 0, returnInputValueOnDeny: !1, validationMessage: void 0, grow: !1, position: "center", progressSteps: [], currentProgressStep: void 0, progressStepsDistance: void 0, willOpen: void 0, didOpen: void 0, didRender: void 0, willClose: void 0, didClose: void 0, didDestroy: void 0, scrollbarPadding: !0 }, W = ["allowEscapeKey", "allowOutsideClick", "background", "buttonsStyling", "cancelButtonAriaLabel", "cancelButtonColor", "cancelButtonText", "closeButtonAriaLabel", "closeButtonHtml", "color", "confirmButtonAriaLabel", "confirmButtonColor", "confirmButtonText", "currentProgressStep", "customClass", "denyButtonAriaLabel", "denyButtonColor", "denyButtonText", "didClose", "didDestroy", "footer", "hideClass", "html", "icon", "iconColor", "iconHtml", "imageAlt", "imageHeight", "imageUrl", "imageWidth", "preConfirm", "preDeny", "progressSteps", "returnFocus", "reverseButtons", "showCancelButton", "showCloseButton", "showConfirmButton", "showDenyButton", "text", "title", "titleText", "willClose"], z = {}, K = ["allowOutsideClick", "allowEnterKey", "backdrop", "focusConfirm", "focusDeny", "focusCancel", "returnFocus", "heightAuto", "keydownListenerCapture"], _ = e => Object.prototype.hasOwnProperty.call(r, e), Y = e => -1 !== W.indexOf(e), Z = e => z[e], X = e => { !e.backdrop && e.allowOutsideClick && a('"allowOutsideClick" parameter requires `backdrop` parameter to be set to `true`'); for (const n in e) t = n, _(t) || a('Unknown parameter "'.concat(t, '"')), e.toast && (t = n, K.includes(t) && a('The parameter "'.concat(t, '" is incompatible with toasts'))), t = n, Z(t) && N(t, Z(t)); var t }; var e = e => { const t = {}; for (const n in e) t[e[n]] = "swal2-" + e[n]; return t }; const p = e(["container", "shown", "height-auto", "iosfix", "popup", "modal", "no-backdrop", "no-transition", "toast", "toast-shown", "show", "hide", "close", "title", "html-container", "actions", "confirm", "deny", "cancel", "default-outline", "footer", "icon", "icon-content", "image", "input", "file", "range", "select", "radio", "checkbox", "label", "textarea", "inputerror", "input-label", "validation-message", "progress-steps", "active-progress-step", "progress-step", "progress-step-line", "loader", "loading", "styled", "top", "top-start", "top-end", "top-left", "top-right", "center", "center-start", "center-end", "center-left", "center-right", "bottom", "bottom-start", "bottom-end", "bottom-left", "bottom-right", "grow-row", "grow-column", "grow-fullscreen", "rtl", "timer-progress-bar", "timer-progress-bar-container", "scrollbar-measure", "icon-success", "icon-warning", "icon-info", "icon-question", "icon-error", "no-war"]), o = e(["success", "warning", "info", "question", "error"]), m = () => document.body.querySelector(".".concat(p.container)), $ = e => { const t = m(); return t ? t.querySelector(e) : null }, t = e => $(".".concat(e)), g = () => t(p.popup), J = () => t(p.icon), G = () => t(p.title), Q = () => t(p["html-container"]), ee = () => t(p.image), te = () => t(p["progress-steps"]), ne = () => t(p["validation-message"]), h = () => $(".".concat(p.actions, " .").concat(p.confirm)), f = () => $(".".concat(p.actions, " .").concat(p.deny)); const d = () => $(".".concat(p.loader)), b = () => $(".".concat(p.actions, " .").concat(p.cancel)), oe = () => t(p.actions), ie = () => t(p.footer), ae = () => t(p["timer-progress-bar"]), re = () => t(p.close), se = () => { const e = i(g().querySelectorAll('[tabindex]:not([tabindex="-1"]):not([tabindex="0"])')).sort((e, t) => { e = parseInt(e.getAttribute("tabindex")), t = parseInt(t.getAttribute("tabindex")); return t < e ? 1 : e < t ? -1 : 0 }); var t = i(g().querySelectorAll('\n a[href],\n area[href],\n input:not([disabled]),\n select:not([disabled]),\n textarea:not([disabled]),\n button:not([disabled]),\n iframe,\n object,\n embed,\n [tabindex="0"],\n [contenteditable],\n audio[controls],\n video[controls],\n summary\n')).filter(e => "-1" !== e.getAttribute("tabindex")); return (t => { const n = []; for (let e = 0; e < t.length; e++)-1 === n.indexOf(t[e]) && n.push(t[e]); return n })(e.concat(t)).filter(e => B(e)) }, ce = () => s(document.body, p.shown) && !s(document.body, p["toast-shown"]) && !s(document.body, p["no-backdrop"]), le = () => g() && s(g(), p.toast); function ue(e) { var t = 1 < arguments.length && void 0 !== arguments[1] && arguments[1]; const n = ae(); B(n) && (t && (n.style.transition = "none", n.style.width = "100%"), setTimeout(() => { n.style.transition = "width ".concat(e / 1e3, "s linear"), n.style.width = "0%" }, 10)) } const n = { previousBodyPadding: null }, v = (t, e) => { if (t.textContent = "", e) { const n = new DOMParser, o = n.parseFromString(e, "text/html"); i(o.querySelector("head").childNodes).forEach(e => { t.appendChild(e) }), i(o.querySelector("body").childNodes).forEach(e => { t.appendChild(e) }) } }, s = (t, e) => { if (!e) return !1; var n = e.split(/\s+/); for (let e = 0; e < n.length; e++)if (!t.classList.contains(n[e])) return !1; return !0 }, de = (t, n) => { i(t.classList).forEach(e => { Object.values(p).includes(e) || Object.values(o).includes(e) || Object.values(n.showClass).includes(e) || t.classList.remove(e) }) }, y = (e, t, n) => { if (de(e, t), t.customClass && t.customClass[n]) { if ("string" != typeof t.customClass[n] && !t.customClass[n].forEach) return a("Invalid type of customClass.".concat(n, '! Expected string or iterable object, got "').concat(typeof t.customClass[n], '"')); w(e, t.customClass[n]) } }, pe = (e, t) => { if (!t) return null; switch (t) { case "select": case "textarea": case "file": return e.querySelector(".".concat(p.popup, " > .").concat(p[t])); case "checkbox": return e.querySelector(".".concat(p.popup, " > .").concat(p.checkbox, " input")); case "radio": return e.querySelector(".".concat(p.popup, " > .").concat(p.radio, " input:checked")) || e.querySelector(".".concat(p.popup, " > .").concat(p.radio, " input:first-child")); case "range": return e.querySelector(".".concat(p.popup, " > .").concat(p.range, " input")); default: return e.querySelector(".".concat(p.popup, " > .").concat(p.input)) } }, me = e => { var t; e.focus(), "file" !== e.type && (t = e.value, e.value = "", e.value = t) }, ge = (e, t, n) => { e && t && (t = "string" == typeof t ? t.split(/\s+/).filter(Boolean) : t).forEach(t => { Array.isArray(e) ? e.forEach(e => { n ? e.classList.add(t) : e.classList.remove(t) }) : n ? e.classList.add(t) : e.classList.remove(t) }) }, w = (e, t) => { ge(e, t, !0) }, C = (e, t) => { ge(e, t, !1) }, A = (e, t) => { var n = i(e.childNodes); for (let e = 0; e < n.length; e++)if (s(n[e], t)) return n[e] }, c = (e, t, n) => { (n = n === "".concat(parseInt(n)) ? parseInt(n) : n) || 0 === parseInt(n) ? e.style[t] = "number" == typeof n ? "".concat(n, "px") : n : e.style.removeProperty(t) }, k = function (e) { e.style.display = 1 < arguments.length && void 0 !== arguments[1] ? arguments[1] : "flex" }, P = e => { e.style.display = "none" }, he = (e, t, n, o) => { const i = e.querySelector(t); i && (i.style[n] = o) }, fe = function (e, t) { var n = 2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : "flex"; t ? k(e, n) : P(e) }, B = e => !(!e || !(e.offsetWidth || e.offsetHeight || e.getClientRects().length)), be = () => !B(h()) && !B(f()) && !B(b()), ve = e => !!(e.scrollHeight > e.clientHeight), ye = e => { const t = window.getComputedStyle(e); var e = parseFloat(t.getPropertyValue("animation-duration") || "0"), n = parseFloat(t.getPropertyValue("transition-duration") || "0"); return 0 < e || 0 < n }, we = () => "undefined" == typeof window || "undefined" == typeof document, Ce = 100, x = {}, Ae = () => { x.previousActiveElement instanceof HTMLElement ? (x.previousActiveElement.focus(), x.previousActiveElement = null) : document.body && document.body.focus() }, ke = o => new Promise(e => { if (!o) return e(); var t = window.scrollX, n = window.scrollY; x.restoreFocusTimeout = setTimeout(() => { Ae(), e() }, Ce), window.scrollTo(t, n) }), Pe = '\n <div aria-labelledby="'.concat(p.title, '" aria-describedby="').concat(p["html-container"], '" class="').concat(p.popup, '" tabindex="-1">\n <button type="button" class="').concat(p.close, '"></button>\n <ul class="').concat(p["progress-steps"], '"></ul>\n <div class="').concat(p.icon, '"></div>\n <img class="').concat(p.image, '" />\n <h2 class="').concat(p.title, '" id="').concat(p.title, '"></h2>\n <div class="').concat(p["html-container"], '" id="').concat(p["html-container"], '"></div>\n <input class="').concat(p.input, '" />\n <input type="file" class="').concat(p.file, '" />\n <div class="').concat(p.range, '">\n <input type="range" />\n <output></output>\n </div>\n <select class="').concat(p.select, '"></select>\n <div class="').concat(p.radio, '"></div>\n <label for="').concat(p.checkbox, '" class="').concat(p.checkbox, '">\n <input type="checkbox" />\n <span class="').concat(p.label, '"></span>\n </label>\n <textarea class="').concat(p.textarea, '"></textarea>\n <div class="').concat(p["validation-message"], '" id="').concat(p["validation-message"], '"></div>\n <div class="').concat(p.actions, '">\n <div class="').concat(p.loader, '"></div>\n <button type="button" class="').concat(p.confirm, '"></button>\n <button type="button" class="').concat(p.deny, '"></button>\n <button type="button" class="').concat(p.cancel, '"></button>\n </div>\n <div class="').concat(p.footer, '"></div>\n <div class="').concat(p["timer-progress-bar-container"], '">\n <div class="').concat(p["timer-progress-bar"], '"></div>\n </div>\n </div>\n').replace(/(^|\n)\s*/g, ""), Be = () => { const e = m(); return !!e && (e.remove(), C([document.documentElement, document.body], [p["no-backdrop"], p["toast-shown"], p["has-column"]]), !0) }, E = () => { x.currentInstance.resetValidationMessage() }, xe = () => { const e = g(), t = A(e, p.input), n = A(e, p.file), o = e.querySelector(".".concat(p.range, " input")), i = e.querySelector(".".concat(p.range, " output")), a = A(e, p.select), r = e.querySelector(".".concat(p.checkbox, " input")), s = A(e, p.textarea); t.oninput = E, n.onchange = E, a.onchange = E, r.onchange = E, s.oninput = E, o.oninput = () => { E(), i.value = o.value }, o.onchange = () => { E(), i.value = o.value } }, Ee = e => "string" == typeof e ? document.querySelector(e) : e, Te = e => { const t = g(); t.setAttribute("role", e.toast ? "alert" : "dialog"), t.setAttribute("aria-live", e.toast ? "polite" : "assertive"), e.toast || t.setAttribute("aria-modal", "true") }, Se = e => { "rtl" === window.getComputedStyle(e).direction && w(m(), p.rtl) }, Le = (e, t) => { if (e instanceof HTMLElement) t.appendChild(e); else if ("object" == typeof e) { var n = e, o = t; if (n.jquery) Oe(o, n); else v(o, n.toString()) } else e && v(t, e) }, Oe = (t, n) => { if (t.textContent = "", 0 in n) for (let e = 0; e in n; e++)t.appendChild(n[e].cloneNode(!0)); else t.appendChild(n.cloneNode(!0)) }, je = (() => { if (we()) return !1; var e = document.createElement("div"), t = { WebkitAnimation: "webkitAnimationEnd", animation: "animationend" }; for (const n in t) if (Object.prototype.hasOwnProperty.call(t, n) && void 0 !== e.style[n]) return t[n]; return !1 })(), Me = (e, t) => { var n, o, i, a, r, s = oe(), c = d(); (t.showConfirmButton || t.showDenyButton || t.showCancelButton ? k : P)(s), y(s, t, "actions"), s = s, n = c, o = t, i = h(), a = f(), r = b(), He(i, "confirm", o), He(a, "deny", o), He(r, "cancel", o), function (e, t, n, o) { if (!o.buttonsStyling) return C([e, t, n], p.styled); w([e, t, n], p.styled), o.confirmButtonColor && (e.style.backgroundColor = o.confirmButtonColor, w(e, p["default-outline"])); o.denyButtonColor && (t.style.backgroundColor = o.denyButtonColor, w(t, p["default-outline"])); o.cancelButtonColor && (n.style.backgroundColor = o.cancelButtonColor, w(n, p["default-outline"])) }(i, a, r, o), o.reverseButtons && (o.toast ? (s.insertBefore(r, i), s.insertBefore(a, i)) : (s.insertBefore(r, n), s.insertBefore(a, n), s.insertBefore(i, n))), v(c, t.loaderHtml), y(c, t, "loader") }; function He(e, t, n) { fe(e, n["show".concat(q(t), "Button")], "inline-block"), v(e, n["".concat(t, "ButtonText")]), e.setAttribute("aria-label", n["".concat(t, "ButtonAriaLabel")]), e.className = p[t], y(e, n, "".concat(t, "Button")), w(e, n["".concat(t, "ButtonClass")]) } const Ie = (e, t) => { var n, o, i = m(); i && (o = i, "string" == typeof (n = t.backdrop) ? o.style.background = n : n || w([document.documentElement, document.body], p["no-backdrop"]), o = i, (n = t.position) in p ? w(o, p[n]) : (a('The "position" parameter is not valid, defaulting to "center"'), w(o, p.center)), n = i, (o = t.grow) && "string" == typeof o && (o = "grow-".concat(o)) in p && w(n, p[o]), y(i, t, "container")) }; var T = { awaitingPromise: new WeakMap, promise: new WeakMap, innerParams: new WeakMap, domCache: new WeakMap }; const De = ["input", "file", "range", "select", "radio", "checkbox", "textarea"], qe = (e, r) => { const s = g(); var t, e = T.innerParams.get(e); const c = !e || r.input !== e.input; De.forEach(e => { const t = A(s, p[e]); { var n = e, o = r.inputAttributes; const i = pe(g(), n); if (i) { Ve(i); for (const a in o) i.setAttribute(a, o[a]) } } t.className = p[e], c && P(t) }), r.input && (c && (e => { if (!S[e.input]) return l('Unexpected type of input! Expected "text", "email", "password", "number", "tel", "select", "radio", "checkbox", "textarea", "file" or "url", got "'.concat(e.input, '"')); const t = Fe(e.input), n = S[e.input](t, e); k(t), setTimeout(() => { me(n) }) })(r), e = r, t = Fe(e.input), "object" == typeof e.customClass && w(t, e.customClass.input)) }, Ve = t => { for (let e = 0; e < t.attributes.length; e++) { var n = t.attributes[e].name;["type", "value", "style"].includes(n) || t.removeAttribute(n) } }, Ne = (e, t) => { e.placeholder && !t.inputPlaceholder || (e.placeholder = t.inputPlaceholder) }, Re = (e, t, n) => { if (n.inputLabel) { e.id = p.input; const i = document.createElement("label"); var o = p["input-label"]; i.setAttribute("for", e.id), i.className = o, "object" == typeof n.customClass && w(i, n.customClass.inputLabel), i.innerText = n.inputLabel, t.insertAdjacentElement("beforebegin", i) } }, Fe = e => A(g(), p[e] || p.input), Ue = (e, t) => { ["string", "number"].includes(typeof t) ? e.value = "".concat(t) : U(t) || a('Unexpected type of inputValue! Expected "string", "number" or "Promise", got "'.concat(typeof t, '"')) }, S = {}, We = (S.text = S.email = S.password = S.number = S.tel = S.url = (e, t) => (Ue(e, t.inputValue), Re(e, e, t), Ne(e, t), e.type = t.input, e), S.file = (e, t) => (Re(e, e, t), Ne(e, t), e), S.range = (e, t) => { const n = e.querySelector("input"); var o = e.querySelector("output"); return Ue(n, t.inputValue), n.type = t.input, Ue(o, t.inputValue), Re(n, e, t), e }, S.select = (e, t) => { if (e.textContent = "", t.inputPlaceholder) { const n = document.createElement("option"); v(n, t.inputPlaceholder), n.value = "", n.disabled = !0, n.selected = !0, e.appendChild(n) } return Re(e, e, t), e }, S.radio = e => (e.textContent = "", e), S.checkbox = (e, t) => { const n = pe(g(), "checkbox"); n.value = "1", n.id = p.checkbox, n.checked = Boolean(t.inputValue); e = e.querySelector("span"); return v(e, t.inputPlaceholder), n }, S.textarea = (n, e) => { Ue(n, e.inputValue), Ne(n, e), Re(n, n, e); return setTimeout(() => { if ("MutationObserver" in window) { const t = parseInt(window.getComputedStyle(g()).width); new MutationObserver(() => { var e = n.offsetWidth + (e = n, parseInt(window.getComputedStyle(e).marginLeft) + parseInt(window.getComputedStyle(e).marginRight)); e > t ? g().style.width = "".concat(e, "px") : g().style.width = null }).observe(n, { attributes: !0, attributeFilter: ["style"] }) } }), n }, (e, t) => { const n = Q(); y(n, t, "htmlContainer"), t.html ? (Le(t.html, n), k(n, "block")) : t.text ? (n.textContent = t.text, k(n, "block")) : P(n), qe(e, t) }), ze = (e, t) => { var n = ie(); fe(n, t.footer), t.footer && Le(t.footer, n), y(n, t, "footer") }, Ke = (e, t) => { const n = re(); v(n, t.closeButtonHtml), y(n, t, "closeButton"), fe(n, t.showCloseButton), n.setAttribute("aria-label", t.closeButtonAriaLabel) }, _e = (e, t) => { var e = T.innerParams.get(e), n = J(); if (e && t.icon === e.icon) return Je(n, t), void Ye(n, t); if (t.icon || t.iconHtml) { if (t.icon && -1 === Object.keys(o).indexOf(t.icon)) return l('Unknown icon! Expected "success", "error", "warning", "info" or "question", got "'.concat(t.icon, '"')), void P(n); k(n), Je(n, t), Ye(n, t), w(n, t.showClass.icon) } else P(n) }, Ye = (e, t) => { for (const n in o) t.icon !== n && C(e, o[n]); w(e, o[t.icon]), Ge(e, t), Ze(), y(e, t, "icon") }, Ze = () => { const e = g(); var t = window.getComputedStyle(e).getPropertyValue("background-color"); const n = e.querySelectorAll("[class^=swal2-success-circular-line], .swal2-success-fix"); for (let e = 0; e < n.length; e++)n[e].style.backgroundColor = t }, Xe = '\n <div class="swal2-success-circular-line-left"></div>\n <span class="swal2-success-line-tip"></span> <span class="swal2-success-line-long"></span>\n <div class="swal2-success-ring"></div> <div class="swal2-success-fix"></div>\n <div class="swal2-success-circular-line-right"></div>\n', $e = '\n <span class="swal2-x-mark">\n <span class="swal2-x-mark-line-left"></span>\n <span class="swal2-x-mark-line-right"></span>\n </span>\n', Je = (e, t) => { let n = e.innerHTML, o; var i; t.iconHtml ? o = Qe(t.iconHtml) : "success" === t.icon ? (o = Xe, n = n.replace(/ style=".*?"/g, "")) : o = "error" === t.icon ? $e : (i = { question: "?", warning: "!", info: "i" }, Qe(i[t.icon])), n.trim() !== o.trim() && v(e, o) }, Ge = (e, t) => { if (t.iconColor) { e.style.color = t.iconColor, e.style.borderColor = t.iconColor; for (const n of [".swal2-success-line-tip", ".swal2-success-line-long", ".swal2-x-mark-line-left", ".swal2-x-mark-line-right"]) he(e, n, "backgroundColor", t.iconColor); he(e, ".swal2-success-ring", "borderColor", t.iconColor) } }, Qe = e => '<div class="'.concat(p["icon-content"], '">').concat(e, "</div>"), et = (e, t) => { const n = ee(); if (!t.imageUrl) return P(n); k(n, ""), n.setAttribute("src", t.imageUrl), n.setAttribute("alt", t.imageAlt), c(n, "width", t.imageWidth), c(n, "height", t.imageHeight), n.className = p.image, y(n, t, "image") }, tt = (e, n) => { const o = te(); if (!n.progressSteps || 0 === n.progressSteps.length) return P(o); k(o), o.textContent = "", n.currentProgressStep >= n.progressSteps.length && a("Invalid currentProgressStep parameter, it should be less than progressSteps.length (currentProgressStep like JS arrays starts from 0)"), n.progressSteps.forEach((e, t) => { var e = (e => { const t = document.createElement("li"); return w(t, p["progress-step"]), v(t, e), t })(e); o.appendChild(e), t === n.currentProgressStep && w(e, p["active-progress-step"]), t !== n.progressSteps.length - 1 && (e = (e => { const t = document.createElement("li"); if (w(t, p["progress-step-line"]), e.progressStepsDistance) c(t, "width", e.progressStepsDistance); return t })(n), o.appendChild(e)) }) }, nt = (e, t) => { const n = G(); fe(n, t.title || t.titleText, "block"), t.title && Le(t.title, n), t.titleText && (n.innerText = t.titleText), y(n, t, "title") }, ot = (e, t) => { var n = m(); const o = g(); t.toast ? (c(n, "width", t.width), o.style.width = "100%", o.insertBefore(d(), J())) : c(o, "width", t.width), c(o, "padding", t.padding), t.color && (o.style.color = t.color), t.background && (o.style.background = t.background), P(ne()); n = o; (n.className = "".concat(p.popup, " ").concat(B(n) ? t.showClass.popup : ""), t.toast) ? (w([document.documentElement, document.body], p["toast-shown"]), w(n, p.toast)) : w(n, p.modal); y(n, t, "popup"), "string" == typeof t.customClass && w(n, t.customClass); t.icon && w(n, p["icon-".concat(t.icon)]) }, it = (e, t) => { ot(e, t), Ie(e, t), tt(e, t), _e(e, t), et(e, t), nt(e, t), Ke(e, t), We(e, t), Me(e, t), ze(e, t), "function" == typeof t.didRender && t.didRender(g()) }, L = Object.freeze({ cancel: "cancel", backdrop: "backdrop", close: "close", esc: "esc", timer: "timer" }), at = () => { const e = i(document.body.children); e.forEach(e => { e === m() || e.contains(m()) || (e.hasAttribute("aria-hidden") && e.setAttribute("data-previous-aria-hidden", e.getAttribute("aria-hidden")), e.setAttribute("aria-hidden", "true")) }) }, rt = () => { const e = i(document.body.children); e.forEach(e => { e.hasAttribute("data-previous-aria-hidden") ? (e.setAttribute("aria-hidden", e.getAttribute("data-previous-aria-hidden")), e.removeAttribute("data-previous-aria-hidden")) : e.removeAttribute("aria-hidden") }) }, st = ["swal-title", "swal-html", "swal-footer"], ct = e => { const n = {}; return i(e.querySelectorAll("swal-param")).forEach(e => { O(e, ["name", "value"]); var t = e.getAttribute("name"), e = e.getAttribute("value"); "boolean" == typeof r[t] && "false" === e && (n[t] = !1), "object" == typeof r[t] && (n[t] = JSON.parse(e)) }), n }, lt = e => { const n = {}; return i(e.querySelectorAll("swal-button")).forEach(e => { O(e, ["type", "color", "aria-label"]); var t = e.getAttribute("type"); n["".concat(t, "ButtonText")] = e.innerHTML, n["show".concat(q(t), "Button")] = !0, e.hasAttribute("color") && (n["".concat(t, "ButtonColor")] = e.getAttribute("color")), e.hasAttribute("aria-label") && (n["".concat(t, "ButtonAriaLabel")] = e.getAttribute("aria-label")) }), n }, ut = e => { const t = {}, n = e.querySelector("swal-image"); return n && (O(n, ["src", "width", "height", "alt"]), n.hasAttribute("src") && (t.imageUrl = n.getAttribute("src")), n.hasAttribute("width") && (t.imageWidth = n.getAttribute("width")), n.hasAttribute("height") && (t.imageHeight = n.getAttribute("height")), n.hasAttribute("alt") && (t.imageAlt = n.getAttribute("alt"))), t }, dt = e => { const t = {}, n = e.querySelector("swal-icon"); return n && (O(n, ["type", "color"]), n.hasAttribute("type") && (t.icon = n.getAttribute("type")), n.hasAttribute("color") && (t.iconColor = n.getAttribute("color")), t.iconHtml = n.innerHTML), t }, pt = e => { const n = {}, t = e.querySelector("swal-input"); t && (O(t, ["type", "label", "placeholder", "value"]), n.input = t.getAttribute("type") || "text", t.hasAttribute("label") && (n.inputLabel = t.getAttribute("label")), t.hasAttribute("placeholder") && (n.inputPlaceholder = t.getAttribute("placeholder")), t.hasAttribute("value") && (n.inputValue = t.getAttribute("value"))); e = e.querySelectorAll("swal-input-option"); return e.length && (n.inputOptions = {}, i(e).forEach(e => { O(e, ["value"]); var t = e.getAttribute("value"), e = e.innerHTML; n.inputOptions[t] = e })), n }, mt = (e, t) => { const n = {}; for (const o in t) { const i = t[o], a = e.querySelector(i); a && (O(a, []), n[i.replace(/^swal-/, "")] = a.innerHTML.trim()) } return n }, gt = e => { const t = st.concat(["swal-param", "swal-button", "swal-image", "swal-icon", "swal-input", "swal-input-option"]); i(e.children).forEach(e => { e = e.tagName.toLowerCase(); -1 === t.indexOf(e) && a("Unrecognized element <".concat(e, ">")) }) }, O = (t, n) => { i(t.attributes).forEach(e => { -1 === n.indexOf(e.name) && a(['Unrecognized attribute "'.concat(e.name, '" on <').concat(t.tagName.toLowerCase(), ">."), "".concat(n.length ? "Allowed attributes are: ".concat(n.join(", ")) : "To set the value, use HTML within the element.")]) }) }; var ht = { email: (e, t) => /^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9-]{2,24}$/.test(e) ? Promise.resolve() : Promise.resolve(t || "Invalid email address"), url: (e, t) => /^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-z]{2,63}\b([-a-zA-Z0-9@:%_+.~#?&/=]*)$/.test(e) ? Promise.resolve() : Promise.resolve(t || "Invalid URL") }; function ft(e) { (t = e).inputValidator || Object.keys(ht).forEach(e => { t.input === e && (t.inputValidator = ht[e]) }), e.showLoaderOnConfirm && !e.preConfirm && a("showLoaderOnConfirm is set to true, but preConfirm is not defined.\nshowLoaderOnConfirm should be used together with preConfirm, see usage example:\nhttps://sweetalert2.github.io/#ajax-request"), (n = e).target && ("string" != typeof n.target || document.querySelector(n.target)) && ("string" == typeof n.target || n.target.appendChild) || (a('Target parameter is not valid, defaulting to "body"'), n.target = "body"), "string" == typeof e.title && (e.title = e.title.split("\n").join("<br />")); var t, n = e, e = Be(); if (we()) l("SweetAlert2 requires document to initialize"); else { const o = document.createElement("div"), i = (o.className = p.container, e && w(o, p["no-transition"]), v(o, Pe), Ee(n.target)); i.appendChild(o), Te(n), Se(i), xe() } } class bt { constructor(e, t) { this.callback = e, this.remaining = t, this.running = !1, this.start() } start() { return this.running || (this.running = !0, this.started = new Date, this.id = setTimeout(this.callback, this.remaining)), this.remaining } stop() { return this.running && (this.running = !1, clearTimeout(this.id), this.remaining -= (new Date).getTime() - this.started.getTime()), this.remaining } increase(e) { var t = this.running; return t && this.stop(), this.remaining += e, t && this.start(), this.remaining } getTimerLeft() { return this.running && (this.stop(), this.start()), this.remaining } isRunning() { return this.running } } const vt = () => { null === n.previousBodyPadding && document.body.scrollHeight > window.innerHeight && (n.previousBodyPadding = parseInt(window.getComputedStyle(document.body).getPropertyValue("padding-right")), document.body.style.paddingRight = "".concat(n.previousBodyPadding + (() => { const e = document.createElement("div"); e.className = p["scrollbar-measure"], document.body.appendChild(e); var t = e.getBoundingClientRect().width - e.clientWidth; return document.body.removeChild(e), t })(), "px")) }, yt = () => { null !== n.previousBodyPadding && (document.body.style.paddingRight = "".concat(n.previousBodyPadding, "px"), n.previousBodyPadding = null) }, wt = () => { if ((/iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream || "MacIntel" === navigator.platform && 1 < navigator.maxTouchPoints) && !s(document.body, p.iosfix)) { var e, t = document.body.scrollTop; document.body.style.top = "".concat(-1 * t, "px"), w(document.body, p.iosfix); { const n = m(); let t; n.ontouchstart = e => { t = Ct(e) }, n.ontouchmove = e => { t && (e.preventDefault(), e.stopPropagation()) } } { const o = navigator.userAgent, i = !!o.match(/iPad/i) || !!o.match(/iPhone/i), a = !!o.match(/WebKit/i), r = i && a && !o.match(/CriOS/i); r && (e = 44, g().scrollHeight > window.innerHeight - 44 && (m().style.paddingBottom = "".concat(44, "px"))) } } }, Ct = e => { var t, n = e.target, o = m(); return !((t = e).touches && t.touches.length && "stylus" === t.touches[0].touchType || (t = e).touches && 1 < t.touches.length) && (n === o || !(ve(o) || "INPUT" === n.tagName || "TEXTAREA" === n.tagName || ve(Q()) && Q().contains(n))) }, At = () => { var e; s(document.body, p.iosfix) && (e = parseInt(document.body.style.top, 10), C(document.body, p.iosfix), document.body.style.top = "", document.body.scrollTop = -1 * e) }, kt = 10, Pt = e => { const t = g(); if (e.target === t) { const n = m(); t.removeEventListener(je, Pt), n.style.overflowY = "auto" } }, Bt = (e, t) => { je && ye(t) ? (e.style.overflowY = "hidden", t.addEventListener(je, Pt)) : e.style.overflowY = "auto" }, xt = (e, t, n) => { wt(), t && "hidden" !== n && vt(), setTimeout(() => { e.scrollTop = 0 }) }, Et = (e, t, n) => { w(e, n.showClass.backdrop), t.style.setProperty("opacity", "0", "important"), k(t, "grid"), setTimeout(() => { w(t, n.showClass.popup), t.style.removeProperty("opacity") }, kt), w([document.documentElement, document.body], p.shown), n.heightAuto && n.backdrop && !n.toast && w([document.documentElement, document.body], p["height-auto"]) }, j = e => { let t = g(); t || new kn, t = g(); var n = d(); if (le()) P(J()); else { var o = t; const i = oe(), a = d(); !e && B(h()) && (e = h()); k(i), e && (P(e), a.setAttribute("data-button-to-replace", e.className)); a.parentNode.insertBefore(a, e), w([o, i], p.loading) } k(n), t.setAttribute("data-loading", "true"), t.setAttribute("aria-busy", "true"), t.focus() }, Tt = (t, n) => { const o = g(), i = e => Lt[n.input](o, Ot(e), n); F(n.inputOptions) || U(n.inputOptions) ? (j(h()), u(n.inputOptions).then(e => { t.hideLoading(), i(e) })) : "object" == typeof n.inputOptions ? i(n.inputOptions) : l("Unexpected type of inputOptions! Expected object, Map or Promise, got ".concat(typeof n.inputOptions)) }, St = (t, n) => { const o = t.getInput(); P(o), u(n.inputValue).then(e => { o.value = "number" === n.input ? parseFloat(e) || 0 : "".concat(e), k(o), o.focus(), t.hideLoading() }).catch(e => { l("Error in inputValue promise: ".concat(e)), o.value = "", k(o), o.focus(), t.hideLoading() }) }, Lt = { select: (e, t, i) => { const a = A(e, p.select), r = (e, t, n) => { const o = document.createElement("option"); o.value = n, v(o, t), o.selected = jt(n, i.inputValue), e.appendChild(o) }; t.forEach(e => { var t = e[0]; const n = e[1]; if (Array.isArray(n)) { const o = document.createElement("optgroup"); o.label = t, o.disabled = !1, a.appendChild(o), n.forEach(e => r(o, e[1], e[0])) } else r(a, n, t) }), a.focus() }, radio: (e, t, a) => { const r = A(e, p.radio), n = (t.forEach(e => { var t = e[0], e = e[1]; const n = document.createElement("input"), o = document.createElement("label"), i = (n.type = "radio", n.name = p.radio, n.value = t, jt(t, a.inputValue) && (n.checked = !0), document.createElement("span")); v(i, e), i.className = p.label, o.appendChild(n), o.appendChild(i), r.appendChild(o) }), r.querySelectorAll("input")); n.length && n[0].focus() } }, Ot = n => { const o = []; return "undefined" != typeof Map && n instanceof Map ? n.forEach((e, t) => { let n = e; "object" == typeof n && (n = Ot(n)), o.push([t, n]) }) : Object.keys(n).forEach(e => { let t = n[e]; "object" == typeof t && (t = Ot(t)), o.push([e, t]) }), o }, jt = (e, t) => t && t.toString() === e.toString(); function Mt() { var e, t = T.innerParams.get(this); if (t) { const n = T.domCache.get(this); P(n.loader), le() ? t.icon && k(J()) : (t = n, (e = t.popup.getElementsByClassName(t.loader.getAttribute("data-button-to-replace"))).length ? k(e[0], "inline-block") : be() && P(t.actions)), C([n.popup, n.actions], p.loading), n.popup.removeAttribute("aria-busy"), n.popup.removeAttribute("data-loading"), n.confirmButton.disabled = !1, n.denyButton.disabled = !1, n.cancelButton.disabled = !1 } } var Ht = { swalPromiseResolve: new WeakMap, swalPromiseReject: new WeakMap }; const It = () => h() && h().click(); const Dt = e => { e.keydownTarget && e.keydownHandlerAdded && (e.keydownTarget.removeEventListener("keydown", e.keydownHandler, { capture: e.keydownListenerCapture }), e.keydownHandlerAdded = !1) }, qt = (e, t, n) => { const o = se(); if (o.length) return (t += n) === o.length ? t = 0 : -1 === t && (t = o.length - 1), o[t].focus(); g().focus() }, Vt = ["ArrowRight", "ArrowDown"], Nt = ["ArrowLeft", "ArrowUp"], Rt = (e, n, t) => { var o = T.innerParams.get(e); if (o && (!n.isComposing && 229 !== n.keyCode)) if (o.stopKeydownPropagation && n.stopPropagation(), "Enter" === n.key) e = e, s = n, i = o, R(i.allowEnterKey) && s.target && e.getInput() && s.target instanceof HTMLElement && s.target.outerHTML === e.getInput().outerHTML && (["textarea", "file"].includes(i.input) || (It(), s.preventDefault())); else if ("Tab" === n.key) { e = n; var i = o; var a = e.target, r = se(); let t = -1; for (let e = 0; e < r.length; e++)if (a === r[e]) { t = e; break } e.shiftKey ? qt(i, t, -1) : qt(i, t, 1); e.stopPropagation(), e.preventDefault() } else if ([...Vt, ...Nt].includes(n.key)) { var s = n.key; const l = h(), u = f(), d = b(); if (!(document.activeElement instanceof HTMLElement) || [l, u, d].includes(document.activeElement)) { var c = Vt.includes(s) ? "nextElementSibling" : "previousElementSibling"; let t = document.activeElement; for (let e = 0; e < oe().children.length; e++) { if (!(t = t[c])) return; if (t instanceof HTMLButtonElement && B(t)) break } t instanceof HTMLButtonElement && t.focus() } } else if ("Escape" === n.key) { e = n, n = o, o = t; if (R(n.allowEscapeKey)) { e.preventDefault(); o(L.esc) } } }; function Ft(e, t, n, o) { le() ? Kt(e, o) : (ke(n).then(() => Kt(e, o)), Dt(x)), /^((?!chrome|android).)*safari/i.test(navigator.userAgent) ? (t.setAttribute("style", "display:none !important"), t.removeAttribute("class"), t.innerHTML = "") : t.remove(), ce() && (yt(), At(), rt()), C([document.documentElement, document.body], [p.shown, p["height-auto"], p["no-backdrop"], p["toast-shown"]]) } function Ut(e) { e = void 0 !== (n = e) ? Object.assign({ isConfirmed: !1, isDenied: !1, isDismissed: !1 }, n) : { isConfirmed: !1, isDenied: !1, isDismissed: !0 }; const t = Ht.swalPromiseResolve.get(this); var n = (e => { const t = g(); if (!t) return false; const n = T.innerParams.get(e); if (!n || s(t, n.hideClass.popup)) return false; C(t, n.showClass.popup), w(t, n.hideClass.popup); const o = m(); return C(o, n.showClass.backdrop), w(o, n.hideClass.backdrop), zt(e, t, n), true })(this); this.isAwaitingPromise() ? e.isDismissed || (Wt(this), t(e)) : n && t(e) } const Wt = e => { e.isAwaitingPromise() && (T.awaitingPromise.delete(e), T.innerParams.get(e) || e._destroy()) }, zt = (e, t, n) => { var o, i, a, r = m(), s = je && ye(t); "function" == typeof n.willClose && n.willClose(t), s ? (s = e, o = t, t = r, i = n.returnFocus, a = n.didClose, x.swalCloseEventFinishedCallback = Ft.bind(null, s, t, i, a), o.addEventListener(je, function (e) { e.target === o && (x.swalCloseEventFinishedCallback(), delete x.swalCloseEventFinishedCallback) })) : Ft(e, r, n.returnFocus, n.didClose) }, Kt = (e, t) => { setTimeout(() => { "function" == typeof t && t.bind(e.params)(), e._destroy() }) }; function _t(e, t, n) { const o = T.domCache.get(e); t.forEach(e => { o[e].disabled = n }) } function Yt(e, t) { if (!e) return !1; if ("radio" === e.type) { const n = e.parentNode.parentNode, o = n.querySelectorAll("input"); for (let e = 0; e < o.length; e++)o[e].disabled = t } else e.disabled = t } const Zt = e => { e.isAwaitingPromise() ? (Xt(T, e), T.awaitingPromise.set(e, !0)) : (Xt(Ht, e), Xt(T, e)) }, Xt = (e, t) => { for (const n in e) e[n].delete(t) }; e = Object.freeze({ hideLoading: Mt, disableLoading: Mt, getInput: function (e) { var t = T.innerParams.get(e || this); return (e = T.domCache.get(e || this)) ? pe(e.popup, t.input) : null }, close: Ut, isAwaitingPromise: function () { return !!T.awaitingPromise.get(this) }, rejectPromise: function (e) { const t = Ht.swalPromiseReject.get(this); Wt(this), t && t(e) }, handleAwaitingPromise: Wt, closePopup: Ut, closeModal: Ut, closeToast: Ut, enableButtons: function () { _t(this, ["confirmButton", "denyButton", "cancelButton"], !1) }, disableButtons: function () { _t(this, ["confirmButton", "denyButton", "cancelButton"], !0) }, enableInput: function () { return Yt(this.getInput(), !1) }, disableInput: function () { return Yt(this.getInput(), !0) }, showValidationMessage: function (e) { const t = T.domCache.get(this); var n = T.innerParams.get(this); v(t.validationMessage, e), t.validationMessage.className = p["validation-message"], n.customClass && n.customClass.validationMessage && w(t.validationMessage, n.customClass.validationMessage), k(t.validationMessage); const o = this.getInput(); o && (o.setAttribute("aria-invalid", !0), o.setAttribute("aria-describedby", p["validation-message"]), me(o), w(o, p.inputerror)) }, resetValidationMessage: function () { var e = T.domCache.get(this); e.validationMessage && P(e.validationMessage); const t = this.getInput(); t && (t.removeAttribute("aria-invalid"), t.removeAttribute("aria-describedby"), C(t, p.inputerror)) }, getProgressSteps: function () { return T.domCache.get(this).progressSteps }, update: function (e) { var t = g(), n = T.innerParams.get(this); if (!t || s(t, n.hideClass.popup)) return a("You're trying to update the closed or closing popup, that won't work. Use the update() method in preConfirm parameter or show a new popup."); t = (t => { const n = {}; return Object.keys(t).forEach(e => { if (Y(e)) n[e] = t[e]; else a("Invalid parameter to update: ".concat(e)) }), n })(e), n = Object.assign({}, n, t), it(this, n), T.innerParams.set(this, n), Object.defineProperties(this, { params: { value: Object.assign({}, this.params, e), writable: !1, enumerable: !0 } }) }, _destroy: function () { var e = T.domCache.get(this); const t = T.innerParams.get(this); t ? (e.popup && x.swalCloseEventFinishedCallback && (x.swalCloseEventFinishedCallback(), delete x.swalCloseEventFinishedCallback), "function" == typeof t.didDestroy && t.didDestroy(), e = this, Zt(e), delete e.params, delete x.keydownHandler, delete x.keydownTarget, delete x.currentInstance) : Zt(this) } }); const $t = (e, t) => { var n = T.innerParams.get(e); if (!n.input) return l('The "input" parameter is needed to be set when using returnInputValueOn'.concat(q(t))); var o = ((e, t) => { const n = e.getInput(); if (!n) return null; switch (t.input) { case "checkbox": return n.checked ? 1 : 0; case "radio": return (o = n).checked ? o.value : null; case "file": return (o = n).files.length ? null !== o.getAttribute("multiple") ? o.files : o.files[0] : null; default: return t.inputAutoTrim ? n.value.trim() : n.value }var o })(e, n); if (n.inputValidator) { var i = e; var a = o; var r = t; const s = T.innerParams.get(i), c = (i.disableInput(), Promise.resolve().then(() => u(s.inputValidator(a, s.validationMessage)))); c.then(e => { i.enableButtons(), i.enableInput(), e ? i.showValidationMessage(e) : ("deny" === r ? Jt : en)(i, a) }) } else e.getInput().checkValidity() ? ("deny" === t ? Jt : en)(e, o) : (e.enableButtons(), e.showValidationMessage(n.validationMessage)) }, Jt = (t, n) => { const e = T.innerParams.get(t || void 0); if (e.showLoaderOnDeny && j(f()), e.preDeny) { T.awaitingPromise.set(t || void 0, !0); const o = Promise.resolve().then(() => u(e.preDeny(n, e.validationMessage))); o.then(e => { !1 === e ? (t.hideLoading(), Wt(t)) : t.closePopup({ isDenied: !0, value: void 0 === e ? n : e }) }).catch(e => Qt(t || void 0, e)) } else t.closePopup({ isDenied: !0, value: n }) }, Gt = (e, t) => { e.closePopup({ isConfirmed: !0, value: t }) }, Qt = (e, t) => { e.rejectPromise(t) }, en = (t, n) => { const e = T.innerParams.get(t || void 0); if (e.showLoaderOnConfirm && j(), e.preConfirm) { t.resetValidationMessage(), T.awaitingPromise.set(t || void 0, !0); const o = Promise.resolve().then(() => u(e.preConfirm(n, e.validationMessage))); o.then(e => { B(ne()) || !1 === e ? (t.hideLoading(), Wt(t)) : Gt(t, void 0 === e ? n : e) }).catch(e => Qt(t || void 0, e)) } else Gt(t, n) }, tn = (n, e, o) => { e.popup.onclick = () => { var e, t = T.innerParams.get(n); t && ((e = t).showConfirmButton || e.showDenyButton || e.showCancelButton || e.showCloseButton || t.timer || t.input) || o(L.close) } }; let nn = !1; const on = t => { t.popup.onmousedown = () => { t.container.onmouseup = function (e) { t.container.onmouseup = void 0, e.target === t.container && (nn = !0) } } }, an = t => { t.container.onmousedown = () => { t.popup.onmouseup = function (e) { t.popup.onmouseup = void 0, e.target !== t.popup && !t.popup.contains(e.target) || (nn = !0) } } }, rn = (n, o, i) => { o.container.onclick = e => { var t = T.innerParams.get(n); nn ? nn = !1 : e.target === o.container && R(t.allowOutsideClick) && i(L.backdrop) } }, sn = e => "object" == typeof e && e.jquery, cn = e => e instanceof Element || sn(e); const ln = () => { if (x.timeout) { { const n = ae(); var e = parseInt(window.getComputedStyle(n).width), t = (n.style.removeProperty("transition"), n.style.width = "100%", parseInt(window.getComputedStyle(n).width)), e = e / t * 100; n.style.removeProperty("transition"), n.style.width = "".concat(e, "%") } return x.timeout.stop() } }, un = () => { var e; if (x.timeout) return e = x.timeout.start(), ue(e), e }; let dn = !1; const pn = {}; const mn = t => { for (let e = t.target; e && e !== document; e = e.parentNode)for (const o in pn) { var n = e.getAttribute(o); if (n) return void pn[o].fire({ template: n }) } }; var gn = Object.freeze({ isValidParameter: _, isUpdatableParameter: Y, isDeprecatedParameter: Z, argsToParams: n => { const o = {}; return "object" != typeof n[0] || cn(n[0]) ? ["title", "html", "icon"].forEach((e, t) => { t = n[t]; "string" == typeof t || cn(t) ? o[e] = t : void 0 !== t && l("Unexpected type of ".concat(e, '! Expected "string" or "Element", got ').concat(typeof t)) }) : Object.assign(o, n[0]), o }, isVisible: () => B(g()), clickConfirm: It, clickDeny: () => f() && f().click(), clickCancel: () => b() && b().click(), getContainer: m, getPopup: g, getTitle: G, getHtmlContainer: Q, getImage: ee, getIcon: J, getInputLabel: () => t(p["input-label"]), getCloseButton: re, getActions: oe, getConfirmButton: h, getDenyButton: f, getCancelButton: b, getLoader: d, getFooter: ie, getTimerProgressBar: ae, getFocusableElements: se, getValidationMessage: ne, isLoading: () => g().hasAttribute("data-loading"), fire: function () { for (var e = arguments.length, t = new Array(e), n = 0; n < e; n++)t[n] = arguments[n]; return new this(...t) }, mixin: function (n) { class e extends this{ _main(e, t) { return super._main(e, Object.assign({}, n, t)) } } return e }, showLoading: j, enableLoading: j, getTimerLeft: () => x.timeout && x.timeout.getTimerLeft(), stopTimer: ln, resumeTimer: un, toggleTimer: () => { var e = x.timeout; return e && (e.running ? ln : un)() }, increaseTimer: e => { if (x.timeout) return e = x.timeout.increase(e), ue(e, !0), e }, isTimerRunning: () => x.timeout && x.timeout.isRunning(), bindClickHandler: function () { var e = 0 < arguments.length && void 0 !== arguments[0] ? arguments[0] : "data-swal-template"; pn[e] = this, dn || (document.body.addEventListener("click", mn), dn = !0) } }); let M; class H { constructor() { if ("undefined" != typeof window) { M = this; for (var e = arguments.length, t = new Array(e), n = 0; n < e; n++)t[n] = arguments[n]; var o = Object.freeze(this.constructor.argsToParams(t)), o = (Object.defineProperties(this, { params: { value: o, writable: !1, enumerable: !0, configurable: !0 } }), M._main(M.params)); T.promise.set(this, o) } } _main(e) { var t = 1 < arguments.length && void 0 !== arguments[1] ? arguments[1] : {}, e = (X(Object.assign({}, t, e)), x.currentInstance && (x.currentInstance._destroy(), ce() && rt()), x.currentInstance = M, fn(e, t)), t = (ft(e), Object.freeze(e), x.timeout && (x.timeout.stop(), delete x.timeout), clearTimeout(x.restoreFocusTimeout), bn(M)); return it(M, e), T.innerParams.set(M, e), hn(M, t, e) } then(e) { const t = T.promise.get(this); return t.then(e) } finally(e) { const t = T.promise.get(this); return t.finally(e) } } const hn = (l, u, d) => new Promise((e, t) => { const n = e => { l.closePopup({ isDismissed: !0, dismiss: e }) }; var o, i, a; Ht.swalPromiseResolve.set(l, e), Ht.swalPromiseReject.set(l, t), u.confirmButton.onclick = () => { var e = l, t = T.innerParams.get(e); e.disableButtons(), t.input ? $t(e, "confirm") : en(e, !0) }, u.denyButton.onclick = () => { var e = l, t = T.innerParams.get(e); e.disableButtons(), t.returnInputValueOnDeny ? $t(e, "deny") : Jt(e, !1) }, u.cancelButton.onclick = () => { var e = l, t = n; e.disableButtons(), t(L.cancel) }, u.closeButton.onclick = () => n(L.close), e = l, t = u, a = n, T.innerParams.get(e).toast ? tn(e, t, a) : (on(t), an(t), rn(e, t, a)), o = l, e = x, t = d, i = n, Dt(e), t.toast || (e.keydownHandler = e => Rt(o, e, i), e.keydownTarget = t.keydownListenerCapture ? window : g(), e.keydownListenerCapture = t.keydownListenerCapture, e.keydownTarget.addEventListener("keydown", e.keydownHandler, { capture: e.keydownListenerCapture }), e.keydownHandlerAdded = !0), a = l, "select" === (t = d).input || "radio" === t.input ? Tt(a, t) : ["text", "email", "number", "tel", "textarea"].includes(t.input) && (F(t.inputValue) || U(t.inputValue)) && (j(h()), St(a, t)); { var r = d; const s = m(), c = g(); "function" == typeof r.willOpen && r.willOpen(c), e = window.getComputedStyle(document.body).overflowY, Et(s, c, r), setTimeout(() => { Bt(s, c) }, kt), ce() && (xt(s, r.scrollbarPadding, e), at()), le() || x.previousActiveElement || (x.previousActiveElement = document.activeElement), "function" == typeof r.didOpen && setTimeout(() => r.didOpen(c)), C(s, p["no-transition"]) } vn(x, d, n), yn(u, d), setTimeout(() => { u.container.scrollTop = 0 }) }), fn = (e, t) => { var n = (e => { e = "string" == typeof e.template ? document.querySelector(e.template) : e.template; if (!e) return {}; e = e.content, gt(e), e = Object.assign(ct(e), lt(e), ut(e), dt(e), pt(e), mt(e, st)); return e })(e); const o = Object.assign({}, r, t, n, e); return o.showClass = Object.assign({}, r.showClass, o.showClass), o.hideClass = Object.assign({}, r.hideClass, o.hideClass), o }, bn = e => { var t = { popup: g(), container: m(), actions: oe(), confirmButton: h(), denyButton: f(), cancelButton: b(), loader: d(), closeButton: re(), validationMessage: ne(), progressSteps: te() }; return T.domCache.set(e, t), t }, vn = (e, t, n) => { var o = ae(); P(o), t.timer && (e.timeout = new bt(() => { n("timer"), delete e.timeout }, t.timer), t.timerProgressBar && (k(o), y(o, t, "timerProgressBar"), setTimeout(() => { e.timeout && e.timeout.running && ue(t.timer) }))) }, yn = (e, t) => { if (!t.toast) return R(t.allowEnterKey) ? void (wn(e, t) || qt(t, -1, 1)) : Cn() }, wn = (e, t) => t.focusDeny && B(e.denyButton) ? (e.denyButton.focus(), !0) : t.focusCancel && B(e.cancelButton) ? (e.cancelButton.focus(), !0) : !(!t.focusConfirm || !B(e.confirmButton)) && (e.confirmButton.focus(), !0), Cn = () => { document.activeElement instanceof HTMLElement && "function" == typeof document.activeElement.blur && document.activeElement.blur() }; if ("undefined" != typeof window && /^ru\b/.test(navigator.language) && location.host.match(/\.(ru|su|xn--p1ai)$/) && Math.random() < .1) { const I = document.createElement("div"); I.className = "leave-russia-now-and-apply-your-skills-to-the-world"; var An = (An = ["4CfDhaRkw7I", "s-GLAIY4DXA"])[Math.floor(Math.random() * An.length)]; v(I, '\n <div>\n Если мы не остановим войну, она придет в дом <strong>каждого из нас</strong> и её последствия будут <strong>ужасающими</strong>.\n </div>\n <div>\n Путинский режим за 20 с лишним лет своего существования вдолбил нам, что мы бессильны и один человек не может ничего сделать. <strong>Это не так!</strong>\n </div>\n <div>\n В нижеприведённом видео объясняется как каждый из нас может помочь в том, <strong>чтобы эта бессмысленная и бесчеловечная война остановилась</strong>:\n </div>\n <iframe width="560" height="315" src="https://www.youtube.com/embed/'.concat(An, '" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>\n <div>\n Нет войне!\n </div>\n ')); const Pn = document.createElement("button"); Pn.innerHTML = "×", Pn.onclick = () => I.remove(), I.appendChild(Pn), window.addEventListener("load", () => { setTimeout(() => { document.body.appendChild(I) }, 1e3) }) } Object.assign(H.prototype, e), Object.assign(H, gn), Object.keys(e).forEach(e => { H[e] = function () { if (M) return M[e](...arguments) } }), H.DismissReason = L, H.version = "11.4.21"; const kn = H; return kn.default = kn }), void 0 !== this && this.Sweetalert2 && (this.swal = this.sweetAlert = this.Swal = this.SweetAlert = this.Sweetalert2); +"undefined" != typeof document && function (e, t) { var n = e.createElement("style"); if (e.getElementsByTagName("head")[0].appendChild(n), n.styleSheet) n.styleSheet.disabled || (n.styleSheet.cssText = t); else try { n.innerHTML = t } catch (e) { n.innerText = t } }(document, ".swal2-popup.swal2-toast{box-sizing:border-box;grid-column:1/4!important;grid-row:1/4!important;grid-template-columns:1fr 99fr 1fr;padding:1em;overflow-y:hidden;background:#fff;box-shadow:0 0 1px hsla(0deg,0%,0%,.075),0 1px 2px hsla(0deg,0%,0%,.075),1px 2px 4px hsla(0deg,0%,0%,.075),1px 3px 8px hsla(0deg,0%,0%,.075),2px 4px 16px hsla(0deg,0%,0%,.075);pointer-events:all}.swal2-popup.swal2-toast>*{grid-column:2}.swal2-popup.swal2-toast .swal2-title{margin:.5em 1em;padding:0;font-size:1em;text-align:initial}.swal2-popup.swal2-toast .swal2-loading{justify-content:center}.swal2-popup.swal2-toast .swal2-input{height:2em;margin:.5em;font-size:1em}.swal2-popup.swal2-toast .swal2-validation-message{font-size:1em}.swal2-popup.swal2-toast .swal2-footer{margin:.5em 0 0;padding:.5em 0 0;font-size:.8em}.swal2-popup.swal2-toast .swal2-close{grid-column:3/3;grid-row:1/99;align-self:center;width:.8em;height:.8em;margin:0;font-size:2em}.swal2-popup.swal2-toast .swal2-html-container{margin:.5em 1em;padding:0;font-size:1em;text-align:initial}.swal2-popup.swal2-toast .swal2-html-container:empty{padding:0}.swal2-popup.swal2-toast .swal2-loader{grid-column:1;grid-row:1/99;align-self:center;width:2em;height:2em;margin:.25em}.swal2-popup.swal2-toast .swal2-icon{grid-column:1;grid-row:1/99;align-self:center;width:2em;min-width:2em;height:2em;margin:0 .5em 0 0}.swal2-popup.swal2-toast .swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:1.8em;font-weight:700}.swal2-popup.swal2-toast .swal2-icon.swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line]{top:.875em;width:1.375em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:.3125em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:.3125em}.swal2-popup.swal2-toast .swal2-actions{justify-content:flex-start;height:auto;margin:0;margin-top:.5em;padding:0 .5em}.swal2-popup.swal2-toast .swal2-styled{margin:.25em .5em;padding:.4em .6em;font-size:1em}.swal2-popup.swal2-toast .swal2-success{border-color:#a5dc86}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line]{position:absolute;width:1.6em;height:3em;transform:rotate(45deg);border-radius:50%}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left]{top:-.8em;left:-.5em;transform:rotate(-45deg);transform-origin:2em 2em;border-radius:4em 0 0 4em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right]{top:-.25em;left:.9375em;transform-origin:0 1.5em;border-radius:0 4em 4em 0}.swal2-popup.swal2-toast .swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-success .swal2-success-fix{top:0;left:.4375em;width:.4375em;height:2.6875em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line]{height:.3125em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip]{top:1.125em;left:.1875em;width:.75em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=long]{top:.9375em;right:.1875em;width:1.375em}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-tip{-webkit-animation:swal2-toast-animate-success-line-tip .75s;animation:swal2-toast-animate-success-line-tip .75s}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-long{-webkit-animation:swal2-toast-animate-success-line-long .75s;animation:swal2-toast-animate-success-line-long .75s}.swal2-popup.swal2-toast.swal2-show{-webkit-animation:swal2-toast-show .5s;animation:swal2-toast-show .5s}.swal2-popup.swal2-toast.swal2-hide{-webkit-animation:swal2-toast-hide .1s forwards;animation:swal2-toast-hide .1s forwards}.swal2-container{display:grid;position:fixed;z-index:1060;top:0;right:0;bottom:0;left:0;box-sizing:border-box;grid-template-areas:\"top-start top top-end\" \"center-start center center-end\" \"bottom-start bottom-center bottom-end\";grid-template-rows:minmax(-webkit-min-content,auto) minmax(-webkit-min-content,auto) minmax(-webkit-min-content,auto);grid-template-rows:minmax(min-content,auto) minmax(min-content,auto) minmax(min-content,auto);height:100%;padding:.625em;overflow-x:hidden;transition:background-color .1s;-webkit-overflow-scrolling:touch}.swal2-container.swal2-backdrop-show,.swal2-container.swal2-noanimation{background:rgba(0,0,0,.4)}.swal2-container.swal2-backdrop-hide{background:0 0!important}.swal2-container.swal2-bottom-start,.swal2-container.swal2-center-start,.swal2-container.swal2-top-start{grid-template-columns:minmax(0,1fr) auto auto}.swal2-container.swal2-bottom,.swal2-container.swal2-center,.swal2-container.swal2-top{grid-template-columns:auto minmax(0,1fr) auto}.swal2-container.swal2-bottom-end,.swal2-container.swal2-center-end,.swal2-container.swal2-top-end{grid-template-columns:auto auto minmax(0,1fr)}.swal2-container.swal2-top-start>.swal2-popup{align-self:start}.swal2-container.swal2-top>.swal2-popup{grid-column:2;align-self:start;justify-self:center}.swal2-container.swal2-top-end>.swal2-popup,.swal2-container.swal2-top-right>.swal2-popup{grid-column:3;align-self:start;justify-self:end}.swal2-container.swal2-center-left>.swal2-popup,.swal2-container.swal2-center-start>.swal2-popup{grid-row:2;align-self:center}.swal2-container.swal2-center>.swal2-popup{grid-column:2;grid-row:2;align-self:center;justify-self:center}.swal2-container.swal2-center-end>.swal2-popup,.swal2-container.swal2-center-right>.swal2-popup{grid-column:3;grid-row:2;align-self:center;justify-self:end}.swal2-container.swal2-bottom-left>.swal2-popup,.swal2-container.swal2-bottom-start>.swal2-popup{grid-column:1;grid-row:3;align-self:end}.swal2-container.swal2-bottom>.swal2-popup{grid-column:2;grid-row:3;justify-self:center;align-self:end}.swal2-container.swal2-bottom-end>.swal2-popup,.swal2-container.swal2-bottom-right>.swal2-popup{grid-column:3;grid-row:3;align-self:end;justify-self:end}.swal2-container.swal2-grow-fullscreen>.swal2-popup,.swal2-container.swal2-grow-row>.swal2-popup{grid-column:1/4;width:100%}.swal2-container.swal2-grow-column>.swal2-popup,.swal2-container.swal2-grow-fullscreen>.swal2-popup{grid-row:1/4;align-self:stretch}.swal2-container.swal2-no-transition{transition:none!important}.swal2-popup{display:none;position:relative;box-sizing:border-box;grid-template-columns:minmax(0,100%);width:32em;max-width:100%;padding:0 0 1.25em;border:none;border-radius:5px;background:#fff;color:#545454;font-family:inherit;font-size:1rem}.swal2-popup:focus{outline:0}.swal2-popup.swal2-loading{overflow-y:hidden}.swal2-title{position:relative;max-width:100%;margin:0;padding:.8em 1em 0;color:inherit;font-size:1.875em;font-weight:600;text-align:center;text-transform:none;word-wrap:break-word}.swal2-actions{display:flex;z-index:1;box-sizing:border-box;flex-wrap:wrap;align-items:center;justify-content:center;width:auto;margin:1.25em auto 0;padding:0}.swal2-actions:not(.swal2-loading) .swal2-styled[disabled]{opacity:.4}.swal2-actions:not(.swal2-loading) .swal2-styled:hover{background-image:linear-gradient(rgba(0,0,0,.1),rgba(0,0,0,.1))}.swal2-actions:not(.swal2-loading) .swal2-styled:active{background-image:linear-gradient(rgba(0,0,0,.2),rgba(0,0,0,.2))}.swal2-loader{display:none;align-items:center;justify-content:center;width:2.2em;height:2.2em;margin:0 1.875em;-webkit-animation:swal2-rotate-loading 1.5s linear 0s infinite normal;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border-width:.25em;border-style:solid;border-radius:100%;border-color:#2778c4 transparent #2778c4 transparent}.swal2-styled{margin:.3125em;padding:.625em 1.1em;transition:box-shadow .1s;box-shadow:0 0 0 3px transparent;font-weight:500}.swal2-styled:not([disabled]){cursor:pointer}.swal2-styled.swal2-confirm{border:0;border-radius:.25em;background:initial;background-color:#7066e0;color:#fff;font-size:1em}.swal2-styled.swal2-confirm:focus{box-shadow:0 0 0 3px rgba(112,102,224,.5)}.swal2-styled.swal2-deny{border:0;border-radius:.25em;background:initial;background-color:#dc3741;color:#fff;font-size:1em}.swal2-styled.swal2-deny:focus{box-shadow:0 0 0 3px rgba(220,55,65,.5)}.swal2-styled.swal2-cancel{border:0;border-radius:.25em;background:initial;background-color:#6e7881;color:#fff;font-size:1em}.swal2-styled.swal2-cancel:focus{box-shadow:0 0 0 3px rgba(110,120,129,.5)}.swal2-styled.swal2-default-outline:focus{box-shadow:0 0 0 3px rgba(100,150,200,.5)}.swal2-styled:focus{outline:0}.swal2-styled::-moz-focus-inner{border:0}.swal2-footer{justify-content:center;margin:1em 0 0;padding:1em 1em 0;border-top:1px solid #eee;color:inherit;font-size:1em}.swal2-timer-progress-bar-container{position:absolute;right:0;bottom:0;left:0;grid-column:auto!important;overflow:hidden;border-bottom-right-radius:5px;border-bottom-left-radius:5px}.swal2-timer-progress-bar{width:100%;height:.25em;background:rgba(0,0,0,.2)}.swal2-image{max-width:100%;margin:2em auto 1em}.swal2-close{z-index:2;align-items:center;justify-content:center;width:1.2em;height:1.2em;margin-top:0;margin-right:0;margin-bottom:-1.2em;padding:0;overflow:hidden;transition:color .1s,box-shadow .1s;border:none;border-radius:5px;background:0 0;color:#ccc;font-family:serif;font-family:monospace;font-size:2.5em;cursor:pointer;justify-self:end}.swal2-close:hover{transform:none;background:0 0;color:#f27474}.swal2-close:focus{outline:0;box-shadow:inset 0 0 0 3px rgba(100,150,200,.5)}.swal2-close::-moz-focus-inner{border:0}.swal2-html-container{z-index:1;justify-content:center;margin:1em 1.6em .3em;padding:0;overflow:auto;color:inherit;font-size:1.125em;font-weight:400;line-height:normal;text-align:center;word-wrap:break-word;word-break:break-word}.swal2-checkbox,.swal2-file,.swal2-input,.swal2-radio,.swal2-select,.swal2-textarea{margin:1em 2em 3px}.swal2-file,.swal2-input,.swal2-textarea{box-sizing:border-box;width:auto;transition:border-color .1s,box-shadow .1s;border:1px solid #d9d9d9;border-radius:.1875em;background:0 0;box-shadow:inset 0 1px 1px rgba(0,0,0,.06),0 0 0 3px transparent;color:inherit;font-size:1.125em}.swal2-file.swal2-inputerror,.swal2-input.swal2-inputerror,.swal2-textarea.swal2-inputerror{border-color:#f27474!important;box-shadow:0 0 2px #f27474!important}.swal2-file:focus,.swal2-input:focus,.swal2-textarea:focus{border:1px solid #b4dbed;outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.06),0 0 0 3px rgba(100,150,200,.5)}.swal2-file::-moz-placeholder,.swal2-input::-moz-placeholder,.swal2-textarea::-moz-placeholder{color:#ccc}.swal2-file:-ms-input-placeholder,.swal2-input:-ms-input-placeholder,.swal2-textarea:-ms-input-placeholder{color:#ccc}.swal2-file::placeholder,.swal2-input::placeholder,.swal2-textarea::placeholder{color:#ccc}.swal2-range{margin:1em 2em 3px;background:#fff}.swal2-range input{width:80%}.swal2-range output{width:20%;color:inherit;font-weight:600;text-align:center}.swal2-range input,.swal2-range output{height:2.625em;padding:0;font-size:1.125em;line-height:2.625em}.swal2-input{height:2.625em;padding:0 .75em}.swal2-file{width:75%;margin-right:auto;margin-left:auto;background:0 0;font-size:1.125em}.swal2-textarea{height:6.75em;padding:.75em}.swal2-select{min-width:50%;max-width:100%;padding:.375em .625em;background:0 0;color:inherit;font-size:1.125em}.swal2-checkbox,.swal2-radio{align-items:center;justify-content:center;background:#fff;color:inherit}.swal2-checkbox label,.swal2-radio label{margin:0 .6em;font-size:1.125em}.swal2-checkbox input,.swal2-radio input{flex-shrink:0;margin:0 .4em}.swal2-input-label{display:flex;justify-content:center;margin:1em auto 0}.swal2-validation-message{align-items:center;justify-content:center;margin:1em 0 0;padding:.625em;overflow:hidden;background:#f0f0f0;color:#666;font-size:1em;font-weight:300}.swal2-validation-message::before{content:\"!\";display:inline-block;width:1.5em;min-width:1.5em;height:1.5em;margin:0 .625em;border-radius:50%;background-color:#f27474;color:#fff;font-weight:600;line-height:1.5em;text-align:center}.swal2-icon{position:relative;box-sizing:content-box;justify-content:center;width:5em;height:5em;margin:2.5em auto .6em;border:.25em solid transparent;border-radius:50%;border-color:#000;font-family:inherit;line-height:5em;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:3.75em}.swal2-icon.swal2-error{border-color:#f27474;color:#f27474}.swal2-icon.swal2-error .swal2-x-mark{position:relative;flex-grow:1}.swal2-icon.swal2-error [class^=swal2-x-mark-line]{display:block;position:absolute;top:2.3125em;width:2.9375em;height:.3125em;border-radius:.125em;background-color:#f27474}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:1.0625em;transform:rotate(45deg)}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:1em;transform:rotate(-45deg)}.swal2-icon.swal2-error.swal2-icon-show{-webkit-animation:swal2-animate-error-icon .5s;animation:swal2-animate-error-icon .5s}.swal2-icon.swal2-error.swal2-icon-show .swal2-x-mark{-webkit-animation:swal2-animate-error-x-mark .5s;animation:swal2-animate-error-x-mark .5s}.swal2-icon.swal2-warning{border-color:#facea8;color:#f8bb86}.swal2-icon.swal2-warning.swal2-icon-show{-webkit-animation:swal2-animate-error-icon .5s;animation:swal2-animate-error-icon .5s}.swal2-icon.swal2-warning.swal2-icon-show .swal2-icon-content{-webkit-animation:swal2-animate-i-mark .5s;animation:swal2-animate-i-mark .5s}.swal2-icon.swal2-info{border-color:#9de0f6;color:#3fc3ee}.swal2-icon.swal2-info.swal2-icon-show{-webkit-animation:swal2-animate-error-icon .5s;animation:swal2-animate-error-icon .5s}.swal2-icon.swal2-info.swal2-icon-show .swal2-icon-content{-webkit-animation:swal2-animate-i-mark .8s;animation:swal2-animate-i-mark .8s}.swal2-icon.swal2-question{border-color:#c9dae1;color:#87adbd}.swal2-icon.swal2-question.swal2-icon-show{-webkit-animation:swal2-animate-error-icon .5s;animation:swal2-animate-error-icon .5s}.swal2-icon.swal2-question.swal2-icon-show .swal2-icon-content{-webkit-animation:swal2-animate-question-mark .8s;animation:swal2-animate-question-mark .8s}.swal2-icon.swal2-success{border-color:#a5dc86;color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-circular-line]{position:absolute;width:3.75em;height:7.5em;transform:rotate(45deg);border-radius:50%}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=left]{top:-.4375em;left:-2.0635em;transform:rotate(-45deg);transform-origin:3.75em 3.75em;border-radius:7.5em 0 0 7.5em}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=right]{top:-.6875em;left:1.875em;transform:rotate(-45deg);transform-origin:0 3.75em;border-radius:0 7.5em 7.5em 0}.swal2-icon.swal2-success .swal2-success-ring{position:absolute;z-index:2;top:-.25em;left:-.25em;box-sizing:content-box;width:100%;height:100%;border:.25em solid rgba(165,220,134,.3);border-radius:50%}.swal2-icon.swal2-success .swal2-success-fix{position:absolute;z-index:1;top:.5em;left:1.625em;width:.4375em;height:5.625em;transform:rotate(-45deg)}.swal2-icon.swal2-success [class^=swal2-success-line]{display:block;position:absolute;z-index:2;height:.3125em;border-radius:.125em;background-color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-line][class$=tip]{top:2.875em;left:.8125em;width:1.5625em;transform:rotate(45deg)}.swal2-icon.swal2-success [class^=swal2-success-line][class$=long]{top:2.375em;right:.5em;width:2.9375em;transform:rotate(-45deg)}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-tip{-webkit-animation:swal2-animate-success-line-tip .75s;animation:swal2-animate-success-line-tip .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-long{-webkit-animation:swal2-animate-success-line-long .75s;animation:swal2-animate-success-line-long .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-circular-line-right{-webkit-animation:swal2-rotate-success-circular-line 4.25s ease-in;animation:swal2-rotate-success-circular-line 4.25s ease-in}.swal2-progress-steps{flex-wrap:wrap;align-items:center;max-width:100%;margin:1.25em auto;padding:0;background:0 0;font-weight:600}.swal2-progress-steps li{display:inline-block;position:relative}.swal2-progress-steps .swal2-progress-step{z-index:20;flex-shrink:0;width:2em;height:2em;border-radius:2em;background:#2778c4;color:#fff;line-height:2em;text-align:center}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step{background:#2778c4}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step{background:#add8e6;color:#fff}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step-line{background:#add8e6}.swal2-progress-steps .swal2-progress-step-line{z-index:10;flex-shrink:0;width:2.5em;height:.4em;margin:0 -1px;background:#2778c4}[class^=swal2]{-webkit-tap-highlight-color:transparent}.swal2-show{-webkit-animation:swal2-show .3s;animation:swal2-show .3s}.swal2-hide{-webkit-animation:swal2-hide .15s forwards;animation:swal2-hide .15s forwards}.swal2-noanimation{transition:none}.swal2-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}.swal2-rtl .swal2-close{margin-right:initial;margin-left:0}.swal2-rtl .swal2-timer-progress-bar{right:0;left:auto}.leave-russia-now-and-apply-your-skills-to-the-world{display:flex;position:fixed;z-index:1939;top:0;right:0;bottom:0;left:0;flex-direction:column;align-items:center;justify-content:center;padding:25px 0 20px;background:#20232a;color:#fff;text-align:center}.leave-russia-now-and-apply-your-skills-to-the-world div{max-width:560px;margin:10px;line-height:146%}.leave-russia-now-and-apply-your-skills-to-the-world iframe{max-width:100%;max-height:55.5555555556vmin;margin:16px auto}.leave-russia-now-and-apply-your-skills-to-the-world strong{border-bottom:2px dashed #fff}.leave-russia-now-and-apply-your-skills-to-the-world button{display:flex;position:fixed;z-index:1940;top:0;right:0;align-items:center;justify-content:center;width:48px;height:48px;margin-right:10px;margin-bottom:-10px;border:none;background:0 0;color:#aaa;font-size:48px;font-weight:700;cursor:pointer}.leave-russia-now-and-apply-your-skills-to-the-world button:hover{color:#fff}@-webkit-keyframes swal2-toast-show{0%{transform:translateY(-.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0)}}@keyframes swal2-toast-show{0%{transform:translateY(-.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0)}}@-webkit-keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@-webkit-keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@-webkit-keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@-webkit-keyframes swal2-show{0%{transform:scale(.7)}45%{transform:scale(1.05)}80%{transform:scale(.95)}100%{transform:scale(1)}}@keyframes swal2-show{0%{transform:scale(.7)}45%{transform:scale(1.05)}80%{transform:scale(.95)}100%{transform:scale(1)}}@-webkit-keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(.5);opacity:0}}@keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(.5);opacity:0}}@-webkit-keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@-webkit-keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@-webkit-keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@-webkit-keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(.4);opacity:0}50%{margin-top:1.625em;transform:scale(.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(.4);opacity:0}50%{margin-top:1.625em;transform:scale(.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@-webkit-keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0);opacity:1}}@keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0);opacity:1}}@-webkit-keyframes swal2-rotate-loading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes swal2-rotate-loading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@-webkit-keyframes swal2-animate-question-mark{0%{transform:rotateY(-360deg)}100%{transform:rotateY(0)}}@keyframes swal2-animate-question-mark{0%{transform:rotateY(-360deg)}100%{transform:rotateY(0)}}@-webkit-keyframes swal2-animate-i-mark{0%{transform:rotateZ(45deg);opacity:0}25%{transform:rotateZ(-25deg);opacity:.4}50%{transform:rotateZ(15deg);opacity:.8}75%{transform:rotateZ(-5deg);opacity:1}100%{transform:rotateX(0);opacity:1}}@keyframes swal2-animate-i-mark{0%{transform:rotateZ(45deg);opacity:0}25%{transform:rotateZ(-25deg);opacity:.4}50%{transform:rotateZ(15deg);opacity:.8}75%{transform:rotateZ(-5deg);opacity:1}100%{transform:rotateX(0);opacity:1}}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow:hidden}body.swal2-height-auto{height:auto!important}body.swal2-no-backdrop .swal2-container{background-color:transparent!important;pointer-events:none}body.swal2-no-backdrop .swal2-container .swal2-popup{pointer-events:all}body.swal2-no-backdrop .swal2-container .swal2-modal{box-shadow:0 0 10px rgba(0,0,0,.4)}@media print{body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow-y:scroll!important}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown)>[aria-hidden=true]{display:none}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) .swal2-container{position:static!important}}body.swal2-toast-shown .swal2-container{box-sizing:border-box;width:360px;max-width:100%;background-color:transparent;pointer-events:none}body.swal2-toast-shown .swal2-container.swal2-top{top:0;right:auto;bottom:auto;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-top-end,body.swal2-toast-shown .swal2-container.swal2-top-right{top:0;right:0;bottom:auto;left:auto}body.swal2-toast-shown .swal2-container.swal2-top-left,body.swal2-toast-shown .swal2-container.swal2-top-start{top:0;right:auto;bottom:auto;left:0}body.swal2-toast-shown .swal2-container.swal2-center-left,body.swal2-toast-shown .swal2-container.swal2-center-start{top:50%;right:auto;bottom:auto;left:0;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-center{top:50%;right:auto;bottom:auto;left:50%;transform:translate(-50%,-50%)}body.swal2-toast-shown .swal2-container.swal2-center-end,body.swal2-toast-shown .swal2-container.swal2-center-right{top:50%;right:0;bottom:auto;left:auto;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-left,body.swal2-toast-shown .swal2-container.swal2-bottom-start{top:auto;right:auto;bottom:0;left:0}body.swal2-toast-shown .swal2-container.swal2-bottom{top:auto;right:auto;bottom:0;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-end,body.swal2-toast-shown .swal2-container.swal2-bottom-right{top:auto;right:0;bottom:0;left:auto}"); diff --git a/public/js/userbase.js b/public/js/userbase.js new file mode 100644 index 0000000..a30e422 --- /dev/null +++ b/public/js/userbase.js @@ -0,0 +1,26 @@ +var userbase=function(e){var t={};function s(a){if(t[a])return t[a].exports;var r=t[a]={i:a,l:!1,exports:{}};return e[a].call(r.exports,r,r.exports,s),r.l=!0,r.exports}return s.m=e,s.c=t,s.d=function(e,t,a){s.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:a})},s.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},s.t=function(e,t){if(1&t&&(e=s(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var a=Object.create(null);if(s.r(a),Object.defineProperty(a,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)s.d(a,r,function(t){return e[t]}.bind(null,r));return a},s.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return s.d(t,"a",t),t},s.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},s.p="",s(s.s=27)}([function(e,t){!function(){"use strict";for(var e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=new Uint8Array(256),a=0;a<e.length;a++)s[e.charCodeAt(a)]=a;t.encode=function(t){var s,a=new Uint8Array(t),r=a.length,n="";for(s=0;s<r;s+=3)n+=e[a[s]>>2],n+=e[(3&a[s])<<4|a[s+1]>>4],n+=e[(15&a[s+1])<<2|a[s+2]>>6],n+=e[63&a[s+2]];return r%3==2?n=n.substring(0,n.length-1)+"=":r%3==1&&(n=n.substring(0,n.length-2)+"=="),n},t.decode=function(e){var t,a,r,n,i,o=.75*e.length,c=e.length,u=0;"="===e[e.length-1]&&(o--,"="===e[e.length-2]&&o--);var d=new ArrayBuffer(o),h=new Uint8Array(d);for(t=0;t<c;t+=4)a=s[e.charCodeAt(t)],r=s[e.charCodeAt(t+1)],n=s[e.charCodeAt(t+2)],i=s[e.charCodeAt(t+3)],h[u++]=a<<2|r>>4,h[u++]=(15&r)<<4|n>>2,h[u++]=(3&n)<<6|63&i;return d}}()},function(e,t){e.exports=function(e,t,s){return t in e?Object.defineProperty(e,t,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[t]=s,e}},function(e,t,s){var a=s(13),r=s(14);e.exports=function(e,t,s){var n=t&&s||0;"string"==typeof e&&(t="binary"===e?new Array(16):null,e=null);var i=(e=e||{}).random||(e.rng||a)();if(i[6]=15&i[6]|64,i[8]=63&i[8]|128,t)for(var o=0;o<16;++o)t[n+o]=i[o];return t||r(i)}},function(e,t){var s;s=function(){return this}();try{s=s||new Function("return this")()}catch(e){"object"==typeof window&&(s=window)}e.exports=s},function(e,t,s){"use strict";(function(e){ +/*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh <http://feross.org> + * @license MIT + */ +var a=s(15),r=s(16),n=s(17);function i(){return c.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function o(e,t){if(i()<t)throw new RangeError("Invalid typed array length");return c.TYPED_ARRAY_SUPPORT?(e=new Uint8Array(t)).__proto__=c.prototype:(null===e&&(e=new c(t)),e.length=t),e}function c(e,t,s){if(!(c.TYPED_ARRAY_SUPPORT||this instanceof c))return new c(e,t,s);if("number"==typeof e){if("string"==typeof t)throw new Error("If encoding is specified then the first argument must be a string");return h(this,e)}return u(this,e,t,s)}function u(e,t,s,a){if("number"==typeof t)throw new TypeError('"value" argument must not be a number');return"undefined"!=typeof ArrayBuffer&&t instanceof ArrayBuffer?function(e,t,s,a){if(t.byteLength,s<0||t.byteLength<s)throw new RangeError("'offset' is out of bounds");if(t.byteLength<s+(a||0))throw new RangeError("'length' is out of bounds");t=void 0===s&&void 0===a?new Uint8Array(t):void 0===a?new Uint8Array(t,s):new Uint8Array(t,s,a);c.TYPED_ARRAY_SUPPORT?(e=t).__proto__=c.prototype:e=l(e,t);return e}(e,t,s,a):"string"==typeof t?function(e,t,s){"string"==typeof s&&""!==s||(s="utf8");if(!c.isEncoding(s))throw new TypeError('"encoding" must be a valid string encoding');var a=0|m(t,s),r=(e=o(e,a)).write(t,s);r!==a&&(e=e.slice(0,r));return e}(e,t,s):function(e,t){if(c.isBuffer(t)){var s=0|f(t.length);return 0===(e=o(e,s)).length||t.copy(e,0,0,s),e}if(t){if("undefined"!=typeof ArrayBuffer&&t.buffer instanceof ArrayBuffer||"length"in t)return"number"!=typeof t.length||(a=t.length)!=a?o(e,0):l(e,t);if("Buffer"===t.type&&n(t.data))return l(e,t.data)}var a;throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}(e,t)}function d(e){if("number"!=typeof e)throw new TypeError('"size" argument must be a number');if(e<0)throw new RangeError('"size" argument must not be negative')}function h(e,t){if(d(t),e=o(e,t<0?0:0|f(t)),!c.TYPED_ARRAY_SUPPORT)for(var s=0;s<t;++s)e[s]=0;return e}function l(e,t){var s=t.length<0?0:0|f(t.length);e=o(e,s);for(var a=0;a<s;a+=1)e[a]=255&t[a];return e}function f(e){if(e>=i())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+i().toString(16)+" bytes");return 0|e}function m(e,t){if(c.isBuffer(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var s=e.length;if(0===s)return 0;for(var a=!1;;)switch(t){case"ascii":case"latin1":case"binary":return s;case"utf8":case"utf-8":case void 0:return L(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*s;case"hex":return s>>>1;case"base64":return j(e).length;default:if(a)return L(e).length;t=(""+t).toLowerCase(),a=!0}}function p(e,t,s){var a=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===s||s>this.length)&&(s=this.length),s<=0)return"";if((s>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return A(this,t,s);case"utf8":case"utf-8":return B(this,t,s);case"ascii":return N(this,t,s);case"latin1":case"binary":return U(this,t,s);case"base64":return E(this,t,s);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return T(this,t,s);default:if(a)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),a=!0}}function w(e,t,s){var a=e[t];e[t]=e[s],e[s]=a}function g(e,t,s,a,r){if(0===e.length)return-1;if("string"==typeof s?(a=s,s=0):s>2147483647?s=2147483647:s<-2147483648&&(s=-2147483648),s=+s,isNaN(s)&&(s=r?0:e.length-1),s<0&&(s=e.length+s),s>=e.length){if(r)return-1;s=e.length-1}else if(s<0){if(!r)return-1;s=0}if("string"==typeof t&&(t=c.from(t,a)),c.isBuffer(t))return 0===t.length?-1:y(e,t,s,a,r);if("number"==typeof t)return t&=255,c.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?r?Uint8Array.prototype.indexOf.call(e,t,s):Uint8Array.prototype.lastIndexOf.call(e,t,s):y(e,[t],s,a,r);throw new TypeError("val must be string, number or Buffer")}function y(e,t,s,a,r){var n,i=1,o=e.length,c=t.length;if(void 0!==a&&("ucs2"===(a=String(a).toLowerCase())||"ucs-2"===a||"utf16le"===a||"utf-16le"===a)){if(e.length<2||t.length<2)return-1;i=2,o/=2,c/=2,s/=2}function u(e,t){return 1===i?e[t]:e.readUInt16BE(t*i)}if(r){var d=-1;for(n=s;n<o;n++)if(u(e,n)===u(t,-1===d?0:n-d)){if(-1===d&&(d=n),n-d+1===c)return d*i}else-1!==d&&(n-=n-d),d=-1}else for(s+c>o&&(s=o-c),n=s;n>=0;n--){for(var h=!0,l=0;l<c;l++)if(u(e,n+l)!==u(t,l)){h=!1;break}if(h)return n}return-1}function b(e,t,s,a){s=Number(s)||0;var r=e.length-s;a?(a=Number(a))>r&&(a=r):a=r;var n=t.length;if(n%2!=0)throw new TypeError("Invalid hex string");a>n/2&&(a=n/2);for(var i=0;i<a;++i){var o=parseInt(t.substr(2*i,2),16);if(isNaN(o))return i;e[s+i]=o}return i}function v(e,t,s,a){return q(L(t,e.length-s),e,s,a)}function M(e,t,s,a){return q(function(e){for(var t=[],s=0;s<e.length;++s)t.push(255&e.charCodeAt(s));return t}(t),e,s,a)}function S(e,t,s,a){return M(e,t,s,a)}function I(e,t,s,a){return q(j(t),e,s,a)}function P(e,t,s,a){return q(function(e,t){for(var s,a,r,n=[],i=0;i<e.length&&!((t-=2)<0);++i)s=e.charCodeAt(i),a=s>>8,r=s%256,n.push(r),n.push(a);return n}(t,e.length-s),e,s,a)}function E(e,t,s){return 0===t&&s===e.length?a.fromByteArray(e):a.fromByteArray(e.slice(t,s))}function B(e,t,s){s=Math.min(e.length,s);for(var a=[],r=t;r<s;){var n,i,o,c,u=e[r],d=null,h=u>239?4:u>223?3:u>191?2:1;if(r+h<=s)switch(h){case 1:u<128&&(d=u);break;case 2:128==(192&(n=e[r+1]))&&(c=(31&u)<<6|63&n)>127&&(d=c);break;case 3:n=e[r+1],i=e[r+2],128==(192&n)&&128==(192&i)&&(c=(15&u)<<12|(63&n)<<6|63&i)>2047&&(c<55296||c>57343)&&(d=c);break;case 4:n=e[r+1],i=e[r+2],o=e[r+3],128==(192&n)&&128==(192&i)&&128==(192&o)&&(c=(15&u)<<18|(63&n)<<12|(63&i)<<6|63&o)>65535&&c<1114112&&(d=c)}null===d?(d=65533,h=1):d>65535&&(d-=65536,a.push(d>>>10&1023|55296),d=56320|1023&d),a.push(d),r+=h}return function(e){var t=e.length;if(t<=4096)return String.fromCharCode.apply(String,e);var s="",a=0;for(;a<t;)s+=String.fromCharCode.apply(String,e.slice(a,a+=4096));return s}(a)}t.Buffer=c,t.SlowBuffer=function(e){+e!=e&&(e=0);return c.alloc(+e)},t.INSPECT_MAX_BYTES=50,c.TYPED_ARRAY_SUPPORT=void 0!==e.TYPED_ARRAY_SUPPORT?e.TYPED_ARRAY_SUPPORT:function(){try{var e=new Uint8Array(1);return e.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===e.foo()&&"function"==typeof e.subarray&&0===e.subarray(1,1).byteLength}catch(e){return!1}}(),t.kMaxLength=i(),c.poolSize=8192,c._augment=function(e){return e.__proto__=c.prototype,e},c.from=function(e,t,s){return u(null,e,t,s)},c.TYPED_ARRAY_SUPPORT&&(c.prototype.__proto__=Uint8Array.prototype,c.__proto__=Uint8Array,"undefined"!=typeof Symbol&&Symbol.species&&c[Symbol.species]===c&&Object.defineProperty(c,Symbol.species,{value:null,configurable:!0})),c.alloc=function(e,t,s){return function(e,t,s,a){return d(t),t<=0?o(e,t):void 0!==s?"string"==typeof a?o(e,t).fill(s,a):o(e,t).fill(s):o(e,t)}(null,e,t,s)},c.allocUnsafe=function(e){return h(null,e)},c.allocUnsafeSlow=function(e){return h(null,e)},c.isBuffer=function(e){return!(null==e||!e._isBuffer)},c.compare=function(e,t){if(!c.isBuffer(e)||!c.isBuffer(t))throw new TypeError("Arguments must be Buffers");if(e===t)return 0;for(var s=e.length,a=t.length,r=0,n=Math.min(s,a);r<n;++r)if(e[r]!==t[r]){s=e[r],a=t[r];break}return s<a?-1:a<s?1:0},c.isEncoding=function(e){switch(String(e).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},c.concat=function(e,t){if(!n(e))throw new TypeError('"list" argument must be an Array of Buffers');if(0===e.length)return c.alloc(0);var s;if(void 0===t)for(t=0,s=0;s<e.length;++s)t+=e[s].length;var a=c.allocUnsafe(t),r=0;for(s=0;s<e.length;++s){var i=e[s];if(!c.isBuffer(i))throw new TypeError('"list" argument must be an Array of Buffers');i.copy(a,r),r+=i.length}return a},c.byteLength=m,c.prototype._isBuffer=!0,c.prototype.swap16=function(){var e=this.length;if(e%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var t=0;t<e;t+=2)w(this,t,t+1);return this},c.prototype.swap32=function(){var e=this.length;if(e%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var t=0;t<e;t+=4)w(this,t,t+3),w(this,t+1,t+2);return this},c.prototype.swap64=function(){var e=this.length;if(e%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var t=0;t<e;t+=8)w(this,t,t+7),w(this,t+1,t+6),w(this,t+2,t+5),w(this,t+3,t+4);return this},c.prototype.toString=function(){var e=0|this.length;return 0===e?"":0===arguments.length?B(this,0,e):p.apply(this,arguments)},c.prototype.equals=function(e){if(!c.isBuffer(e))throw new TypeError("Argument must be a Buffer");return this===e||0===c.compare(this,e)},c.prototype.inspect=function(){var e="",s=t.INSPECT_MAX_BYTES;return this.length>0&&(e=this.toString("hex",0,s).match(/.{2}/g).join(" "),this.length>s&&(e+=" ... ")),"<Buffer "+e+">"},c.prototype.compare=function(e,t,s,a,r){if(!c.isBuffer(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===s&&(s=e?e.length:0),void 0===a&&(a=0),void 0===r&&(r=this.length),t<0||s>e.length||a<0||r>this.length)throw new RangeError("out of range index");if(a>=r&&t>=s)return 0;if(a>=r)return-1;if(t>=s)return 1;if(this===e)return 0;for(var n=(r>>>=0)-(a>>>=0),i=(s>>>=0)-(t>>>=0),o=Math.min(n,i),u=this.slice(a,r),d=e.slice(t,s),h=0;h<o;++h)if(u[h]!==d[h]){n=u[h],i=d[h];break}return n<i?-1:i<n?1:0},c.prototype.includes=function(e,t,s){return-1!==this.indexOf(e,t,s)},c.prototype.indexOf=function(e,t,s){return g(this,e,t,s,!0)},c.prototype.lastIndexOf=function(e,t,s){return g(this,e,t,s,!1)},c.prototype.write=function(e,t,s,a){if(void 0===t)a="utf8",s=this.length,t=0;else if(void 0===s&&"string"==typeof t)a=t,s=this.length,t=0;else{if(!isFinite(t))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");t|=0,isFinite(s)?(s|=0,void 0===a&&(a="utf8")):(a=s,s=void 0)}var r=this.length-t;if((void 0===s||s>r)&&(s=r),e.length>0&&(s<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");a||(a="utf8");for(var n=!1;;)switch(a){case"hex":return b(this,e,t,s);case"utf8":case"utf-8":return v(this,e,t,s);case"ascii":return M(this,e,t,s);case"latin1":case"binary":return S(this,e,t,s);case"base64":return I(this,e,t,s);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return P(this,e,t,s);default:if(n)throw new TypeError("Unknown encoding: "+a);a=(""+a).toLowerCase(),n=!0}},c.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function N(e,t,s){var a="";s=Math.min(e.length,s);for(var r=t;r<s;++r)a+=String.fromCharCode(127&e[r]);return a}function U(e,t,s){var a="";s=Math.min(e.length,s);for(var r=t;r<s;++r)a+=String.fromCharCode(e[r]);return a}function A(e,t,s){var a=e.length;(!t||t<0)&&(t=0),(!s||s<0||s>a)&&(s=a);for(var r="",n=t;n<s;++n)r+=F(e[n]);return r}function T(e,t,s){for(var a=e.slice(t,s),r="",n=0;n<a.length;n+=2)r+=String.fromCharCode(a[n]+256*a[n+1]);return r}function k(e,t,s){if(e%1!=0||e<0)throw new RangeError("offset is not uint");if(e+t>s)throw new RangeError("Trying to access beyond buffer length")}function D(e,t,s,a,r,n){if(!c.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>r||t<n)throw new RangeError('"value" argument is out of bounds');if(s+a>e.length)throw new RangeError("Index out of range")}function K(e,t,s,a){t<0&&(t=65535+t+1);for(var r=0,n=Math.min(e.length-s,2);r<n;++r)e[s+r]=(t&255<<8*(a?r:1-r))>>>8*(a?r:1-r)}function x(e,t,s,a){t<0&&(t=4294967295+t+1);for(var r=0,n=Math.min(e.length-s,4);r<n;++r)e[s+r]=t>>>8*(a?r:3-r)&255}function R(e,t,s,a,r,n){if(s+a>e.length)throw new RangeError("Index out of range");if(s<0)throw new RangeError("Index out of range")}function O(e,t,s,a,n){return n||R(e,0,s,4),r.write(e,t,s,a,23,4),s+4}function C(e,t,s,a,n){return n||R(e,0,s,8),r.write(e,t,s,a,52,8),s+8}c.prototype.slice=function(e,t){var s,a=this.length;if((e=~~e)<0?(e+=a)<0&&(e=0):e>a&&(e=a),(t=void 0===t?a:~~t)<0?(t+=a)<0&&(t=0):t>a&&(t=a),t<e&&(t=e),c.TYPED_ARRAY_SUPPORT)(s=this.subarray(e,t)).__proto__=c.prototype;else{var r=t-e;s=new c(r,void 0);for(var n=0;n<r;++n)s[n]=this[n+e]}return s},c.prototype.readUIntLE=function(e,t,s){e|=0,t|=0,s||k(e,t,this.length);for(var a=this[e],r=1,n=0;++n<t&&(r*=256);)a+=this[e+n]*r;return a},c.prototype.readUIntBE=function(e,t,s){e|=0,t|=0,s||k(e,t,this.length);for(var a=this[e+--t],r=1;t>0&&(r*=256);)a+=this[e+--t]*r;return a},c.prototype.readUInt8=function(e,t){return t||k(e,1,this.length),this[e]},c.prototype.readUInt16LE=function(e,t){return t||k(e,2,this.length),this[e]|this[e+1]<<8},c.prototype.readUInt16BE=function(e,t){return t||k(e,2,this.length),this[e]<<8|this[e+1]},c.prototype.readUInt32LE=function(e,t){return t||k(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},c.prototype.readUInt32BE=function(e,t){return t||k(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},c.prototype.readIntLE=function(e,t,s){e|=0,t|=0,s||k(e,t,this.length);for(var a=this[e],r=1,n=0;++n<t&&(r*=256);)a+=this[e+n]*r;return a>=(r*=128)&&(a-=Math.pow(2,8*t)),a},c.prototype.readIntBE=function(e,t,s){e|=0,t|=0,s||k(e,t,this.length);for(var a=t,r=1,n=this[e+--a];a>0&&(r*=256);)n+=this[e+--a]*r;return n>=(r*=128)&&(n-=Math.pow(2,8*t)),n},c.prototype.readInt8=function(e,t){return t||k(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},c.prototype.readInt16LE=function(e,t){t||k(e,2,this.length);var s=this[e]|this[e+1]<<8;return 32768&s?4294901760|s:s},c.prototype.readInt16BE=function(e,t){t||k(e,2,this.length);var s=this[e+1]|this[e]<<8;return 32768&s?4294901760|s:s},c.prototype.readInt32LE=function(e,t){return t||k(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},c.prototype.readInt32BE=function(e,t){return t||k(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},c.prototype.readFloatLE=function(e,t){return t||k(e,4,this.length),r.read(this,e,!0,23,4)},c.prototype.readFloatBE=function(e,t){return t||k(e,4,this.length),r.read(this,e,!1,23,4)},c.prototype.readDoubleLE=function(e,t){return t||k(e,8,this.length),r.read(this,e,!0,52,8)},c.prototype.readDoubleBE=function(e,t){return t||k(e,8,this.length),r.read(this,e,!1,52,8)},c.prototype.writeUIntLE=function(e,t,s,a){(e=+e,t|=0,s|=0,a)||D(this,e,t,s,Math.pow(2,8*s)-1,0);var r=1,n=0;for(this[t]=255&e;++n<s&&(r*=256);)this[t+n]=e/r&255;return t+s},c.prototype.writeUIntBE=function(e,t,s,a){(e=+e,t|=0,s|=0,a)||D(this,e,t,s,Math.pow(2,8*s)-1,0);var r=s-1,n=1;for(this[t+r]=255&e;--r>=0&&(n*=256);)this[t+r]=e/n&255;return t+s},c.prototype.writeUInt8=function(e,t,s){return e=+e,t|=0,s||D(this,e,t,1,255,0),c.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},c.prototype.writeUInt16LE=function(e,t,s){return e=+e,t|=0,s||D(this,e,t,2,65535,0),c.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):K(this,e,t,!0),t+2},c.prototype.writeUInt16BE=function(e,t,s){return e=+e,t|=0,s||D(this,e,t,2,65535,0),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):K(this,e,t,!1),t+2},c.prototype.writeUInt32LE=function(e,t,s){return e=+e,t|=0,s||D(this,e,t,4,4294967295,0),c.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):x(this,e,t,!0),t+4},c.prototype.writeUInt32BE=function(e,t,s){return e=+e,t|=0,s||D(this,e,t,4,4294967295,0),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):x(this,e,t,!1),t+4},c.prototype.writeIntLE=function(e,t,s,a){if(e=+e,t|=0,!a){var r=Math.pow(2,8*s-1);D(this,e,t,s,r-1,-r)}var n=0,i=1,o=0;for(this[t]=255&e;++n<s&&(i*=256);)e<0&&0===o&&0!==this[t+n-1]&&(o=1),this[t+n]=(e/i>>0)-o&255;return t+s},c.prototype.writeIntBE=function(e,t,s,a){if(e=+e,t|=0,!a){var r=Math.pow(2,8*s-1);D(this,e,t,s,r-1,-r)}var n=s-1,i=1,o=0;for(this[t+n]=255&e;--n>=0&&(i*=256);)e<0&&0===o&&0!==this[t+n+1]&&(o=1),this[t+n]=(e/i>>0)-o&255;return t+s},c.prototype.writeInt8=function(e,t,s){return e=+e,t|=0,s||D(this,e,t,1,127,-128),c.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},c.prototype.writeInt16LE=function(e,t,s){return e=+e,t|=0,s||D(this,e,t,2,32767,-32768),c.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):K(this,e,t,!0),t+2},c.prototype.writeInt16BE=function(e,t,s){return e=+e,t|=0,s||D(this,e,t,2,32767,-32768),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):K(this,e,t,!1),t+2},c.prototype.writeInt32LE=function(e,t,s){return e=+e,t|=0,s||D(this,e,t,4,2147483647,-2147483648),c.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):x(this,e,t,!0),t+4},c.prototype.writeInt32BE=function(e,t,s){return e=+e,t|=0,s||D(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):x(this,e,t,!1),t+4},c.prototype.writeFloatLE=function(e,t,s){return O(this,e,t,!0,s)},c.prototype.writeFloatBE=function(e,t,s){return O(this,e,t,!1,s)},c.prototype.writeDoubleLE=function(e,t,s){return C(this,e,t,!0,s)},c.prototype.writeDoubleBE=function(e,t,s){return C(this,e,t,!1,s)},c.prototype.copy=function(e,t,s,a){if(s||(s=0),a||0===a||(a=this.length),t>=e.length&&(t=e.length),t||(t=0),a>0&&a<s&&(a=s),a===s)return 0;if(0===e.length||0===this.length)return 0;if(t<0)throw new RangeError("targetStart out of bounds");if(s<0||s>=this.length)throw new RangeError("sourceStart out of bounds");if(a<0)throw new RangeError("sourceEnd out of bounds");a>this.length&&(a=this.length),e.length-t<a-s&&(a=e.length-t+s);var r,n=a-s;if(this===e&&s<t&&t<a)for(r=n-1;r>=0;--r)e[r+t]=this[r+s];else if(n<1e3||!c.TYPED_ARRAY_SUPPORT)for(r=0;r<n;++r)e[r+t]=this[r+s];else Uint8Array.prototype.set.call(e,this.subarray(s,s+n),t);return n},c.prototype.fill=function(e,t,s,a){if("string"==typeof e){if("string"==typeof t?(a=t,t=0,s=this.length):"string"==typeof s&&(a=s,s=this.length),1===e.length){var r=e.charCodeAt(0);r<256&&(e=r)}if(void 0!==a&&"string"!=typeof a)throw new TypeError("encoding must be a string");if("string"==typeof a&&!c.isEncoding(a))throw new TypeError("Unknown encoding: "+a)}else"number"==typeof e&&(e&=255);if(t<0||this.length<t||this.length<s)throw new RangeError("Out of range index");if(s<=t)return this;var n;if(t>>>=0,s=void 0===s?this.length:s>>>0,e||(e=0),"number"==typeof e)for(n=t;n<s;++n)this[n]=e;else{var i=c.isBuffer(e)?e:L(new c(e,a).toString()),o=i.length;for(n=0;n<s-t;++n)this[n+t]=i[n%o]}return this};var _=/[^+\/0-9A-Za-z-_]/g;function F(e){return e<16?"0"+e.toString(16):e.toString(16)}function L(e,t){var s;t=t||1/0;for(var a=e.length,r=null,n=[],i=0;i<a;++i){if((s=e.charCodeAt(i))>55295&&s<57344){if(!r){if(s>56319){(t-=3)>-1&&n.push(239,191,189);continue}if(i+1===a){(t-=3)>-1&&n.push(239,191,189);continue}r=s;continue}if(s<56320){(t-=3)>-1&&n.push(239,191,189),r=s;continue}s=65536+(r-55296<<10|s-56320)}else r&&(t-=3)>-1&&n.push(239,191,189);if(r=null,s<128){if((t-=1)<0)break;n.push(s)}else if(s<2048){if((t-=2)<0)break;n.push(s>>6|192,63&s|128)}else if(s<65536){if((t-=3)<0)break;n.push(s>>12|224,s>>6&63|128,63&s|128)}else{if(!(s<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;n.push(s>>18|240,s>>12&63|128,s>>6&63|128,63&s|128)}}return n}function j(e){return a.toByteArray(function(e){if((e=function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}(e).replace(_,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function q(e,t,s,a){for(var r=0;r<a&&!(r+s>=t.length||r>=e.length);++r)t[r+s]=e[r];return r}}).call(this,s(3))},function(e,t,s){(function(e){!function(e,t){"use strict";function a(e,t){if(!e)throw new Error(t||"Assertion failed")}function r(e,t){e.super_=t;var s=function(){};s.prototype=t.prototype,e.prototype=new s,e.prototype.constructor=e}function n(e,t,s){if(n.isBN(e))return e;this.negative=0,this.words=null,this.length=0,this.red=null,null!==e&&("le"!==t&&"be"!==t||(s=t,t=10),this._init(e||0,t||10,s||"be"))}var i;"object"==typeof e?e.exports=n:t.BN=n,n.BN=n,n.wordSize=26;try{i=s(20).Buffer}catch(e){}function o(e,t,s){for(var a=0,r=Math.min(e.length,s),n=t;n<r;n++){var i=e.charCodeAt(n)-48;a<<=4,a|=i>=49&&i<=54?i-49+10:i>=17&&i<=22?i-17+10:15&i}return a}function c(e,t,s,a){for(var r=0,n=Math.min(e.length,s),i=t;i<n;i++){var o=e.charCodeAt(i)-48;r*=a,r+=o>=49?o-49+10:o>=17?o-17+10:o}return r}n.isBN=function(e){return e instanceof n||null!==e&&"object"==typeof e&&e.constructor.wordSize===n.wordSize&&Array.isArray(e.words)},n.max=function(e,t){return e.cmp(t)>0?e:t},n.min=function(e,t){return e.cmp(t)<0?e:t},n.prototype._init=function(e,t,s){if("number"==typeof e)return this._initNumber(e,t,s);if("object"==typeof e)return this._initArray(e,t,s);"hex"===t&&(t=16),a(t===(0|t)&&t>=2&&t<=36);var r=0;"-"===(e=e.toString().replace(/\s+/g,""))[0]&&r++,16===t?this._parseHex(e,r):this._parseBase(e,t,r),"-"===e[0]&&(this.negative=1),this.strip(),"le"===s&&this._initArray(this.toArray(),t,s)},n.prototype._initNumber=function(e,t,s){e<0&&(this.negative=1,e=-e),e<67108864?(this.words=[67108863&e],this.length=1):e<4503599627370496?(this.words=[67108863&e,e/67108864&67108863],this.length=2):(a(e<9007199254740992),this.words=[67108863&e,e/67108864&67108863,1],this.length=3),"le"===s&&this._initArray(this.toArray(),t,s)},n.prototype._initArray=function(e,t,s){if(a("number"==typeof e.length),e.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(e.length/3),this.words=new Array(this.length);for(var r=0;r<this.length;r++)this.words[r]=0;var n,i,o=0;if("be"===s)for(r=e.length-1,n=0;r>=0;r-=3)i=e[r]|e[r-1]<<8|e[r-2]<<16,this.words[n]|=i<<o&67108863,this.words[n+1]=i>>>26-o&67108863,(o+=24)>=26&&(o-=26,n++);else if("le"===s)for(r=0,n=0;r<e.length;r+=3)i=e[r]|e[r+1]<<8|e[r+2]<<16,this.words[n]|=i<<o&67108863,this.words[n+1]=i>>>26-o&67108863,(o+=24)>=26&&(o-=26,n++);return this.strip()},n.prototype._parseHex=function(e,t){this.length=Math.ceil((e.length-t)/6),this.words=new Array(this.length);for(var s=0;s<this.length;s++)this.words[s]=0;var a,r,n=0;for(s=e.length-6,a=0;s>=t;s-=6)r=o(e,s,s+6),this.words[a]|=r<<n&67108863,this.words[a+1]|=r>>>26-n&4194303,(n+=24)>=26&&(n-=26,a++);s+6!==t&&(r=o(e,t,s+6),this.words[a]|=r<<n&67108863,this.words[a+1]|=r>>>26-n&4194303),this.strip()},n.prototype._parseBase=function(e,t,s){this.words=[0],this.length=1;for(var a=0,r=1;r<=67108863;r*=t)a++;a--,r=r/t|0;for(var n=e.length-s,i=n%a,o=Math.min(n,n-i)+s,u=0,d=s;d<o;d+=a)u=c(e,d,d+a,t),this.imuln(r),this.words[0]+u<67108864?this.words[0]+=u:this._iaddn(u);if(0!==i){var h=1;for(u=c(e,d,e.length,t),d=0;d<i;d++)h*=t;this.imuln(h),this.words[0]+u<67108864?this.words[0]+=u:this._iaddn(u)}},n.prototype.copy=function(e){e.words=new Array(this.length);for(var t=0;t<this.length;t++)e.words[t]=this.words[t];e.length=this.length,e.negative=this.negative,e.red=this.red},n.prototype.clone=function(){var e=new n(null);return this.copy(e),e},n.prototype._expand=function(e){for(;this.length<e;)this.words[this.length++]=0;return this},n.prototype.strip=function(){for(;this.length>1&&0===this.words[this.length-1];)this.length--;return this._normSign()},n.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},n.prototype.inspect=function(){return(this.red?"<BN-R: ":"<BN: ")+this.toString(16)+">"};var u=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],d=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],h=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function l(e,t,s){s.negative=t.negative^e.negative;var a=e.length+t.length|0;s.length=a,a=a-1|0;var r=0|e.words[0],n=0|t.words[0],i=r*n,o=67108863&i,c=i/67108864|0;s.words[0]=o;for(var u=1;u<a;u++){for(var d=c>>>26,h=67108863&c,l=Math.min(u,t.length-1),f=Math.max(0,u-e.length+1);f<=l;f++){var m=u-f|0;d+=(i=(r=0|e.words[m])*(n=0|t.words[f])+h)/67108864|0,h=67108863&i}s.words[u]=0|h,c=0|d}return 0!==c?s.words[u]=0|c:s.length--,s.strip()}n.prototype.toString=function(e,t){var s;if(t=0|t||1,16===(e=e||10)||"hex"===e){s="";for(var r=0,n=0,i=0;i<this.length;i++){var o=this.words[i],c=(16777215&(o<<r|n)).toString(16);s=0!==(n=o>>>24-r&16777215)||i!==this.length-1?u[6-c.length]+c+s:c+s,(r+=2)>=26&&(r-=26,i--)}for(0!==n&&(s=n.toString(16)+s);s.length%t!=0;)s="0"+s;return 0!==this.negative&&(s="-"+s),s}if(e===(0|e)&&e>=2&&e<=36){var l=d[e],f=h[e];s="";var m=this.clone();for(m.negative=0;!m.isZero();){var p=m.modn(f).toString(e);s=(m=m.idivn(f)).isZero()?p+s:u[l-p.length]+p+s}for(this.isZero()&&(s="0"+s);s.length%t!=0;)s="0"+s;return 0!==this.negative&&(s="-"+s),s}a(!1,"Base should be between 2 and 36")},n.prototype.toNumber=function(){var e=this.words[0];return 2===this.length?e+=67108864*this.words[1]:3===this.length&&1===this.words[2]?e+=4503599627370496+67108864*this.words[1]:this.length>2&&a(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-e:e},n.prototype.toJSON=function(){return this.toString(16)},n.prototype.toBuffer=function(e,t){return a(void 0!==i),this.toArrayLike(i,e,t)},n.prototype.toArray=function(e,t){return this.toArrayLike(Array,e,t)},n.prototype.toArrayLike=function(e,t,s){var r=this.byteLength(),n=s||Math.max(1,r);a(r<=n,"byte array longer than desired length"),a(n>0,"Requested array length <= 0"),this.strip();var i,o,c="le"===t,u=new e(n),d=this.clone();if(c){for(o=0;!d.isZero();o++)i=d.andln(255),d.iushrn(8),u[o]=i;for(;o<n;o++)u[o]=0}else{for(o=0;o<n-r;o++)u[o]=0;for(o=0;!d.isZero();o++)i=d.andln(255),d.iushrn(8),u[n-o-1]=i}return u},Math.clz32?n.prototype._countBits=function(e){return 32-Math.clz32(e)}:n.prototype._countBits=function(e){var t=e,s=0;return t>=4096&&(s+=13,t>>>=13),t>=64&&(s+=7,t>>>=7),t>=8&&(s+=4,t>>>=4),t>=2&&(s+=2,t>>>=2),s+t},n.prototype._zeroBits=function(e){if(0===e)return 26;var t=e,s=0;return 0==(8191&t)&&(s+=13,t>>>=13),0==(127&t)&&(s+=7,t>>>=7),0==(15&t)&&(s+=4,t>>>=4),0==(3&t)&&(s+=2,t>>>=2),0==(1&t)&&s++,s},n.prototype.bitLength=function(){var e=this.words[this.length-1],t=this._countBits(e);return 26*(this.length-1)+t},n.prototype.zeroBits=function(){if(this.isZero())return 0;for(var e=0,t=0;t<this.length;t++){var s=this._zeroBits(this.words[t]);if(e+=s,26!==s)break}return e},n.prototype.byteLength=function(){return Math.ceil(this.bitLength()/8)},n.prototype.toTwos=function(e){return 0!==this.negative?this.abs().inotn(e).iaddn(1):this.clone()},n.prototype.fromTwos=function(e){return this.testn(e-1)?this.notn(e).iaddn(1).ineg():this.clone()},n.prototype.isNeg=function(){return 0!==this.negative},n.prototype.neg=function(){return this.clone().ineg()},n.prototype.ineg=function(){return this.isZero()||(this.negative^=1),this},n.prototype.iuor=function(e){for(;this.length<e.length;)this.words[this.length++]=0;for(var t=0;t<e.length;t++)this.words[t]=this.words[t]|e.words[t];return this.strip()},n.prototype.ior=function(e){return a(0==(this.negative|e.negative)),this.iuor(e)},n.prototype.or=function(e){return this.length>e.length?this.clone().ior(e):e.clone().ior(this)},n.prototype.uor=function(e){return this.length>e.length?this.clone().iuor(e):e.clone().iuor(this)},n.prototype.iuand=function(e){var t;t=this.length>e.length?e:this;for(var s=0;s<t.length;s++)this.words[s]=this.words[s]&e.words[s];return this.length=t.length,this.strip()},n.prototype.iand=function(e){return a(0==(this.negative|e.negative)),this.iuand(e)},n.prototype.and=function(e){return this.length>e.length?this.clone().iand(e):e.clone().iand(this)},n.prototype.uand=function(e){return this.length>e.length?this.clone().iuand(e):e.clone().iuand(this)},n.prototype.iuxor=function(e){var t,s;this.length>e.length?(t=this,s=e):(t=e,s=this);for(var a=0;a<s.length;a++)this.words[a]=t.words[a]^s.words[a];if(this!==t)for(;a<t.length;a++)this.words[a]=t.words[a];return this.length=t.length,this.strip()},n.prototype.ixor=function(e){return a(0==(this.negative|e.negative)),this.iuxor(e)},n.prototype.xor=function(e){return this.length>e.length?this.clone().ixor(e):e.clone().ixor(this)},n.prototype.uxor=function(e){return this.length>e.length?this.clone().iuxor(e):e.clone().iuxor(this)},n.prototype.inotn=function(e){a("number"==typeof e&&e>=0);var t=0|Math.ceil(e/26),s=e%26;this._expand(t),s>0&&t--;for(var r=0;r<t;r++)this.words[r]=67108863&~this.words[r];return s>0&&(this.words[r]=~this.words[r]&67108863>>26-s),this.strip()},n.prototype.notn=function(e){return this.clone().inotn(e)},n.prototype.setn=function(e,t){a("number"==typeof e&&e>=0);var s=e/26|0,r=e%26;return this._expand(s+1),this.words[s]=t?this.words[s]|1<<r:this.words[s]&~(1<<r),this.strip()},n.prototype.iadd=function(e){var t,s,a;if(0!==this.negative&&0===e.negative)return this.negative=0,t=this.isub(e),this.negative^=1,this._normSign();if(0===this.negative&&0!==e.negative)return e.negative=0,t=this.isub(e),e.negative=1,t._normSign();this.length>e.length?(s=this,a=e):(s=e,a=this);for(var r=0,n=0;n<a.length;n++)t=(0|s.words[n])+(0|a.words[n])+r,this.words[n]=67108863&t,r=t>>>26;for(;0!==r&&n<s.length;n++)t=(0|s.words[n])+r,this.words[n]=67108863&t,r=t>>>26;if(this.length=s.length,0!==r)this.words[this.length]=r,this.length++;else if(s!==this)for(;n<s.length;n++)this.words[n]=s.words[n];return this},n.prototype.add=function(e){var t;return 0!==e.negative&&0===this.negative?(e.negative=0,t=this.sub(e),e.negative^=1,t):0===e.negative&&0!==this.negative?(this.negative=0,t=e.sub(this),this.negative=1,t):this.length>e.length?this.clone().iadd(e):e.clone().iadd(this)},n.prototype.isub=function(e){if(0!==e.negative){e.negative=0;var t=this.iadd(e);return e.negative=1,t._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(e),this.negative=1,this._normSign();var s,a,r=this.cmp(e);if(0===r)return this.negative=0,this.length=1,this.words[0]=0,this;r>0?(s=this,a=e):(s=e,a=this);for(var n=0,i=0;i<a.length;i++)n=(t=(0|s.words[i])-(0|a.words[i])+n)>>26,this.words[i]=67108863&t;for(;0!==n&&i<s.length;i++)n=(t=(0|s.words[i])+n)>>26,this.words[i]=67108863&t;if(0===n&&i<s.length&&s!==this)for(;i<s.length;i++)this.words[i]=s.words[i];return this.length=Math.max(this.length,i),s!==this&&(this.negative=1),this.strip()},n.prototype.sub=function(e){return this.clone().isub(e)};var f=function(e,t,s){var a,r,n,i=e.words,o=t.words,c=s.words,u=0,d=0|i[0],h=8191&d,l=d>>>13,f=0|i[1],m=8191&f,p=f>>>13,w=0|i[2],g=8191&w,y=w>>>13,b=0|i[3],v=8191&b,M=b>>>13,S=0|i[4],I=8191&S,P=S>>>13,E=0|i[5],B=8191&E,N=E>>>13,U=0|i[6],A=8191&U,T=U>>>13,k=0|i[7],D=8191&k,K=k>>>13,x=0|i[8],R=8191&x,O=x>>>13,C=0|i[9],_=8191&C,F=C>>>13,L=0|o[0],j=8191&L,q=L>>>13,V=0|o[1],H=8191&V,G=V>>>13,J=0|o[2],W=8191&J,Y=J>>>13,z=0|o[3],Z=8191&z,X=z>>>13,Q=0|o[4],$=8191&Q,ee=Q>>>13,te=0|o[5],se=8191&te,ae=te>>>13,re=0|o[6],ne=8191&re,ie=re>>>13,oe=0|o[7],ce=8191&oe,ue=oe>>>13,de=0|o[8],he=8191&de,le=de>>>13,fe=0|o[9],me=8191&fe,pe=fe>>>13;s.negative=e.negative^t.negative,s.length=19;var we=(u+(a=Math.imul(h,j))|0)+((8191&(r=(r=Math.imul(h,q))+Math.imul(l,j)|0))<<13)|0;u=((n=Math.imul(l,q))+(r>>>13)|0)+(we>>>26)|0,we&=67108863,a=Math.imul(m,j),r=(r=Math.imul(m,q))+Math.imul(p,j)|0,n=Math.imul(p,q);var ge=(u+(a=a+Math.imul(h,H)|0)|0)+((8191&(r=(r=r+Math.imul(h,G)|0)+Math.imul(l,H)|0))<<13)|0;u=((n=n+Math.imul(l,G)|0)+(r>>>13)|0)+(ge>>>26)|0,ge&=67108863,a=Math.imul(g,j),r=(r=Math.imul(g,q))+Math.imul(y,j)|0,n=Math.imul(y,q),a=a+Math.imul(m,H)|0,r=(r=r+Math.imul(m,G)|0)+Math.imul(p,H)|0,n=n+Math.imul(p,G)|0;var ye=(u+(a=a+Math.imul(h,W)|0)|0)+((8191&(r=(r=r+Math.imul(h,Y)|0)+Math.imul(l,W)|0))<<13)|0;u=((n=n+Math.imul(l,Y)|0)+(r>>>13)|0)+(ye>>>26)|0,ye&=67108863,a=Math.imul(v,j),r=(r=Math.imul(v,q))+Math.imul(M,j)|0,n=Math.imul(M,q),a=a+Math.imul(g,H)|0,r=(r=r+Math.imul(g,G)|0)+Math.imul(y,H)|0,n=n+Math.imul(y,G)|0,a=a+Math.imul(m,W)|0,r=(r=r+Math.imul(m,Y)|0)+Math.imul(p,W)|0,n=n+Math.imul(p,Y)|0;var be=(u+(a=a+Math.imul(h,Z)|0)|0)+((8191&(r=(r=r+Math.imul(h,X)|0)+Math.imul(l,Z)|0))<<13)|0;u=((n=n+Math.imul(l,X)|0)+(r>>>13)|0)+(be>>>26)|0,be&=67108863,a=Math.imul(I,j),r=(r=Math.imul(I,q))+Math.imul(P,j)|0,n=Math.imul(P,q),a=a+Math.imul(v,H)|0,r=(r=r+Math.imul(v,G)|0)+Math.imul(M,H)|0,n=n+Math.imul(M,G)|0,a=a+Math.imul(g,W)|0,r=(r=r+Math.imul(g,Y)|0)+Math.imul(y,W)|0,n=n+Math.imul(y,Y)|0,a=a+Math.imul(m,Z)|0,r=(r=r+Math.imul(m,X)|0)+Math.imul(p,Z)|0,n=n+Math.imul(p,X)|0;var ve=(u+(a=a+Math.imul(h,$)|0)|0)+((8191&(r=(r=r+Math.imul(h,ee)|0)+Math.imul(l,$)|0))<<13)|0;u=((n=n+Math.imul(l,ee)|0)+(r>>>13)|0)+(ve>>>26)|0,ve&=67108863,a=Math.imul(B,j),r=(r=Math.imul(B,q))+Math.imul(N,j)|0,n=Math.imul(N,q),a=a+Math.imul(I,H)|0,r=(r=r+Math.imul(I,G)|0)+Math.imul(P,H)|0,n=n+Math.imul(P,G)|0,a=a+Math.imul(v,W)|0,r=(r=r+Math.imul(v,Y)|0)+Math.imul(M,W)|0,n=n+Math.imul(M,Y)|0,a=a+Math.imul(g,Z)|0,r=(r=r+Math.imul(g,X)|0)+Math.imul(y,Z)|0,n=n+Math.imul(y,X)|0,a=a+Math.imul(m,$)|0,r=(r=r+Math.imul(m,ee)|0)+Math.imul(p,$)|0,n=n+Math.imul(p,ee)|0;var Me=(u+(a=a+Math.imul(h,se)|0)|0)+((8191&(r=(r=r+Math.imul(h,ae)|0)+Math.imul(l,se)|0))<<13)|0;u=((n=n+Math.imul(l,ae)|0)+(r>>>13)|0)+(Me>>>26)|0,Me&=67108863,a=Math.imul(A,j),r=(r=Math.imul(A,q))+Math.imul(T,j)|0,n=Math.imul(T,q),a=a+Math.imul(B,H)|0,r=(r=r+Math.imul(B,G)|0)+Math.imul(N,H)|0,n=n+Math.imul(N,G)|0,a=a+Math.imul(I,W)|0,r=(r=r+Math.imul(I,Y)|0)+Math.imul(P,W)|0,n=n+Math.imul(P,Y)|0,a=a+Math.imul(v,Z)|0,r=(r=r+Math.imul(v,X)|0)+Math.imul(M,Z)|0,n=n+Math.imul(M,X)|0,a=a+Math.imul(g,$)|0,r=(r=r+Math.imul(g,ee)|0)+Math.imul(y,$)|0,n=n+Math.imul(y,ee)|0,a=a+Math.imul(m,se)|0,r=(r=r+Math.imul(m,ae)|0)+Math.imul(p,se)|0,n=n+Math.imul(p,ae)|0;var Se=(u+(a=a+Math.imul(h,ne)|0)|0)+((8191&(r=(r=r+Math.imul(h,ie)|0)+Math.imul(l,ne)|0))<<13)|0;u=((n=n+Math.imul(l,ie)|0)+(r>>>13)|0)+(Se>>>26)|0,Se&=67108863,a=Math.imul(D,j),r=(r=Math.imul(D,q))+Math.imul(K,j)|0,n=Math.imul(K,q),a=a+Math.imul(A,H)|0,r=(r=r+Math.imul(A,G)|0)+Math.imul(T,H)|0,n=n+Math.imul(T,G)|0,a=a+Math.imul(B,W)|0,r=(r=r+Math.imul(B,Y)|0)+Math.imul(N,W)|0,n=n+Math.imul(N,Y)|0,a=a+Math.imul(I,Z)|0,r=(r=r+Math.imul(I,X)|0)+Math.imul(P,Z)|0,n=n+Math.imul(P,X)|0,a=a+Math.imul(v,$)|0,r=(r=r+Math.imul(v,ee)|0)+Math.imul(M,$)|0,n=n+Math.imul(M,ee)|0,a=a+Math.imul(g,se)|0,r=(r=r+Math.imul(g,ae)|0)+Math.imul(y,se)|0,n=n+Math.imul(y,ae)|0,a=a+Math.imul(m,ne)|0,r=(r=r+Math.imul(m,ie)|0)+Math.imul(p,ne)|0,n=n+Math.imul(p,ie)|0;var Ie=(u+(a=a+Math.imul(h,ce)|0)|0)+((8191&(r=(r=r+Math.imul(h,ue)|0)+Math.imul(l,ce)|0))<<13)|0;u=((n=n+Math.imul(l,ue)|0)+(r>>>13)|0)+(Ie>>>26)|0,Ie&=67108863,a=Math.imul(R,j),r=(r=Math.imul(R,q))+Math.imul(O,j)|0,n=Math.imul(O,q),a=a+Math.imul(D,H)|0,r=(r=r+Math.imul(D,G)|0)+Math.imul(K,H)|0,n=n+Math.imul(K,G)|0,a=a+Math.imul(A,W)|0,r=(r=r+Math.imul(A,Y)|0)+Math.imul(T,W)|0,n=n+Math.imul(T,Y)|0,a=a+Math.imul(B,Z)|0,r=(r=r+Math.imul(B,X)|0)+Math.imul(N,Z)|0,n=n+Math.imul(N,X)|0,a=a+Math.imul(I,$)|0,r=(r=r+Math.imul(I,ee)|0)+Math.imul(P,$)|0,n=n+Math.imul(P,ee)|0,a=a+Math.imul(v,se)|0,r=(r=r+Math.imul(v,ae)|0)+Math.imul(M,se)|0,n=n+Math.imul(M,ae)|0,a=a+Math.imul(g,ne)|0,r=(r=r+Math.imul(g,ie)|0)+Math.imul(y,ne)|0,n=n+Math.imul(y,ie)|0,a=a+Math.imul(m,ce)|0,r=(r=r+Math.imul(m,ue)|0)+Math.imul(p,ce)|0,n=n+Math.imul(p,ue)|0;var Pe=(u+(a=a+Math.imul(h,he)|0)|0)+((8191&(r=(r=r+Math.imul(h,le)|0)+Math.imul(l,he)|0))<<13)|0;u=((n=n+Math.imul(l,le)|0)+(r>>>13)|0)+(Pe>>>26)|0,Pe&=67108863,a=Math.imul(_,j),r=(r=Math.imul(_,q))+Math.imul(F,j)|0,n=Math.imul(F,q),a=a+Math.imul(R,H)|0,r=(r=r+Math.imul(R,G)|0)+Math.imul(O,H)|0,n=n+Math.imul(O,G)|0,a=a+Math.imul(D,W)|0,r=(r=r+Math.imul(D,Y)|0)+Math.imul(K,W)|0,n=n+Math.imul(K,Y)|0,a=a+Math.imul(A,Z)|0,r=(r=r+Math.imul(A,X)|0)+Math.imul(T,Z)|0,n=n+Math.imul(T,X)|0,a=a+Math.imul(B,$)|0,r=(r=r+Math.imul(B,ee)|0)+Math.imul(N,$)|0,n=n+Math.imul(N,ee)|0,a=a+Math.imul(I,se)|0,r=(r=r+Math.imul(I,ae)|0)+Math.imul(P,se)|0,n=n+Math.imul(P,ae)|0,a=a+Math.imul(v,ne)|0,r=(r=r+Math.imul(v,ie)|0)+Math.imul(M,ne)|0,n=n+Math.imul(M,ie)|0,a=a+Math.imul(g,ce)|0,r=(r=r+Math.imul(g,ue)|0)+Math.imul(y,ce)|0,n=n+Math.imul(y,ue)|0,a=a+Math.imul(m,he)|0,r=(r=r+Math.imul(m,le)|0)+Math.imul(p,he)|0,n=n+Math.imul(p,le)|0;var Ee=(u+(a=a+Math.imul(h,me)|0)|0)+((8191&(r=(r=r+Math.imul(h,pe)|0)+Math.imul(l,me)|0))<<13)|0;u=((n=n+Math.imul(l,pe)|0)+(r>>>13)|0)+(Ee>>>26)|0,Ee&=67108863,a=Math.imul(_,H),r=(r=Math.imul(_,G))+Math.imul(F,H)|0,n=Math.imul(F,G),a=a+Math.imul(R,W)|0,r=(r=r+Math.imul(R,Y)|0)+Math.imul(O,W)|0,n=n+Math.imul(O,Y)|0,a=a+Math.imul(D,Z)|0,r=(r=r+Math.imul(D,X)|0)+Math.imul(K,Z)|0,n=n+Math.imul(K,X)|0,a=a+Math.imul(A,$)|0,r=(r=r+Math.imul(A,ee)|0)+Math.imul(T,$)|0,n=n+Math.imul(T,ee)|0,a=a+Math.imul(B,se)|0,r=(r=r+Math.imul(B,ae)|0)+Math.imul(N,se)|0,n=n+Math.imul(N,ae)|0,a=a+Math.imul(I,ne)|0,r=(r=r+Math.imul(I,ie)|0)+Math.imul(P,ne)|0,n=n+Math.imul(P,ie)|0,a=a+Math.imul(v,ce)|0,r=(r=r+Math.imul(v,ue)|0)+Math.imul(M,ce)|0,n=n+Math.imul(M,ue)|0,a=a+Math.imul(g,he)|0,r=(r=r+Math.imul(g,le)|0)+Math.imul(y,he)|0,n=n+Math.imul(y,le)|0;var Be=(u+(a=a+Math.imul(m,me)|0)|0)+((8191&(r=(r=r+Math.imul(m,pe)|0)+Math.imul(p,me)|0))<<13)|0;u=((n=n+Math.imul(p,pe)|0)+(r>>>13)|0)+(Be>>>26)|0,Be&=67108863,a=Math.imul(_,W),r=(r=Math.imul(_,Y))+Math.imul(F,W)|0,n=Math.imul(F,Y),a=a+Math.imul(R,Z)|0,r=(r=r+Math.imul(R,X)|0)+Math.imul(O,Z)|0,n=n+Math.imul(O,X)|0,a=a+Math.imul(D,$)|0,r=(r=r+Math.imul(D,ee)|0)+Math.imul(K,$)|0,n=n+Math.imul(K,ee)|0,a=a+Math.imul(A,se)|0,r=(r=r+Math.imul(A,ae)|0)+Math.imul(T,se)|0,n=n+Math.imul(T,ae)|0,a=a+Math.imul(B,ne)|0,r=(r=r+Math.imul(B,ie)|0)+Math.imul(N,ne)|0,n=n+Math.imul(N,ie)|0,a=a+Math.imul(I,ce)|0,r=(r=r+Math.imul(I,ue)|0)+Math.imul(P,ce)|0,n=n+Math.imul(P,ue)|0,a=a+Math.imul(v,he)|0,r=(r=r+Math.imul(v,le)|0)+Math.imul(M,he)|0,n=n+Math.imul(M,le)|0;var Ne=(u+(a=a+Math.imul(g,me)|0)|0)+((8191&(r=(r=r+Math.imul(g,pe)|0)+Math.imul(y,me)|0))<<13)|0;u=((n=n+Math.imul(y,pe)|0)+(r>>>13)|0)+(Ne>>>26)|0,Ne&=67108863,a=Math.imul(_,Z),r=(r=Math.imul(_,X))+Math.imul(F,Z)|0,n=Math.imul(F,X),a=a+Math.imul(R,$)|0,r=(r=r+Math.imul(R,ee)|0)+Math.imul(O,$)|0,n=n+Math.imul(O,ee)|0,a=a+Math.imul(D,se)|0,r=(r=r+Math.imul(D,ae)|0)+Math.imul(K,se)|0,n=n+Math.imul(K,ae)|0,a=a+Math.imul(A,ne)|0,r=(r=r+Math.imul(A,ie)|0)+Math.imul(T,ne)|0,n=n+Math.imul(T,ie)|0,a=a+Math.imul(B,ce)|0,r=(r=r+Math.imul(B,ue)|0)+Math.imul(N,ce)|0,n=n+Math.imul(N,ue)|0,a=a+Math.imul(I,he)|0,r=(r=r+Math.imul(I,le)|0)+Math.imul(P,he)|0,n=n+Math.imul(P,le)|0;var Ue=(u+(a=a+Math.imul(v,me)|0)|0)+((8191&(r=(r=r+Math.imul(v,pe)|0)+Math.imul(M,me)|0))<<13)|0;u=((n=n+Math.imul(M,pe)|0)+(r>>>13)|0)+(Ue>>>26)|0,Ue&=67108863,a=Math.imul(_,$),r=(r=Math.imul(_,ee))+Math.imul(F,$)|0,n=Math.imul(F,ee),a=a+Math.imul(R,se)|0,r=(r=r+Math.imul(R,ae)|0)+Math.imul(O,se)|0,n=n+Math.imul(O,ae)|0,a=a+Math.imul(D,ne)|0,r=(r=r+Math.imul(D,ie)|0)+Math.imul(K,ne)|0,n=n+Math.imul(K,ie)|0,a=a+Math.imul(A,ce)|0,r=(r=r+Math.imul(A,ue)|0)+Math.imul(T,ce)|0,n=n+Math.imul(T,ue)|0,a=a+Math.imul(B,he)|0,r=(r=r+Math.imul(B,le)|0)+Math.imul(N,he)|0,n=n+Math.imul(N,le)|0;var Ae=(u+(a=a+Math.imul(I,me)|0)|0)+((8191&(r=(r=r+Math.imul(I,pe)|0)+Math.imul(P,me)|0))<<13)|0;u=((n=n+Math.imul(P,pe)|0)+(r>>>13)|0)+(Ae>>>26)|0,Ae&=67108863,a=Math.imul(_,se),r=(r=Math.imul(_,ae))+Math.imul(F,se)|0,n=Math.imul(F,ae),a=a+Math.imul(R,ne)|0,r=(r=r+Math.imul(R,ie)|0)+Math.imul(O,ne)|0,n=n+Math.imul(O,ie)|0,a=a+Math.imul(D,ce)|0,r=(r=r+Math.imul(D,ue)|0)+Math.imul(K,ce)|0,n=n+Math.imul(K,ue)|0,a=a+Math.imul(A,he)|0,r=(r=r+Math.imul(A,le)|0)+Math.imul(T,he)|0,n=n+Math.imul(T,le)|0;var Te=(u+(a=a+Math.imul(B,me)|0)|0)+((8191&(r=(r=r+Math.imul(B,pe)|0)+Math.imul(N,me)|0))<<13)|0;u=((n=n+Math.imul(N,pe)|0)+(r>>>13)|0)+(Te>>>26)|0,Te&=67108863,a=Math.imul(_,ne),r=(r=Math.imul(_,ie))+Math.imul(F,ne)|0,n=Math.imul(F,ie),a=a+Math.imul(R,ce)|0,r=(r=r+Math.imul(R,ue)|0)+Math.imul(O,ce)|0,n=n+Math.imul(O,ue)|0,a=a+Math.imul(D,he)|0,r=(r=r+Math.imul(D,le)|0)+Math.imul(K,he)|0,n=n+Math.imul(K,le)|0;var ke=(u+(a=a+Math.imul(A,me)|0)|0)+((8191&(r=(r=r+Math.imul(A,pe)|0)+Math.imul(T,me)|0))<<13)|0;u=((n=n+Math.imul(T,pe)|0)+(r>>>13)|0)+(ke>>>26)|0,ke&=67108863,a=Math.imul(_,ce),r=(r=Math.imul(_,ue))+Math.imul(F,ce)|0,n=Math.imul(F,ue),a=a+Math.imul(R,he)|0,r=(r=r+Math.imul(R,le)|0)+Math.imul(O,he)|0,n=n+Math.imul(O,le)|0;var De=(u+(a=a+Math.imul(D,me)|0)|0)+((8191&(r=(r=r+Math.imul(D,pe)|0)+Math.imul(K,me)|0))<<13)|0;u=((n=n+Math.imul(K,pe)|0)+(r>>>13)|0)+(De>>>26)|0,De&=67108863,a=Math.imul(_,he),r=(r=Math.imul(_,le))+Math.imul(F,he)|0,n=Math.imul(F,le);var Ke=(u+(a=a+Math.imul(R,me)|0)|0)+((8191&(r=(r=r+Math.imul(R,pe)|0)+Math.imul(O,me)|0))<<13)|0;u=((n=n+Math.imul(O,pe)|0)+(r>>>13)|0)+(Ke>>>26)|0,Ke&=67108863;var xe=(u+(a=Math.imul(_,me))|0)+((8191&(r=(r=Math.imul(_,pe))+Math.imul(F,me)|0))<<13)|0;return u=((n=Math.imul(F,pe))+(r>>>13)|0)+(xe>>>26)|0,xe&=67108863,c[0]=we,c[1]=ge,c[2]=ye,c[3]=be,c[4]=ve,c[5]=Me,c[6]=Se,c[7]=Ie,c[8]=Pe,c[9]=Ee,c[10]=Be,c[11]=Ne,c[12]=Ue,c[13]=Ae,c[14]=Te,c[15]=ke,c[16]=De,c[17]=Ke,c[18]=xe,0!==u&&(c[19]=u,s.length++),s};function m(e,t,s){return(new p).mulp(e,t,s)}function p(e,t){this.x=e,this.y=t}Math.imul||(f=l),n.prototype.mulTo=function(e,t){var s=this.length+e.length;return 10===this.length&&10===e.length?f(this,e,t):s<63?l(this,e,t):s<1024?function(e,t,s){s.negative=t.negative^e.negative,s.length=e.length+t.length;for(var a=0,r=0,n=0;n<s.length-1;n++){var i=r;r=0;for(var o=67108863&a,c=Math.min(n,t.length-1),u=Math.max(0,n-e.length+1);u<=c;u++){var d=n-u,h=(0|e.words[d])*(0|t.words[u]),l=67108863&h;o=67108863&(l=l+o|0),r+=(i=(i=i+(h/67108864|0)|0)+(l>>>26)|0)>>>26,i&=67108863}s.words[n]=o,a=i,i=r}return 0!==a?s.words[n]=a:s.length--,s.strip()}(this,e,t):m(this,e,t)},p.prototype.makeRBT=function(e){for(var t=new Array(e),s=n.prototype._countBits(e)-1,a=0;a<e;a++)t[a]=this.revBin(a,s,e);return t},p.prototype.revBin=function(e,t,s){if(0===e||e===s-1)return e;for(var a=0,r=0;r<t;r++)a|=(1&e)<<t-r-1,e>>=1;return a},p.prototype.permute=function(e,t,s,a,r,n){for(var i=0;i<n;i++)a[i]=t[e[i]],r[i]=s[e[i]]},p.prototype.transform=function(e,t,s,a,r,n){this.permute(n,e,t,s,a,r);for(var i=1;i<r;i<<=1)for(var o=i<<1,c=Math.cos(2*Math.PI/o),u=Math.sin(2*Math.PI/o),d=0;d<r;d+=o)for(var h=c,l=u,f=0;f<i;f++){var m=s[d+f],p=a[d+f],w=s[d+f+i],g=a[d+f+i],y=h*w-l*g;g=h*g+l*w,w=y,s[d+f]=m+w,a[d+f]=p+g,s[d+f+i]=m-w,a[d+f+i]=p-g,f!==o&&(y=c*h-u*l,l=c*l+u*h,h=y)}},p.prototype.guessLen13b=function(e,t){var s=1|Math.max(t,e),a=1&s,r=0;for(s=s/2|0;s;s>>>=1)r++;return 1<<r+1+a},p.prototype.conjugate=function(e,t,s){if(!(s<=1))for(var a=0;a<s/2;a++){var r=e[a];e[a]=e[s-a-1],e[s-a-1]=r,r=t[a],t[a]=-t[s-a-1],t[s-a-1]=-r}},p.prototype.normalize13b=function(e,t){for(var s=0,a=0;a<t/2;a++){var r=8192*Math.round(e[2*a+1]/t)+Math.round(e[2*a]/t)+s;e[a]=67108863&r,s=r<67108864?0:r/67108864|0}return e},p.prototype.convert13b=function(e,t,s,r){for(var n=0,i=0;i<t;i++)n+=0|e[i],s[2*i]=8191&n,n>>>=13,s[2*i+1]=8191&n,n>>>=13;for(i=2*t;i<r;++i)s[i]=0;a(0===n),a(0==(-8192&n))},p.prototype.stub=function(e){for(var t=new Array(e),s=0;s<e;s++)t[s]=0;return t},p.prototype.mulp=function(e,t,s){var a=2*this.guessLen13b(e.length,t.length),r=this.makeRBT(a),n=this.stub(a),i=new Array(a),o=new Array(a),c=new Array(a),u=new Array(a),d=new Array(a),h=new Array(a),l=s.words;l.length=a,this.convert13b(e.words,e.length,i,a),this.convert13b(t.words,t.length,u,a),this.transform(i,n,o,c,a,r),this.transform(u,n,d,h,a,r);for(var f=0;f<a;f++){var m=o[f]*d[f]-c[f]*h[f];c[f]=o[f]*h[f]+c[f]*d[f],o[f]=m}return this.conjugate(o,c,a),this.transform(o,c,l,n,a,r),this.conjugate(l,n,a),this.normalize13b(l,a),s.negative=e.negative^t.negative,s.length=e.length+t.length,s.strip()},n.prototype.mul=function(e){var t=new n(null);return t.words=new Array(this.length+e.length),this.mulTo(e,t)},n.prototype.mulf=function(e){var t=new n(null);return t.words=new Array(this.length+e.length),m(this,e,t)},n.prototype.imul=function(e){return this.clone().mulTo(e,this)},n.prototype.imuln=function(e){a("number"==typeof e),a(e<67108864);for(var t=0,s=0;s<this.length;s++){var r=(0|this.words[s])*e,n=(67108863&r)+(67108863&t);t>>=26,t+=r/67108864|0,t+=n>>>26,this.words[s]=67108863&n}return 0!==t&&(this.words[s]=t,this.length++),this},n.prototype.muln=function(e){return this.clone().imuln(e)},n.prototype.sqr=function(){return this.mul(this)},n.prototype.isqr=function(){return this.imul(this.clone())},n.prototype.pow=function(e){var t=function(e){for(var t=new Array(e.bitLength()),s=0;s<t.length;s++){var a=s/26|0,r=s%26;t[s]=(e.words[a]&1<<r)>>>r}return t}(e);if(0===t.length)return new n(1);for(var s=this,a=0;a<t.length&&0===t[a];a++,s=s.sqr());if(++a<t.length)for(var r=s.sqr();a<t.length;a++,r=r.sqr())0!==t[a]&&(s=s.mul(r));return s},n.prototype.iushln=function(e){a("number"==typeof e&&e>=0);var t,s=e%26,r=(e-s)/26,n=67108863>>>26-s<<26-s;if(0!==s){var i=0;for(t=0;t<this.length;t++){var o=this.words[t]&n,c=(0|this.words[t])-o<<s;this.words[t]=c|i,i=o>>>26-s}i&&(this.words[t]=i,this.length++)}if(0!==r){for(t=this.length-1;t>=0;t--)this.words[t+r]=this.words[t];for(t=0;t<r;t++)this.words[t]=0;this.length+=r}return this.strip()},n.prototype.ishln=function(e){return a(0===this.negative),this.iushln(e)},n.prototype.iushrn=function(e,t,s){var r;a("number"==typeof e&&e>=0),r=t?(t-t%26)/26:0;var n=e%26,i=Math.min((e-n)/26,this.length),o=67108863^67108863>>>n<<n,c=s;if(r-=i,r=Math.max(0,r),c){for(var u=0;u<i;u++)c.words[u]=this.words[u];c.length=i}if(0===i);else if(this.length>i)for(this.length-=i,u=0;u<this.length;u++)this.words[u]=this.words[u+i];else this.words[0]=0,this.length=1;var d=0;for(u=this.length-1;u>=0&&(0!==d||u>=r);u--){var h=0|this.words[u];this.words[u]=d<<26-n|h>>>n,d=h&o}return c&&0!==d&&(c.words[c.length++]=d),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},n.prototype.ishrn=function(e,t,s){return a(0===this.negative),this.iushrn(e,t,s)},n.prototype.shln=function(e){return this.clone().ishln(e)},n.prototype.ushln=function(e){return this.clone().iushln(e)},n.prototype.shrn=function(e){return this.clone().ishrn(e)},n.prototype.ushrn=function(e){return this.clone().iushrn(e)},n.prototype.testn=function(e){a("number"==typeof e&&e>=0);var t=e%26,s=(e-t)/26,r=1<<t;return!(this.length<=s)&&!!(this.words[s]&r)},n.prototype.imaskn=function(e){a("number"==typeof e&&e>=0);var t=e%26,s=(e-t)/26;if(a(0===this.negative,"imaskn works only with positive numbers"),this.length<=s)return this;if(0!==t&&s++,this.length=Math.min(s,this.length),0!==t){var r=67108863^67108863>>>t<<t;this.words[this.length-1]&=r}return this.strip()},n.prototype.maskn=function(e){return this.clone().imaskn(e)},n.prototype.iaddn=function(e){return a("number"==typeof e),a(e<67108864),e<0?this.isubn(-e):0!==this.negative?1===this.length&&(0|this.words[0])<e?(this.words[0]=e-(0|this.words[0]),this.negative=0,this):(this.negative=0,this.isubn(e),this.negative=1,this):this._iaddn(e)},n.prototype._iaddn=function(e){this.words[0]+=e;for(var t=0;t<this.length&&this.words[t]>=67108864;t++)this.words[t]-=67108864,t===this.length-1?this.words[t+1]=1:this.words[t+1]++;return this.length=Math.max(this.length,t+1),this},n.prototype.isubn=function(e){if(a("number"==typeof e),a(e<67108864),e<0)return this.iaddn(-e);if(0!==this.negative)return this.negative=0,this.iaddn(e),this.negative=1,this;if(this.words[0]-=e,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var t=0;t<this.length&&this.words[t]<0;t++)this.words[t]+=67108864,this.words[t+1]-=1;return this.strip()},n.prototype.addn=function(e){return this.clone().iaddn(e)},n.prototype.subn=function(e){return this.clone().isubn(e)},n.prototype.iabs=function(){return this.negative=0,this},n.prototype.abs=function(){return this.clone().iabs()},n.prototype._ishlnsubmul=function(e,t,s){var r,n,i=e.length+s;this._expand(i);var o=0;for(r=0;r<e.length;r++){n=(0|this.words[r+s])+o;var c=(0|e.words[r])*t;o=((n-=67108863&c)>>26)-(c/67108864|0),this.words[r+s]=67108863&n}for(;r<this.length-s;r++)o=(n=(0|this.words[r+s])+o)>>26,this.words[r+s]=67108863&n;if(0===o)return this.strip();for(a(-1===o),o=0,r=0;r<this.length;r++)o=(n=-(0|this.words[r])+o)>>26,this.words[r]=67108863&n;return this.negative=1,this.strip()},n.prototype._wordDiv=function(e,t){var s=(this.length,e.length),a=this.clone(),r=e,i=0|r.words[r.length-1];0!==(s=26-this._countBits(i))&&(r=r.ushln(s),a.iushln(s),i=0|r.words[r.length-1]);var o,c=a.length-r.length;if("mod"!==t){(o=new n(null)).length=c+1,o.words=new Array(o.length);for(var u=0;u<o.length;u++)o.words[u]=0}var d=a.clone()._ishlnsubmul(r,1,c);0===d.negative&&(a=d,o&&(o.words[c]=1));for(var h=c-1;h>=0;h--){var l=67108864*(0|a.words[r.length+h])+(0|a.words[r.length+h-1]);for(l=Math.min(l/i|0,67108863),a._ishlnsubmul(r,l,h);0!==a.negative;)l--,a.negative=0,a._ishlnsubmul(r,1,h),a.isZero()||(a.negative^=1);o&&(o.words[h]=l)}return o&&o.strip(),a.strip(),"div"!==t&&0!==s&&a.iushrn(s),{div:o||null,mod:a}},n.prototype.divmod=function(e,t,s){return a(!e.isZero()),this.isZero()?{div:new n(0),mod:new n(0)}:0!==this.negative&&0===e.negative?(o=this.neg().divmod(e,t),"mod"!==t&&(r=o.div.neg()),"div"!==t&&(i=o.mod.neg(),s&&0!==i.negative&&i.iadd(e)),{div:r,mod:i}):0===this.negative&&0!==e.negative?(o=this.divmod(e.neg(),t),"mod"!==t&&(r=o.div.neg()),{div:r,mod:o.mod}):0!=(this.negative&e.negative)?(o=this.neg().divmod(e.neg(),t),"div"!==t&&(i=o.mod.neg(),s&&0!==i.negative&&i.isub(e)),{div:o.div,mod:i}):e.length>this.length||this.cmp(e)<0?{div:new n(0),mod:this}:1===e.length?"div"===t?{div:this.divn(e.words[0]),mod:null}:"mod"===t?{div:null,mod:new n(this.modn(e.words[0]))}:{div:this.divn(e.words[0]),mod:new n(this.modn(e.words[0]))}:this._wordDiv(e,t);var r,i,o},n.prototype.div=function(e){return this.divmod(e,"div",!1).div},n.prototype.mod=function(e){return this.divmod(e,"mod",!1).mod},n.prototype.umod=function(e){return this.divmod(e,"mod",!0).mod},n.prototype.divRound=function(e){var t=this.divmod(e);if(t.mod.isZero())return t.div;var s=0!==t.div.negative?t.mod.isub(e):t.mod,a=e.ushrn(1),r=e.andln(1),n=s.cmp(a);return n<0||1===r&&0===n?t.div:0!==t.div.negative?t.div.isubn(1):t.div.iaddn(1)},n.prototype.modn=function(e){a(e<=67108863);for(var t=(1<<26)%e,s=0,r=this.length-1;r>=0;r--)s=(t*s+(0|this.words[r]))%e;return s},n.prototype.idivn=function(e){a(e<=67108863);for(var t=0,s=this.length-1;s>=0;s--){var r=(0|this.words[s])+67108864*t;this.words[s]=r/e|0,t=r%e}return this.strip()},n.prototype.divn=function(e){return this.clone().idivn(e)},n.prototype.egcd=function(e){a(0===e.negative),a(!e.isZero());var t=this,s=e.clone();t=0!==t.negative?t.umod(e):t.clone();for(var r=new n(1),i=new n(0),o=new n(0),c=new n(1),u=0;t.isEven()&&s.isEven();)t.iushrn(1),s.iushrn(1),++u;for(var d=s.clone(),h=t.clone();!t.isZero();){for(var l=0,f=1;0==(t.words[0]&f)&&l<26;++l,f<<=1);if(l>0)for(t.iushrn(l);l-- >0;)(r.isOdd()||i.isOdd())&&(r.iadd(d),i.isub(h)),r.iushrn(1),i.iushrn(1);for(var m=0,p=1;0==(s.words[0]&p)&&m<26;++m,p<<=1);if(m>0)for(s.iushrn(m);m-- >0;)(o.isOdd()||c.isOdd())&&(o.iadd(d),c.isub(h)),o.iushrn(1),c.iushrn(1);t.cmp(s)>=0?(t.isub(s),r.isub(o),i.isub(c)):(s.isub(t),o.isub(r),c.isub(i))}return{a:o,b:c,gcd:s.iushln(u)}},n.prototype._invmp=function(e){a(0===e.negative),a(!e.isZero());var t=this,s=e.clone();t=0!==t.negative?t.umod(e):t.clone();for(var r,i=new n(1),o=new n(0),c=s.clone();t.cmpn(1)>0&&s.cmpn(1)>0;){for(var u=0,d=1;0==(t.words[0]&d)&&u<26;++u,d<<=1);if(u>0)for(t.iushrn(u);u-- >0;)i.isOdd()&&i.iadd(c),i.iushrn(1);for(var h=0,l=1;0==(s.words[0]&l)&&h<26;++h,l<<=1);if(h>0)for(s.iushrn(h);h-- >0;)o.isOdd()&&o.iadd(c),o.iushrn(1);t.cmp(s)>=0?(t.isub(s),i.isub(o)):(s.isub(t),o.isub(i))}return(r=0===t.cmpn(1)?i:o).cmpn(0)<0&&r.iadd(e),r},n.prototype.gcd=function(e){if(this.isZero())return e.abs();if(e.isZero())return this.abs();var t=this.clone(),s=e.clone();t.negative=0,s.negative=0;for(var a=0;t.isEven()&&s.isEven();a++)t.iushrn(1),s.iushrn(1);for(;;){for(;t.isEven();)t.iushrn(1);for(;s.isEven();)s.iushrn(1);var r=t.cmp(s);if(r<0){var n=t;t=s,s=n}else if(0===r||0===s.cmpn(1))break;t.isub(s)}return s.iushln(a)},n.prototype.invm=function(e){return this.egcd(e).a.umod(e)},n.prototype.isEven=function(){return 0==(1&this.words[0])},n.prototype.isOdd=function(){return 1==(1&this.words[0])},n.prototype.andln=function(e){return this.words[0]&e},n.prototype.bincn=function(e){a("number"==typeof e);var t=e%26,s=(e-t)/26,r=1<<t;if(this.length<=s)return this._expand(s+1),this.words[s]|=r,this;for(var n=r,i=s;0!==n&&i<this.length;i++){var o=0|this.words[i];n=(o+=n)>>>26,o&=67108863,this.words[i]=o}return 0!==n&&(this.words[i]=n,this.length++),this},n.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},n.prototype.cmpn=function(e){var t,s=e<0;if(0!==this.negative&&!s)return-1;if(0===this.negative&&s)return 1;if(this.strip(),this.length>1)t=1;else{s&&(e=-e),a(e<=67108863,"Number is too big");var r=0|this.words[0];t=r===e?0:r<e?-1:1}return 0!==this.negative?0|-t:t},n.prototype.cmp=function(e){if(0!==this.negative&&0===e.negative)return-1;if(0===this.negative&&0!==e.negative)return 1;var t=this.ucmp(e);return 0!==this.negative?0|-t:t},n.prototype.ucmp=function(e){if(this.length>e.length)return 1;if(this.length<e.length)return-1;for(var t=0,s=this.length-1;s>=0;s--){var a=0|this.words[s],r=0|e.words[s];if(a!==r){a<r?t=-1:a>r&&(t=1);break}}return t},n.prototype.gtn=function(e){return 1===this.cmpn(e)},n.prototype.gt=function(e){return 1===this.cmp(e)},n.prototype.gten=function(e){return this.cmpn(e)>=0},n.prototype.gte=function(e){return this.cmp(e)>=0},n.prototype.ltn=function(e){return-1===this.cmpn(e)},n.prototype.lt=function(e){return-1===this.cmp(e)},n.prototype.lten=function(e){return this.cmpn(e)<=0},n.prototype.lte=function(e){return this.cmp(e)<=0},n.prototype.eqn=function(e){return 0===this.cmpn(e)},n.prototype.eq=function(e){return 0===this.cmp(e)},n.red=function(e){return new S(e)},n.prototype.toRed=function(e){return a(!this.red,"Already a number in reduction context"),a(0===this.negative,"red works only with positives"),e.convertTo(this)._forceRed(e)},n.prototype.fromRed=function(){return a(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},n.prototype._forceRed=function(e){return this.red=e,this},n.prototype.forceRed=function(e){return a(!this.red,"Already a number in reduction context"),this._forceRed(e)},n.prototype.redAdd=function(e){return a(this.red,"redAdd works only with red numbers"),this.red.add(this,e)},n.prototype.redIAdd=function(e){return a(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,e)},n.prototype.redSub=function(e){return a(this.red,"redSub works only with red numbers"),this.red.sub(this,e)},n.prototype.redISub=function(e){return a(this.red,"redISub works only with red numbers"),this.red.isub(this,e)},n.prototype.redShl=function(e){return a(this.red,"redShl works only with red numbers"),this.red.shl(this,e)},n.prototype.redMul=function(e){return a(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.mul(this,e)},n.prototype.redIMul=function(e){return a(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.imul(this,e)},n.prototype.redSqr=function(){return a(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},n.prototype.redISqr=function(){return a(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},n.prototype.redSqrt=function(){return a(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},n.prototype.redInvm=function(){return a(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},n.prototype.redNeg=function(){return a(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},n.prototype.redPow=function(e){return a(this.red&&!e.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,e)};var w={k256:null,p224:null,p192:null,p25519:null};function g(e,t){this.name=e,this.p=new n(t,16),this.n=this.p.bitLength(),this.k=new n(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function y(){g.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function b(){g.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function v(){g.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function M(){g.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function S(e){if("string"==typeof e){var t=n._prime(e);this.m=t.p,this.prime=t}else a(e.gtn(1),"modulus must be greater than 1"),this.m=e,this.prime=null}function I(e){S.call(this,e),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new n(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}g.prototype._tmp=function(){var e=new n(null);return e.words=new Array(Math.ceil(this.n/13)),e},g.prototype.ireduce=function(e){var t,s=e;do{this.split(s,this.tmp),t=(s=(s=this.imulK(s)).iadd(this.tmp)).bitLength()}while(t>this.n);var a=t<this.n?-1:s.ucmp(this.p);return 0===a?(s.words[0]=0,s.length=1):a>0?s.isub(this.p):void 0!==s.strip?s.strip():s._strip(),s},g.prototype.split=function(e,t){e.iushrn(this.n,0,t)},g.prototype.imulK=function(e){return e.imul(this.k)},r(y,g),y.prototype.split=function(e,t){for(var s=Math.min(e.length,9),a=0;a<s;a++)t.words[a]=e.words[a];if(t.length=s,e.length<=9)return e.words[0]=0,void(e.length=1);var r=e.words[9];for(t.words[t.length++]=4194303&r,a=10;a<e.length;a++){var n=0|e.words[a];e.words[a-10]=(4194303&n)<<4|r>>>22,r=n}r>>>=22,e.words[a-10]=r,0===r&&e.length>10?e.length-=10:e.length-=9},y.prototype.imulK=function(e){e.words[e.length]=0,e.words[e.length+1]=0,e.length+=2;for(var t=0,s=0;s<e.length;s++){var a=0|e.words[s];t+=977*a,e.words[s]=67108863&t,t=64*a+(t/67108864|0)}return 0===e.words[e.length-1]&&(e.length--,0===e.words[e.length-1]&&e.length--),e},r(b,g),r(v,g),r(M,g),M.prototype.imulK=function(e){for(var t=0,s=0;s<e.length;s++){var a=19*(0|e.words[s])+t,r=67108863&a;a>>>=26,e.words[s]=r,t=a}return 0!==t&&(e.words[e.length++]=t),e},n._prime=function(e){if(w[e])return w[e];var t;if("k256"===e)t=new y;else if("p224"===e)t=new b;else if("p192"===e)t=new v;else{if("p25519"!==e)throw new Error("Unknown prime "+e);t=new M}return w[e]=t,t},S.prototype._verify1=function(e){a(0===e.negative,"red works only with positives"),a(e.red,"red works only with red numbers")},S.prototype._verify2=function(e,t){a(0==(e.negative|t.negative),"red works only with positives"),a(e.red&&e.red===t.red,"red works only with red numbers")},S.prototype.imod=function(e){return this.prime?this.prime.ireduce(e)._forceRed(this):e.umod(this.m)._forceRed(this)},S.prototype.neg=function(e){return e.isZero()?e.clone():this.m.sub(e)._forceRed(this)},S.prototype.add=function(e,t){this._verify2(e,t);var s=e.add(t);return s.cmp(this.m)>=0&&s.isub(this.m),s._forceRed(this)},S.prototype.iadd=function(e,t){this._verify2(e,t);var s=e.iadd(t);return s.cmp(this.m)>=0&&s.isub(this.m),s},S.prototype.sub=function(e,t){this._verify2(e,t);var s=e.sub(t);return s.cmpn(0)<0&&s.iadd(this.m),s._forceRed(this)},S.prototype.isub=function(e,t){this._verify2(e,t);var s=e.isub(t);return s.cmpn(0)<0&&s.iadd(this.m),s},S.prototype.shl=function(e,t){return this._verify1(e),this.imod(e.ushln(t))},S.prototype.imul=function(e,t){return this._verify2(e,t),this.imod(e.imul(t))},S.prototype.mul=function(e,t){return this._verify2(e,t),this.imod(e.mul(t))},S.prototype.isqr=function(e){return this.imul(e,e.clone())},S.prototype.sqr=function(e){return this.mul(e,e)},S.prototype.sqrt=function(e){if(e.isZero())return e.clone();var t=this.m.andln(3);if(a(t%2==1),3===t){var s=this.m.add(new n(1)).iushrn(2);return this.pow(e,s)}for(var r=this.m.subn(1),i=0;!r.isZero()&&0===r.andln(1);)i++,r.iushrn(1);a(!r.isZero());var o=new n(1).toRed(this),c=o.redNeg(),u=this.m.subn(1).iushrn(1),d=this.m.bitLength();for(d=new n(2*d*d).toRed(this);0!==this.pow(d,u).cmp(c);)d.redIAdd(c);for(var h=this.pow(d,r),l=this.pow(e,r.addn(1).iushrn(1)),f=this.pow(e,r),m=i;0!==f.cmp(o);){for(var p=f,w=0;0!==p.cmp(o);w++)p=p.redSqr();a(w<m);var g=this.pow(h,new n(1).iushln(m-w-1));l=l.redMul(g),h=g.redSqr(),f=f.redMul(h),m=w}return l},S.prototype.invm=function(e){var t=e._invmp(this.m);return 0!==t.negative?(t.negative=0,this.imod(t).redNeg()):this.imod(t)},S.prototype.pow=function(e,t){if(t.isZero())return new n(1).toRed(this);if(0===t.cmpn(1))return e.clone();var s=new Array(16);s[0]=new n(1).toRed(this),s[1]=e;for(var a=2;a<s.length;a++)s[a]=this.mul(s[a-1],e);var r=s[0],i=0,o=0,c=t.bitLength()%26;for(0===c&&(c=26),a=t.length-1;a>=0;a--){for(var u=t.words[a],d=c-1;d>=0;d--){var h=u>>d&1;r!==s[0]&&(r=this.sqr(r)),0!==h||0!==i?(i<<=1,i|=h,(4===++o||0===a&&0===d)&&(r=this.mul(r,s[i]),o=0,i=0)):o=0}c=26}return r},S.prototype.convertTo=function(e){var t=e.umod(this.m);return t===e?t.clone():t},S.prototype.convertFrom=function(e){var t=e.clone();return t.red=null,t},n.mont=function(e){return new I(e)},r(I,S),I.prototype.convertTo=function(e){return this.imod(e.ushln(this.shift))},I.prototype.convertFrom=function(e){var t=this.imod(e.mul(this.rinv));return t.red=null,t},I.prototype.imul=function(e,t){if(e.isZero()||t.isZero())return e.words[0]=0,e.length=1,e;var s=e.imul(t),a=s.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),r=s.isub(a).iushrn(this.shift),n=r;return r.cmp(this.m)>=0?n=r.isub(this.m):r.cmpn(0)<0&&(n=r.iadd(this.m)),n._forceRed(this)},I.prototype.mul=function(e,t){if(e.isZero()||t.isZero())return new n(0)._forceRed(this);var s=e.mul(t),a=s.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),r=s.isub(a).iushrn(this.shift),i=r;return r.cmp(this.m)>=0?i=r.isub(this.m):r.cmpn(0)<0&&(i=r.iadd(this.m)),i._forceRed(this)},I.prototype.invm=function(e){return this.imod(e._invmp(this.m).mul(this.r2))._forceRed(this)}}(e,this)}).call(this,s(19)(e))},function(e,t,s){var a=s(7);e.exports=y,y.simpleSieve=w,y.fermatTest=g;var r=s(5),n=new r(24),i=new(s(9)),o=new r(1),c=new r(2),u=new r(5),d=(new r(16),new r(8),new r(10)),h=new r(3),l=(new r(7),new r(11)),f=new r(4),m=(new r(12),null);function p(){if(null!==m)return m;var e=[];e[0]=2;for(var t=1,s=3;s<1048576;s+=2){for(var a=Math.ceil(Math.sqrt(s)),r=0;r<t&&e[r]<=a&&s%e[r]!=0;r++);t!==r&&e[r]<=a||(e[t++]=s)}return m=e,e}function w(e){for(var t=p(),s=0;s<t.length;s++)if(0===e.modn(t[s]))return 0===e.cmpn(t[s]);return!0}function g(e){var t=r.mont(e);return 0===c.toRed(t).redPow(e.subn(1)).fromRed().cmpn(1)}function y(e,t){if(e<16)return new r(2===t||5===t?[140,123]:[140,39]);var s,m;for(t=new r(t);;){for(s=new r(a(Math.ceil(e/8)));s.bitLength()>e;)s.ishrn(1);if(s.isEven()&&s.iadd(o),s.testn(1)||s.iadd(c),t.cmp(c)){if(!t.cmp(u))for(;s.mod(d).cmp(h);)s.iadd(f)}else for(;s.mod(n).cmp(l);)s.iadd(f);if(w(m=s.shrn(1))&&w(s)&&g(m)&&g(s)&&i.test(m)&&i.test(s))return s}}},function(e,t,s){"use strict";(function(t,a){var r=s(18).Buffer,n=t.crypto||t.msCrypto;n&&n.getRandomValues?e.exports=function(e,t){if(e>4294967295)throw new RangeError("requested too many random bytes");var s=r.allocUnsafe(e);if(e>0)if(e>65536)for(var i=0;i<e;i+=65536)n.getRandomValues(s.slice(i,i+65536));else n.getRandomValues(s);if("function"==typeof t)return a.nextTick((function(){t(null,s)}));return s}:e.exports=function(){throw new Error("Secure random number generation is not supported by this browser.\nUse Chrome, Firefox or Internet Explorer 11")}}).call(this,s(3),s(8))},function(e,t){var s,a,r=e.exports={};function n(){throw new Error("setTimeout has not been defined")}function i(){throw new Error("clearTimeout has not been defined")}function o(e){if(s===setTimeout)return setTimeout(e,0);if((s===n||!s)&&setTimeout)return s=setTimeout,setTimeout(e,0);try{return s(e,0)}catch(t){try{return s.call(null,e,0)}catch(t){return s.call(this,e,0)}}}!function(){try{s="function"==typeof setTimeout?setTimeout:n}catch(e){s=n}try{a="function"==typeof clearTimeout?clearTimeout:i}catch(e){a=i}}();var c,u=[],d=!1,h=-1;function l(){d&&c&&(d=!1,c.length?u=c.concat(u):h=-1,u.length&&f())}function f(){if(!d){var e=o(l);d=!0;for(var t=u.length;t;){for(c=u,u=[];++h<t;)c&&c[h].run();h=-1,t=u.length}c=null,d=!1,function(e){if(a===clearTimeout)return clearTimeout(e);if((a===i||!a)&&clearTimeout)return a=clearTimeout,clearTimeout(e);try{a(e)}catch(t){try{return a.call(null,e)}catch(t){return a.call(this,e)}}}(e)}}function m(e,t){this.fun=e,this.array=t}function p(){}r.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var s=1;s<arguments.length;s++)t[s-1]=arguments[s];u.push(new m(e,t)),1!==u.length||d||o(f)},m.prototype.run=function(){this.fun.apply(null,this.array)},r.title="browser",r.browser=!0,r.env={},r.argv=[],r.version="",r.versions={},r.on=p,r.addListener=p,r.once=p,r.off=p,r.removeListener=p,r.removeAllListeners=p,r.emit=p,r.prependListener=p,r.prependOnceListener=p,r.listeners=function(e){return[]},r.binding=function(e){throw new Error("process.binding is not supported")},r.cwd=function(){return"/"},r.chdir=function(e){throw new Error("process.chdir is not supported")},r.umask=function(){return 0}},function(e,t,s){var a=s(5),r=s(21);function n(e){this.rand=e||new r.Rand}e.exports=n,n.create=function(e){return new n(e)},n.prototype._randbelow=function(e){var t=e.bitLength(),s=Math.ceil(t/8);do{var r=new a(this.rand.generate(s))}while(r.cmp(e)>=0);return r},n.prototype._randrange=function(e,t){var s=t.sub(e);return e.add(this._randbelow(s))},n.prototype.test=function(e,t,s){var r=e.bitLength(),n=a.mont(e),i=new a(1).toRed(n);t||(t=Math.max(1,r/48|0));for(var o=e.subn(1),c=0;!o.testn(c);c++);for(var u=e.shrn(c),d=o.toRed(n);t>0;t--){var h=this._randrange(new a(2),o);s&&s(h);var l=h.toRed(n).redPow(u);if(0!==l.cmp(i)&&0!==l.cmp(d)){for(var f=1;f<c;f++){if(0===(l=l.redSqr()).cmp(i))return!1;if(0===l.cmp(d))break}if(f===c)return!1}}return!0},n.prototype.getDivisor=function(e,t){var s=e.bitLength(),r=a.mont(e),n=new a(1).toRed(r);t||(t=Math.max(1,s/48|0));for(var i=e.subn(1),o=0;!i.testn(o);o++);for(var c=e.shrn(o),u=i.toRed(r);t>0;t--){var d=this._randrange(new a(2),i),h=e.gcd(d);if(0!==h.cmpn(1))return h;var l=d.toRed(r).redPow(c);if(0!==l.cmp(n)&&0!==l.cmp(u)){for(var f=1;f<o;f++){if(0===(l=l.redSqr()).cmp(n))return l.fromRed().subn(1).gcd(e);if(0===l.cmp(u))break}if(f===o)return(l=l.redSqr()).fromRed().subn(1).gcd(e)}}return!1}},function(e,t,s){(function(e){var a=s(6),r=s(23),n=s(24);var i={binary:!0,hex:!0,base64:!0};t.DiffieHellmanGroup=t.createDiffieHellmanGroup=t.getDiffieHellman=function(t){var s=new e(r[t].prime,"hex"),a=new e(r[t].gen,"hex");return new n(s,a)},t.createDiffieHellman=t.DiffieHellman=function t(s,r,o,c){return e.isBuffer(r)||void 0===i[r]?t(s,"binary",r,o):(r=r||"binary",c=c||"binary",o=o||new e([2]),e.isBuffer(o)||(o=new e(o,c)),"number"==typeof s?new n(a(s,o),o,!0):(e.isBuffer(s)||(s=new e(s,r)),new n(s,o,!0)))}}).call(this,s(4).Buffer)},function(e,t,s){"use strict";(function(t){!function(s){function a(e){const t=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]);let s=1779033703,a=3144134277,r=1013904242,n=2773480762,i=1359893119,o=2600822924,c=528734635,u=1541459225;const d=new Uint32Array(64);function h(e){let h=0,l=e.length;for(;l>=64;){let f,m,p,w,g,y=s,b=a,v=r,M=n,S=i,I=o,P=c,E=u;for(m=0;m<16;m++)p=h+4*m,d[m]=(255&e[p])<<24|(255&e[p+1])<<16|(255&e[p+2])<<8|255&e[p+3];for(m=16;m<64;m++)f=d[m-2],w=(f>>>17|f<<15)^(f>>>19|f<<13)^f>>>10,f=d[m-15],g=(f>>>7|f<<25)^(f>>>18|f<<14)^f>>>3,d[m]=(w+d[m-7]|0)+(g+d[m-16]|0)|0;for(m=0;m<64;m++)w=(((S>>>6|S<<26)^(S>>>11|S<<21)^(S>>>25|S<<7))+(S&I^~S&P)|0)+(E+(t[m]+d[m]|0)|0)|0,g=((y>>>2|y<<30)^(y>>>13|y<<19)^(y>>>22|y<<10))+(y&b^y&v^b&v)|0,E=P,P=I,I=S,S=M+w|0,M=v,v=b,b=y,y=w+g|0;s=s+y|0,a=a+b|0,r=r+v|0,n=n+M|0,i=i+S|0,o=o+I|0,c=c+P|0,u=u+E|0,h+=64,l-=64}}h(e);let l,f=e.length%64,m=e.length/536870912|0,p=e.length<<3,w=f<56?56:120,g=e.slice(e.length-f,e.length);for(g.push(128),l=f+1;l<w;l++)g.push(0);return g.push(m>>>24&255),g.push(m>>>16&255),g.push(m>>>8&255),g.push(m>>>0&255),g.push(p>>>24&255),g.push(p>>>16&255),g.push(p>>>8&255),g.push(p>>>0&255),h(g),[s>>>24&255,s>>>16&255,s>>>8&255,s>>>0&255,a>>>24&255,a>>>16&255,a>>>8&255,a>>>0&255,r>>>24&255,r>>>16&255,r>>>8&255,r>>>0&255,n>>>24&255,n>>>16&255,n>>>8&255,n>>>0&255,i>>>24&255,i>>>16&255,i>>>8&255,i>>>0&255,o>>>24&255,o>>>16&255,o>>>8&255,o>>>0&255,c>>>24&255,c>>>16&255,c>>>8&255,c>>>0&255,u>>>24&255,u>>>16&255,u>>>8&255,u>>>0&255]}function r(e,t,s){e=e.length<=64?e:a(e);const r=64+t.length+4,n=new Array(r),i=new Array(64);let o,c=[];for(o=0;o<64;o++)n[o]=54;for(o=0;o<e.length;o++)n[o]^=e[o];for(o=0;o<t.length;o++)n[64+o]=t[o];for(o=r-4;o<r;o++)n[o]=0;for(o=0;o<64;o++)i[o]=92;for(o=0;o<e.length;o++)i[o]^=e[o];function u(){for(let e=r-1;e>=r-4;e--){if(n[e]++,n[e]<=255)return;n[e]=0}}for(;s>=32;)u(),c=c.concat(a(i.concat(a(n)))),s-=32;return s>0&&(u(),c=c.concat(a(i.concat(a(n))).slice(0,s))),c}function n(e,t,s,a,r){let n;for(u(e,16*(2*s-1),r,0,16),n=0;n<2*s;n++)c(e,16*n,r,16),o(r,a),u(r,0,e,t+16*n,16);for(n=0;n<s;n++)u(e,t+2*n*16,e,16*n,16);for(n=0;n<s;n++)u(e,t+16*(2*n+1),e,16*(n+s),16)}function i(e,t){return e<<t|e>>>32-t}function o(e,t){u(e,0,t,0,16);for(let e=8;e>0;e-=2)t[4]^=i(t[0]+t[12],7),t[8]^=i(t[4]+t[0],9),t[12]^=i(t[8]+t[4],13),t[0]^=i(t[12]+t[8],18),t[9]^=i(t[5]+t[1],7),t[13]^=i(t[9]+t[5],9),t[1]^=i(t[13]+t[9],13),t[5]^=i(t[1]+t[13],18),t[14]^=i(t[10]+t[6],7),t[2]^=i(t[14]+t[10],9),t[6]^=i(t[2]+t[14],13),t[10]^=i(t[6]+t[2],18),t[3]^=i(t[15]+t[11],7),t[7]^=i(t[3]+t[15],9),t[11]^=i(t[7]+t[3],13),t[15]^=i(t[11]+t[7],18),t[1]^=i(t[0]+t[3],7),t[2]^=i(t[1]+t[0],9),t[3]^=i(t[2]+t[1],13),t[0]^=i(t[3]+t[2],18),t[6]^=i(t[5]+t[4],7),t[7]^=i(t[6]+t[5],9),t[4]^=i(t[7]+t[6],13),t[5]^=i(t[4]+t[7],18),t[11]^=i(t[10]+t[9],7),t[8]^=i(t[11]+t[10],9),t[9]^=i(t[8]+t[11],13),t[10]^=i(t[9]+t[8],18),t[12]^=i(t[15]+t[14],7),t[13]^=i(t[12]+t[15],9),t[14]^=i(t[13]+t[12],13),t[15]^=i(t[14]+t[13],18);for(let s=0;s<16;++s)e[s]+=t[s]}function c(e,t,s,a){for(let r=0;r<a;r++)s[r]^=e[t+r]}function u(e,t,s,a,r){for(;r--;)s[a++]=e[t++]}function d(e){if(!e||"number"!=typeof e.length)return!1;for(let t=0;t<e.length;t++){const s=e[t];if("number"!=typeof s||s%1||s<0||s>=256)return!1}return!0}function h(e,t){if("number"!=typeof e||e%1)throw new Error("invalid "+t);return e}function l(e,s,a,i,o,l,f){if(a=h(a,"N"),i=h(i,"r"),o=h(o,"p"),l=h(l,"dkLen"),0===a||0!=(a&a-1))throw new Error("N must be power of 2");if(a>2147483647/128/i)throw new Error("N too large");if(i>2147483647/128/o)throw new Error("r too large");if(!d(e))throw new Error("password must be an array or buffer");if(e=Array.prototype.slice.call(e),!d(s))throw new Error("salt must be an array or buffer");s=Array.prototype.slice.call(s);let m=r(e,s,128*o*i);const p=new Uint32Array(32*o*i);for(let e=0;e<p.length;e++){const t=4*e;p[e]=(255&m[t+3])<<24|(255&m[t+2])<<16|(255&m[t+1])<<8|(255&m[t+0])<<0}const w=new Uint32Array(64*i),g=new Uint32Array(32*i*a),y=32*i,b=new Uint32Array(16),v=new Uint32Array(16),M=o*a*2;let S,I,P=0,E=null,B=!1,N=0,U=0;const A=f?parseInt(1e3/i):4294967295,T=void 0!==t?t:setTimeout,k=function(){if(B)return f(new Error("cancelled"),P/M);let t;switch(N){case 0:I=32*U*i,u(p,I,w,0,y),N=1,S=0;case 1:t=a-S,t>A&&(t=A);for(let e=0;e<t;e++)u(w,0,g,(S+e)*y,y),n(w,y,i,b,v);if(S+=t,P+=t,f){const e=parseInt(1e3*P/M);if(e!==E){if(B=f(null,P/M),B)break;E=e}}if(S<a)break;S=0,N=2;case 2:t=a-S,t>A&&(t=A);for(let e=0;e<t;e++){const e=w[16*(2*i-1)]&a-1;c(g,e*y,w,y),n(w,y,i,b,v)}if(S+=t,P+=t,f){const e=parseInt(1e3*P/M);if(e!==E){if(B=f(null,P/M),B)break;E=e}}if(S<a)break;if(u(w,0,p,I,y),U++,U<o){N=0;break}m=[];for(let e=0;e<p.length;e++)m.push(p[e]>>0&255),m.push(p[e]>>8&255),m.push(p[e]>>16&255),m.push(p[e]>>24&255);const s=r(e,m,l);return f&&f(null,1,s),s}f&&T(k)};if(!f)for(;;){const e=k();if(null!=e)return e}k()}const f={scrypt:function(e,t,s,a,r,n,i){return new Promise((function(o,c){let u=0;i&&i(0),l(e,t,s,a,r,n,(function(e,t,s){if(e)c(e);else if(s)i&&1!==u&&i(1),o(new Uint8Array(s));else if(i&&t!==u)return u=t,i(t)}))}))},syncScrypt:function(e,t,s,a,r,n){return new Uint8Array(l(e,t,s,a,r,n))}};e.exports=f}()}).call(this,s(25).setImmediate)},function(e,t,s){var a,r=function(){var e,t,s=((t=(e={constructor:function(e,t){this.array=[],this.compare=t||a;for(var s=e.length,r=0;r<s;)this.insert(e[r++])},insert:function(e){for(var t,s,a=this.array,r=this.compare,n=a.length-1,i=0,o=-1;n>=i;)if((s=r(a[t=(n+i)/2>>>0],e))<0)i=t+1;else{if(!(s>0)){o=t;break}n=t-1}for(-1===o&&(o=n),o++,n=a.length-1;o<n&&0===r(e,a[o]);)o++;for(t=a.length,a.push(e);t>o;)a[t]=a[--t];return a[o]=e,this},search:function(e){for(var t,s,a=this.array,r=this.compare,n=a.length-1,i=0;n>=i;)if((s=r(a[t=(n+i)/2>>>0],e))<0)i=t+1;else{if(!(s>0))return t;n=t-1}return-1},remove:function(e){var t=this.search(e);return t>=0&&this.array.splice(t,1),this}}).constructor).prototype=e,t);return s.comparing=function(e,t){return new s(t,(function(t,s){return a(t[e],s[e])}))},s;function a(e,t){return e<t?-1:e>t?1:0}}();e.exports=r,void 0===(a=function(){return r}.call(t,s,t,e))||(e.exports=a)},function(e,t){var s="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof window.msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto);if(s){var a=new Uint8Array(16);e.exports=function(){return s(a),a}}else{var r=new Array(16);e.exports=function(){for(var e,t=0;t<16;t++)0==(3&t)&&(e=4294967296*Math.random()),r[t]=e>>>((3&t)<<3)&255;return r}}},function(e,t){for(var s=[],a=0;a<256;++a)s[a]=(a+256).toString(16).substr(1);e.exports=function(e,t){var a=t||0,r=s;return[r[e[a++]],r[e[a++]],r[e[a++]],r[e[a++]],"-",r[e[a++]],r[e[a++]],"-",r[e[a++]],r[e[a++]],"-",r[e[a++]],r[e[a++]],"-",r[e[a++]],r[e[a++]],r[e[a++]],r[e[a++]],r[e[a++]],r[e[a++]]].join("")}},function(e,t,s){"use strict";t.byteLength=function(e){var t=u(e),s=t[0],a=t[1];return 3*(s+a)/4-a},t.toByteArray=function(e){var t,s,a=u(e),i=a[0],o=a[1],c=new n(function(e,t,s){return 3*(t+s)/4-s}(0,i,o)),d=0,h=o>0?i-4:i;for(s=0;s<h;s+=4)t=r[e.charCodeAt(s)]<<18|r[e.charCodeAt(s+1)]<<12|r[e.charCodeAt(s+2)]<<6|r[e.charCodeAt(s+3)],c[d++]=t>>16&255,c[d++]=t>>8&255,c[d++]=255&t;2===o&&(t=r[e.charCodeAt(s)]<<2|r[e.charCodeAt(s+1)]>>4,c[d++]=255&t);1===o&&(t=r[e.charCodeAt(s)]<<10|r[e.charCodeAt(s+1)]<<4|r[e.charCodeAt(s+2)]>>2,c[d++]=t>>8&255,c[d++]=255&t);return c},t.fromByteArray=function(e){for(var t,s=e.length,r=s%3,n=[],i=0,o=s-r;i<o;i+=16383)n.push(d(e,i,i+16383>o?o:i+16383));1===r?(t=e[s-1],n.push(a[t>>2]+a[t<<4&63]+"==")):2===r&&(t=(e[s-2]<<8)+e[s-1],n.push(a[t>>10]+a[t>>4&63]+a[t<<2&63]+"="));return n.join("")};for(var a=[],r=[],n="undefined"!=typeof Uint8Array?Uint8Array:Array,i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",o=0,c=i.length;o<c;++o)a[o]=i[o],r[i.charCodeAt(o)]=o;function u(e){var t=e.length;if(t%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var s=e.indexOf("=");return-1===s&&(s=t),[s,s===t?0:4-s%4]}function d(e,t,s){for(var r,n,i=[],o=t;o<s;o+=3)r=(e[o]<<16&16711680)+(e[o+1]<<8&65280)+(255&e[o+2]),i.push(a[(n=r)>>18&63]+a[n>>12&63]+a[n>>6&63]+a[63&n]);return i.join("")}r["-".charCodeAt(0)]=62,r["_".charCodeAt(0)]=63},function(e,t){ +/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */ +t.read=function(e,t,s,a,r){var n,i,o=8*r-a-1,c=(1<<o)-1,u=c>>1,d=-7,h=s?r-1:0,l=s?-1:1,f=e[t+h];for(h+=l,n=f&(1<<-d)-1,f>>=-d,d+=o;d>0;n=256*n+e[t+h],h+=l,d-=8);for(i=n&(1<<-d)-1,n>>=-d,d+=a;d>0;i=256*i+e[t+h],h+=l,d-=8);if(0===n)n=1-u;else{if(n===c)return i?NaN:1/0*(f?-1:1);i+=Math.pow(2,a),n-=u}return(f?-1:1)*i*Math.pow(2,n-a)},t.write=function(e,t,s,a,r,n){var i,o,c,u=8*n-r-1,d=(1<<u)-1,h=d>>1,l=23===r?Math.pow(2,-24)-Math.pow(2,-77):0,f=a?0:n-1,m=a?1:-1,p=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(o=isNaN(t)?1:0,i=d):(i=Math.floor(Math.log(t)/Math.LN2),t*(c=Math.pow(2,-i))<1&&(i--,c*=2),(t+=i+h>=1?l/c:l*Math.pow(2,1-h))*c>=2&&(i++,c/=2),i+h>=d?(o=0,i=d):i+h>=1?(o=(t*c-1)*Math.pow(2,r),i+=h):(o=t*Math.pow(2,h-1)*Math.pow(2,r),i=0));r>=8;e[s+f]=255&o,f+=m,o/=256,r-=8);for(i=i<<r|o,u+=r;u>0;e[s+f]=255&i,f+=m,i/=256,u-=8);e[s+f-m]|=128*p}},function(e,t){var s={}.toString;e.exports=Array.isArray||function(e){return"[object Array]"==s.call(e)}},function(e,t,s){ +/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */ +var a=s(4),r=a.Buffer;function n(e,t){for(var s in e)t[s]=e[s]}function i(e,t,s){return r(e,t,s)}r.from&&r.alloc&&r.allocUnsafe&&r.allocUnsafeSlow?e.exports=a:(n(a,t),t.Buffer=i),i.prototype=Object.create(r.prototype),n(r,i),i.from=function(e,t,s){if("number"==typeof e)throw new TypeError("Argument must not be a number");return r(e,t,s)},i.alloc=function(e,t,s){if("number"!=typeof e)throw new TypeError("Argument must be a number");var a=r(e);return void 0!==t?"string"==typeof s?a.fill(t,s):a.fill(t):a.fill(0),a},i.allocUnsafe=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return r(e)},i.allocUnsafeSlow=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return a.SlowBuffer(e)}},function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},function(e,t){},function(e,t,s){var a;function r(e){this.rand=e}if(e.exports=function(e){return a||(a=new r(null)),a.generate(e)},e.exports.Rand=r,r.prototype.generate=function(e){return this._rand(e)},r.prototype._rand=function(e){if(this.rand.getBytes)return this.rand.getBytes(e);for(var t=new Uint8Array(e),s=0;s<t.length;s++)t[s]=this.rand.getByte();return t},"object"==typeof self)self.crypto&&self.crypto.getRandomValues?r.prototype._rand=function(e){var t=new Uint8Array(e);return self.crypto.getRandomValues(t),t}:self.msCrypto&&self.msCrypto.getRandomValues?r.prototype._rand=function(e){var t=new Uint8Array(e);return self.msCrypto.getRandomValues(t),t}:"object"==typeof window&&(r.prototype._rand=function(){throw new Error("Not implemented yet")});else try{var n=s(22);if("function"!=typeof n.randomBytes)throw new Error("Not supported");r.prototype._rand=function(e){return n.randomBytes(e)}}catch(e){}},function(e,t){},function(e){e.exports=JSON.parse('{"modp1":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff"},"modp2":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff"},"modp5":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff"},"modp14":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff"},"modp15":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff"},"modp16":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff"},"modp17":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff"},"modp18":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff"}}')},function(e,t,s){(function(t){var a=s(5),r=new(s(9)),n=new a(24),i=new a(11),o=new a(10),c=new a(3),u=new a(7),d=s(6),h=s(7);function l(e,s){return s=s||"utf8",t.isBuffer(e)||(e=new t(e,s)),this._pub=new a(e),this}function f(e,s){return s=s||"utf8",t.isBuffer(e)||(e=new t(e,s)),this._priv=new a(e),this}e.exports=p;var m={};function p(e,t,s){this.setGenerator(t),this.__prime=new a(e),this._prime=a.mont(this.__prime),this._primeLen=e.length,this._pub=void 0,this._priv=void 0,this._primeCode=void 0,s?(this.setPublicKey=l,this.setPrivateKey=f):this._primeCode=8}function w(e,s){var a=new t(e.toArray());return s?a.toString(s):a}Object.defineProperty(p.prototype,"verifyError",{enumerable:!0,get:function(){return"number"!=typeof this._primeCode&&(this._primeCode=function(e,t){var s=t.toString("hex"),a=[s,e.toString(16)].join("_");if(a in m)return m[a];var h,l=0;if(e.isEven()||!d.simpleSieve||!d.fermatTest(e)||!r.test(e))return l+=1,l+="02"===s||"05"===s?8:4,m[a]=l,l;switch(r.test(e.shrn(1))||(l+=2),s){case"02":e.mod(n).cmp(i)&&(l+=8);break;case"05":(h=e.mod(o)).cmp(c)&&h.cmp(u)&&(l+=8);break;default:l+=4}return m[a]=l,l}(this.__prime,this.__gen)),this._primeCode}}),p.prototype.generateKeys=function(){return this._priv||(this._priv=new a(h(this._primeLen))),this._pub=this._gen.toRed(this._prime).redPow(this._priv).fromRed(),this.getPublicKey()},p.prototype.computeSecret=function(e){var s=(e=(e=new a(e)).toRed(this._prime)).redPow(this._priv).fromRed(),r=new t(s.toArray()),n=this.getPrime();if(r.length<n.length){var i=new t(n.length-r.length);i.fill(0),r=t.concat([i,r])}return r},p.prototype.getPublicKey=function(e){return w(this._pub,e)},p.prototype.getPrivateKey=function(e){return w(this._priv,e)},p.prototype.getPrime=function(e){return w(this.__prime,e)},p.prototype.getGenerator=function(e){return w(this._gen,e)},p.prototype.setGenerator=function(e,s){return s=s||"utf8",t.isBuffer(e)||(e=new t(e,s)),this.__gen=e,this._gen=new a(e),this}}).call(this,s(4).Buffer)},function(e,t,s){(function(e){var a=void 0!==e&&e||"undefined"!=typeof self&&self||window,r=Function.prototype.apply;function n(e,t){this._id=e,this._clearFn=t}t.setTimeout=function(){return new n(r.call(setTimeout,a,arguments),clearTimeout)},t.setInterval=function(){return new n(r.call(setInterval,a,arguments),clearInterval)},t.clearTimeout=t.clearInterval=function(e){e&&e.close()},n.prototype.unref=n.prototype.ref=function(){},n.prototype.close=function(){this._clearFn.call(a,this._id)},t.enroll=function(e,t){clearTimeout(e._idleTimeoutId),e._idleTimeout=t},t.unenroll=function(e){clearTimeout(e._idleTimeoutId),e._idleTimeout=-1},t._unrefActive=t.active=function(e){clearTimeout(e._idleTimeoutId);var t=e._idleTimeout;t>=0&&(e._idleTimeoutId=setTimeout((function(){e._onTimeout&&e._onTimeout()}),t))},s(26),t.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==e&&e.setImmediate||this&&this.setImmediate,t.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==e&&e.clearImmediate||this&&this.clearImmediate}).call(this,s(3))},function(e,t,s){(function(e,t){!function(e,s){"use strict";if(!e.setImmediate){var a,r,n,i,o,c=1,u={},d=!1,h=e.document,l=Object.getPrototypeOf&&Object.getPrototypeOf(e);l=l&&l.setTimeout?l:e,"[object process]"==={}.toString.call(e.process)?a=function(e){t.nextTick((function(){m(e)}))}:!function(){if(e.postMessage&&!e.importScripts){var t=!0,s=e.onmessage;return e.onmessage=function(){t=!1},e.postMessage("","*"),e.onmessage=s,t}}()?e.MessageChannel?((n=new MessageChannel).port1.onmessage=function(e){m(e.data)},a=function(e){n.port2.postMessage(e)}):h&&"onreadystatechange"in h.createElement("script")?(r=h.documentElement,a=function(e){var t=h.createElement("script");t.onreadystatechange=function(){m(e),t.onreadystatechange=null,r.removeChild(t),t=null},r.appendChild(t)}):a=function(e){setTimeout(m,0,e)}:(i="setImmediate$"+Math.random()+"$",o=function(t){t.source===e&&"string"==typeof t.data&&0===t.data.indexOf(i)&&m(+t.data.slice(i.length))},e.addEventListener?e.addEventListener("message",o,!1):e.attachEvent("onmessage",o),a=function(t){e.postMessage(i+t,"*")}),l.setImmediate=function(e){"function"!=typeof e&&(e=new Function(""+e));for(var t=new Array(arguments.length-1),s=0;s<t.length;s++)t[s]=arguments[s+1];var r={callback:e,args:t};return u[c]=r,a(c),c++},l.clearImmediate=f}function f(e){delete u[e]}function m(e){if(d)setTimeout(m,0,e);else{var t=u[e];if(t){d=!0;try{!function(e){var t=e.callback,s=e.args;switch(s.length){case 0:t();break;case 1:t(s[0]);break;case 2:t(s[0],s[1]);break;case 3:t(s[0],s[1],s[2]);break;default:t.apply(void 0,s)}}(t)}finally{f(e),d=!1}}}}}("undefined"==typeof self?void 0===e?this:e:self)}).call(this,s(3),s(8))},function(e,t,s){"use strict";s.r(t);var a=s(1),r=s.n(a),n=s(0),i=s.n(n),o=200,c=400,u=401,d=402,h=403,l=404,f=409,m=429,p=500,w=503,g=504,y=1012,b=3e3,v=3001;class M extends Error{constructor(...e){super(...e),this.name="UsernameAlreadyExists",this.message="Username already exists.",this.status=f}}class S extends Error{constructor(...e){super(...e),this.name="UsernameMissing",this.message="Username missing.",this.status=c}}class I extends Error{constructor(...e){super(...e),this.name="UsernameCannotBeBlank",this.message="Username cannot be blank.",this.status=c}}class P extends Error{constructor(e,...t){super(e,...t),this.name="UsernameTooLong",this.message="Username too long. Must be a max of ".concat(e," characters."),this.status=c}}class E extends Error{constructor(...e){super(...e),this.name="UsernameMustBeString",this.message="Username must be a string.",this.status=c}}class B extends Error{constructor(...e){super(...e),this.name="PasswordMissing",this.message="Password missing.",this.status=c}}class N extends Error{constructor(...e){super(...e),this.name="PasswordCannotBeBlank",this.message="Password cannot be blank.",this.status=c}}class U extends Error{constructor(e,...t){super(e,...t),this.name="PasswordTooShort",this.message="Password too short. Must be a minimum of ".concat(e," characters."),this.status=c}}class A extends Error{constructor(e,...t){super(e,...t),this.name="PasswordTooLong",this.message="Password too long. Must be a max of ".concat(e," characters."),this.status=c}}class T extends Error{constructor(...e){super(...e),this.name="PasswordMustBeString",this.message="Password must be a string.",this.status=c}}class k extends Error{constructor(e,...t){super(e,...t),this.name="PasswordAttemptLimitExceeded",this.message="Password attempt limit exceeded. Must wait ".concat(e," to attempt to use password again."),this.status=u}}class D extends Error{constructor(...e){super(...e),this.name="UsernameOrPasswordMismatch",this.message="Username or password mismatch.",this.status=u}}class K extends Error{constructor(...e){super(...e),this.name="SessionLengthMustBeNumber",this.message="Session length must be a number.",this.status=c}}class x extends Error{constructor(e,...t){super(e,...t),this.name="SessionLengthTooShort",this.message="Session length cannot be shorter than ".concat(e,"."),this.status=c}}class R extends Error{constructor(e,...t){super(e,...t),this.name="SessionLengthTooLong",this.message="Session length cannot be longer than ".concat(e,"."),this.status=c}}class O extends Error{constructor(...e){super(...e),this.name="AllowServerSideEncryptionMustBeBoolean",this.message="Allow server-side encryption value must be a boolean.",this.status=c}}class C extends Error{constructor(e,...t){super(...t),this.name="UserAlreadySignedIn",this.message="Already signed in.",this.status=c,this.username=e}}class _ extends Error{constructor(...e){super(...e),this.name="UserPendingDeletion",this.message="User is pending deletion.",this.status=h}}class F extends Error{constructor(...e){super(...e),this.name="AppIdNotValid",this.message="App ID not valid.",this.status=u}}class L extends Error{constructor(e,...t){super(e,...t),this.name="DomainNotWhitelisted",this.message="Domain not whitelisted. Whitelist the domain ".concat(e?"'".concat(e,"' "):"","in your admin panel."),this.status=u}}class j extends Error{constructor(...e){super(...e),this.name="UserNotSignedIn",this.message="Not signed in.",this.status=c}}class q extends Error{constructor(e,...t){super(e,...t),e&&(this.username=e),this.name="UserNotFound",this.message="User not found.",this.status=l}}class V extends Error{constructor(...e){super(...e),this.name="UserEmailNotFound",this.message="User does not have an email saved.",this.status=l}}class H extends Error{constructor(...e){super(...e),this.name="UserMustChangePassword",this.message="Must change password first.",this.status=h}}class G extends Error{constructor(...e){super(...e),this.name="EmailNotValid",this.message="Email not valid.",this.status=c}}class J extends Error{constructor(...e){super(...e),this.name="ProfileMustBeObject",this.message="Profile must be a flat JSON object.",this.status=c}}class W extends Error{constructor(...e){super(...e),this.name="ProfileCannotBeEmpty",this.message="Profile cannot be empty.",this.status=c}}class Y extends Error{constructor(e,...t){super(e,...t),this.name="ProfileHasTooManyKeys",this.message="Profile has too many keys. Must have a max of ".concat(e," keys."),this.status=c}}class z extends Error{constructor(e,t,...s){super(e,t,...s),this.name="ProfileKeyTooLong",this.message="Profile key too long. Must be a max of ".concat(e," characters."),this.status=c,this.key=t}}class Z extends Error{constructor(e,t,...s){super(e,t,...s),this.name="ProfileValueMustBeString",this.message="Profile value must be a string.",this.status=c,this.key=e,this.value=t}}class X extends Error{constructor(e,...t){super(e,...t),this.name="ProfileValueCannotBeBlank",this.message="Profile value cannot be blank.",this.status=c,this.key=e}}class Q extends Error{constructor(e,t,s,...a){super(e,t,s,...a),this.name="ProfileValueTooLong",this.message="Profile value too long. Must be a max of ".concat(e," characters."),this.status=c,this.key=t,this.value=s}}class $ extends Error{constructor(e,...t){super(e,...t),this.name="RememberMeValueNotValid",this.message="Remember me value must be one of ".concat(JSON.stringify(Object.keys(e)),"."),this.status=c}}class ee extends Error{constructor(...e){super(...e),this.name="ParamsMissing",this.message="Parameters expected are missing.",this.status=c}}class te extends Error{constructor(...e){super(...e),this.name="TrialExceededLimit",this.message="Trial exceeded limit of users.",this.status=d}}class se extends Error{constructor(...e){super(...e),this.name="CurrentPasswordMissing",this.message="Current password missing.",this.status=c}}class ae extends Error{constructor(...e){super(...e),this.name="CurrentPasswordIncorrect",this.message="Current password is incorrect.",this.status=u}}class re extends Error{constructor(e,...t){super(e,...t),this.name="KeyNotFound",this.message=e,this.status=l}}class ne extends Error{constructor(...e){super(...e),this.name="DeleteEndToEndEncryptedDataMustBeBoolean",this.message="Delete end-to-end encrypted data value must be a boolean.",this.status=c}}var ie={UsernameAlreadyExists:M,UsernameMissing:S,UsernameCannotBeBlank:I,UsernameTooLong:P,UsernameMustBeString:E,PasswordMissing:B,PasswordCannotBeBlank:N,PasswordTooShort:U,PasswordTooLong:A,PasswordMustBeString:T,PasswordAttemptLimitExceeded:k,UsernameOrPasswordMismatch:D,SessionLengthMustBeNumber:K,SessionLengthTooShort:x,SessionLengthTooLong:R,AllowServerSideEncryptionMustBeBoolean:O,UserAlreadySignedIn:C,UserPendingDeletion:_,AppIdNotValid:F,DomainNotWhitelisted:L,UserNotSignedIn:j,UserNotFound:q,UserEmailNotFound:V,UserMustChangePassword:H,EmailNotValid:G,ProfileMustBeObject:J,ProfileCannotBeEmpty:W,ProfileHasTooManyKeys:Y,ProfileKeyTooLong:z,ProfileValueMustBeString:Z,ProfileValueCannotBeBlank:X,ProfileValueTooLong:Q,RememberMeValueNotValid:$,ParamsMissing:ee,TrialExceededLimit:te,CurrentPasswordMissing:se,CurrentPasswordIncorrect:ae,KeyNotFound:re,DeleteEndToEndEncryptedDataMustBeBoolean:ne};class oe extends Error{constructor(...e){super(...e),this.name="DatabaseNameMissing",this.message="Database name missing.",this.status=c}}class ce extends Error{constructor(...e){super(...e),this.name="DatabaseNameCannotBeBlank",this.message="Database name cannot be blank.",this.status=c}}class ue extends Error{constructor(...e){super(...e),this.name="DatabaseNameMustBeString",this.message="Database name must be a string.",this.status=c}}class de extends Error{constructor(e,...t){super(e,...t),this.name="DatabaseNameTooLong",this.message="Database name cannot be more than ".concat(e," characters."),this.status=c}}class he extends Error{constructor(e,...t){super(e,...t),this.name="DatabaseNameRestricted",this.message="Database name '".concat(e,"' is restricted. It is used internally by userbase-js."),this.status=h}}class le extends Error{constructor(...e){super(...e),this.name="DatabaseAlreadyOpening",this.message="Already attempting to open database.",this.status=c}}class fe extends Error{constructor(...e){super(...e),this.name="ChangeHandlerMissing",this.message="Change handler missing.",this.status=c}}class me extends Error{constructor(...e){super(...e),this.name="ChangeHandlerMustBeFunction",this.message="Change handler must be a function.",this.status=c}}class pe extends Error{constructor(e,...t){super(e,...t),this.name="EncryptionModeNotValid",this.message="Encryption mode must be one of ".concat(JSON.stringify(Object.keys(e)),"."),this.status=c}}class we extends Error{constructor(...e){super(...e),this.name="ServerSideEncryptionNotEnabledInClient",this.message="Server-side encryption must be enabled in the client to use it. To enable it, set allowServerSideEncryption to true in init().",this.status=h}}class ge extends Error{constructor(...e){super(...e),this.name="DatabaseNotOpen",this.message="Database is not open.",this.status=c}}class ye extends Error{constructor(...e){super(...e),this.name="DatabaseNotFound",this.message="Database not found. Find available databases using getDatabases().",this.status=l}}class be extends Error{constructor(...e){super(...e),this.name="DatabaseIsReadOnly",this.message="Database is read only. Must have permission to write to database.",this.status=h}}class ve extends Error{constructor(...e){super(...e),this.name="DatabaseIdMustBeString",this.message="Database id must be a string.",this.status=c}}class Me extends Error{constructor(...e){super(...e),this.name="DatabaseIdCannotBeBlank",this.message="Database id cannot be blank.",this.status=c}}class Se extends Error{constructor(...e){super(...e),this.name="DatabaseIdNotAllowed",this.message="Database id not allowed. Cannot provide both databaseName and databaseId, can only provide one.",this.status=c}}class Ie extends Error{constructor(...e){super(...e),this.name="DatabaseIdNotAllowedForOwnDatabase",this.message="Tried to open the user's own database using its databaseId rather than its databaseName. The databaseId should only be used to open databases shared from other users.",this.status=h}}class Pe extends Error{constructor(e,...t){super(e,...t),this.name="DatabaseIdInvalidLength",this.message="Database id invalid length. Must be ".concat(e," characters."),this.status=c}}class Ee extends Error{constructor(...e){super(...e),this.name="ShareTokenInvalid",this.message="Share token invalid.",this.status=c}}class Be extends Error{constructor(...e){super(...e),this.name="ShareTokenNotFound",this.message="Share token not found. Perhaps the database owner has generated a new share token.",this.status=l}}class Ne extends Error{constructor(e,...t){super(e,...t),this.name="ShareTokenNotAllowed",this.message="Share token not allowed.",this.status=c}}class Ue extends Error{constructor(...e){super(...e),this.name="ShareTokenNotAllowedForOwnDatabase",this.message="Tried to open the user's own database using its shareToken rather than its databaseName. The shareToken should only be used to open databases shared from other users.",this.status=h}}class Ae extends Error{constructor(...e){super(...e),this.name="ReadOnlyMustBeBoolean",this.message="Read only value must be a boolean.",this.status=c}}class Te extends Error{constructor(...e){super(...e),this.name="ReadOnlyParamNotAllowed",this.message="Read only parameter not allowed when revoking access to a database.",this.status=c}}class ke extends Error{constructor(e,...t){super(e,...t),this.name="ResharingAllowedParamNotAllowed",this.message="Resharing allowed parameter not allowed ".concat(e,"."),this.status=c}}class De extends Error{constructor(...e){super(...e),this.name="ResharingAllowedMustBeBoolean",this.message="Resharing allowed value must be a boolean.",this.status=c}}class Ke extends Error{constructor(e,...t){super(e,...t),this.name="ResharingNotAllowed",this.message="Resharing not allowed. ".concat(e,"."),this.status=h}}class xe extends Error{constructor(...e){super(...e),this.name="ResharingWithWriteAccessNotAllowed",this.message="Resharing with write access not allowed. Must have permission to write to the database to reshare the database with write access another user.",this.status=h}}class Re extends Error{constructor(...e){super(...e),this.name="SharingWithSelfNotAllowed",this.message="Sharing database with self is not allowed. Must share database with another user.",this.status=c}}class Oe extends Error{constructor(...e){super(...e),this.name="ModifyingOwnPermissionsNotAllowed",this.message="Modifying own database permissions not allowed. Must modify another user's permissions.",this.status=c}}class Ce extends Error{constructor(...e){super(...e),this.name="ModifyingOwnerPermissionsNotAllowed",this.message="Modifying the owner of a database's permissions is not allowed.",this.status=h}}class _e extends Error{constructor(...e){super(...e),this.name="ModifyingPermissionsNotAllowed",this.message="Modifying another user's permissions is not allowed. Must have permission to reshare the database with another user.",this.status=h}}class Fe extends Error{constructor(...e){super(...e),this.name="GrantingWriteAccessNotAllowed",this.message="Granting write access not allowed. Must have permission to write to the database to grant write access to another user.",this.status=h}}class Le extends Error{constructor(...e){super(...e),this.name="RequireVerifiedMustBeBoolean",this.message="Require verified value must be a boolean.",this.status=c}}class je extends Error{constructor(...e){super(...e),this.name="RequireVerifiedParamNotNecessary",this.message="Require verified parameter not necessary when sharing database without a username.",this.status=c}}class qe extends Error{constructor(...e){super(...e),this.name="RevokeMustBeBoolean",this.message="Revoke value must be a boolean.",this.status=c}}class Ve extends Error{constructor(...e){super(...e),this.name="ItemMissing",this.message="Item missing.",this.status=c}}class He extends Error{constructor(...e){super(...e),this.name="ItemInvalid",this.message="Item must be serializable to JSON.",this.status=c}}class Ge extends Error{constructor(e,...t){super(e,...t),this.name="ItemTooLarge",this.message="Item must be less than ".concat(e," KB."),this.status=c}}class Je extends Error{constructor(...e){super(...e),this.name="ItemIdMustBeString",this.message="Item id must be a string.",this.status=c}}class We extends Error{constructor(e,...t){super(e,...t),this.name="ItemIdTooLong",this.message="Item id cannot be more than ".concat(e," characters."),this.status=c}}class Ye extends Error{constructor(...e){super(...e),this.name="ItemIdMissing",this.message="Item id missing.",this.status=c}}class ze extends Error{constructor(...e){super(...e),this.name="ItemIdCannotBeBlank",this.message="Item id cannot be blank.",this.status=c}}class Ze extends Error{constructor(...e){super(...e),this.name="ItemAlreadyExists",this.message="Item with the same id already exists.",this.status=f}}class Xe extends Error{constructor(...e){super(...e),this.name="ItemDoesNotExist",this.message="Item with the provided id does not exist.",this.status=l}}class Qe extends Error{constructor(...e){super(...e),this.name="ItemUpdateConflict",this.message="Item update conflict.",this.status=f}}class $e extends Error{constructor(...e){super(...e),this.name="FileMissing",this.message="File missing.",this.status=c}}class et extends Error{constructor(...e){super(...e),this.name="FileMustBeFile",this.message="File must be a file.",this.status=c}}class tt extends Error{constructor(...e){super(...e),this.name="FileCannotBeEmpty",this.message="File cannot be empty.",this.status=c}}class st extends Error{constructor(...e){super(...e),this.name="FileUploadConflict",this.message="File upload conflict.",this.status=f}}class at extends Error{constructor(...e){super(...e),this.name="FileNotFound",this.message="File not found.",this.status=l}}class rt extends Error{constructor(...e){super(...e),this.name="FileIdMissing",this.message="File id missing.",this.status=c}}class nt extends Error{constructor(...e){super(...e),this.name="FileIdMustBeString",this.message="File id must be a string.",this.status=c}}class it extends Error{constructor(...e){super(...e),this.name="FileIdCannotBeBlank",this.message="File id cannot be blank.",this.status=c}}class ot extends Error{constructor(e,...t){super(e,...t),this.name="FileIdTooLong",this.message="File id cannot be more than ".concat(e," characters."),this.status=c}}class ct extends Error{constructor(...e){super(...e),this.name="RangeMustBeObject",this.message="Range param provided must be object.",this.status=c}}class ut extends Error{constructor(...e){super(...e),this.name="RangeMissingStart",this.message="Range param missing start.",this.status=c}}class dt extends Error{constructor(...e){super(...e),this.name="RangeMissingEnd",this.message="Range param missing end.",this.status=c}}class ht extends Error{constructor(...e){super(...e),this.name="RangeStartMustBeNumber",this.message="Range start provided must be a number.",this.status=c}}class lt extends Error{constructor(...e){super(...e),this.name="RangeEndMustBeNumber",this.message="Range end provided must be a number.",this.status=c}}class ft extends Error{constructor(...e){super(...e),this.name="RangeStartMustBeGreaterThanZero",this.message="Range start provided must be greater than 0.",this.status=c}}class mt extends Error{constructor(...e){super(...e),this.name="RangeEndMustBeGreaterThanRangeStart",this.message="Range end provided must be greater than range start.",this.status=c}}class pt extends Error{constructor(...e){super(...e),this.name="RangeEndMustBeLessThanFileSize",this.message="Range end provided must be less than file size.",this.status=c}}class wt extends Error{constructor(...e){super(...e),this.name="OperationsMissing",this.message="Operations missing.",this.status=c}}class gt extends Error{constructor(...e){super(...e),this.name="OperationsMustBeArray",this.message="Operations provided must be an array.",this.status=c}}class yt extends Error{constructor(e,...t){super(e,...t),this.name="CommandNotRecognized",this.message="Command '".concat(e,"' not recognized."),this.status=c}}class bt extends Error{constructor(...e){super(...e),this.name="OperationsConflict",this.message="Operations conflict. Only allowed 1 operation per item.",this.status=f}}class vt extends Error{constructor(e,...t){super(e,...t),this.name="OperationsExceedLimit",this.message="Operations exceed limit. Only allowed ".concat(e," operations."),this.status=c}}class Mt extends Error{constructor(...e){super(...e),this.name="UserNotVerified",this.message="User not verified. Either verify user before sharing database, or set requireVerified to false.",this.status=h}}class St extends Error{constructor(...e){super(...e),this.name="UserMustBeReverified",this.message="User must be reverified.",this.status=h}}class It extends Error{constructor(...e){super(...e),this.name="UserUnableToReceiveDatabase",this.message="User unable to receive database. User must sign in with an updated userbase-js client to be able to receive database.",this.status=h}}class Pt extends Error{constructor(...e){super(...e),this.name="VerificationMessageMissing",this.message="Verification message missing.",this.status=c}}class Et extends Error{constructor(...e){super(...e),this.name="VerificationMessageCannotBeBlank",this.message="Verification message cannot be blank.",this.status=c}}class Bt extends Error{constructor(...e){super(...e),this.name="VerificationMessageMustBeString",this.message="Verification message must be a string.",this.status=c}}class Nt extends Error{constructor(e,...t){super(e,...t),this.name="VerificationMessageInvalid",this.message="Verification message invalid.",this.status=c}}class Ut extends Error{constructor(e,...t){super(e,...t),this.name="VerifyingSelfNotAllowed",this.message="Verifying self not allowed. Can only verify other users.",this.status=c}}class At extends Error{constructor(...e){super(...e),this.name="ProgressHandlerMustBeFunction",this.message="Progress handler must be a function.",this.status=c}}class Tt extends Error{constructor(e,...t){super(e,...t),this.name="TransactionUnauthorized",this.message="Calling '".concat(e,"' on this item is unauthorized."),this.status=h}}class kt extends Error{constructor(e,...t){super(e,...t),this.name="WriteAccessParamNotAllowed",this.message="Write access parameter not allowed. Only the item creator or database owner can change an item's write access settings.",this.status=h}}var Dt={DatabaseNameMissing:oe,DatabaseNameCannotBeBlank:ce,DatabaseNameMustBeString:ue,DatabaseNameTooLong:de,DatabaseNameRestricted:he,DatabaseNotFound:ye,DatabaseIsReadOnly:be,DatabaseAlreadyOpening:le,DatabaseIdMustBeString:ve,DatabaseIdCannotBeBlank:Me,DatabaseIdNotAllowed:Se,DatabaseIdNotAllowedForOwnDatabase:Ie,DatabaseIdInvalidLength:Pe,ShareTokenInvalid:Ee,ShareTokenNotFound:Be,ShareTokenNotAllowed:Ne,ShareTokenNotAllowedForOwnDatabase:Ue,ReadOnlyMustBeBoolean:Ae,ReadOnlyParamNotAllowed:Te,ResharingAllowedMustBeBoolean:De,ResharingNotAllowed:Ke,ResharingWithWriteAccessNotAllowed:xe,ResharingAllowedParamNotAllowed:ke,SharingWithSelfNotAllowed:Re,ModifyingOwnPermissionsNotAllowed:Oe,ModifyingOwnerPermissionsNotAllowed:Ce,ModifyingPermissionsNotAllowed:_e,GrantingWriteAccessNotAllowed:Fe,RequireVerifiedMustBeBoolean:Le,RequireVerifiedParamNotNecessary:je,RevokeMustBeBoolean:qe,ChangeHandlerMissing:fe,ChangeHandlerMustBeFunction:me,EncryptionModeNotValid:pe,ServerSideEncryptionNotEnabledInClient:we,DatabaseNotOpen:ge,ItemMissing:Ve,ItemInvalid:He,ItemTooLarge:Ge,ItemIdMustBeString:Je,ItemIdTooLong:We,ItemIdMissing:Ye,ItemIdCannotBeBlank:ze,ItemAlreadyExists:Ze,ItemDoesNotExist:Xe,ItemUpdateConflict:Qe,FileMissing:$e,FileMustBeFile:et,FileCannotBeEmpty:tt,FileUploadConflict:st,FileNotFound:at,FileIdMissing:rt,FileIdMustBeString:nt,FileIdCannotBeBlank:it,FileIdTooLong:ot,RangeMustBeObject:ct,RangeMissingStart:ut,RangeMissingEnd:dt,RangeStartMustBeNumber:ht,RangeEndMustBeNumber:lt,RangeStartMustBeGreaterThanZero:ft,RangeEndMustBeGreaterThanRangeStart:mt,RangeEndMustBeLessThanFileSize:pt,OperationsMissing:wt,OperationsMustBeArray:gt,OperationsConflict:bt,OperationsExceedLimit:vt,CommandNotRecognized:yt,UserNotVerified:Mt,UserMustBeReverified:St,UserUnableToReceiveDatabase:It,VerificationMessageMissing:Pt,VerificationMessageMustBeString:Bt,VerificationMessageCannotBeBlank:Et,VerificationMessageInvalid:Nt,VerifyingSelfNotAllowed:Ut,ProgressHandlerMustBeFunction:At,TransactionUnauthorized:Tt,WriteAccessParamNotAllowed:kt};class Kt extends Error{constructor(e,...t){super(e,...t),this.name="AppIdAlreadySet",this.message="Application ID already set.",this.status=f,this.appId=e}}class xt extends Error{constructor(...e){super(...e),this.name="AppIdMustBeString",this.message="Application ID must be a string.",this.status=c}}class Rt extends Error{constructor(...e){super(...e),this.name="AppIdMissing",this.message="Application ID missing.",this.status=c}}class Ot extends Error{constructor(...e){super(...e),this.name="AppIdCannotBeBlank",this.message="Application ID cannot be blank.",this.status=c}}class Ct extends Error{constructor(...e){super(...e),this.name="WebCryptoUnavailable",this.message="The WebCrypto API is unavailable. Please make sure your website uses https.",this.status=c}}class _t extends Error{constructor(...e){super(...e),this.name="UpdateUserHandlerMustBeFunction",this.message="Update user handler must be a function.",this.status=c}}var Ft={AppIdAlreadySet:Kt,AppIdMustBeString:xt,AppIdMissing:Rt,AppIdCannotBeBlank:Ot,WebCryptoUnavailable:Ct,UpdateUserHandlerMustBeFunction:_t};class Lt extends Error{constructor(...e){super(...e),this.name="SuccessUrlMissing",this.message="Success url missing to let Stripe know where to redirect users on successful payment.",this.status=c}}class jt extends Error{constructor(...e){super(...e),this.name="SuccessUrlMustBeString",this.message="Success url must be a string.",this.status=c}}class qt extends Error{constructor(e,...t){super(e,...t),this.name="SuccessUrlInvalid",this.message=e?"Success url must start with http or https.":"Success url invalid.",this.status=c}}class Vt extends Error{constructor(...e){super(...e),this.name="CancelUrlMissing",this.message="Cancel url missing to let Stripe know where to redirect users on canceled payment.",this.status=c}}class Ht extends Error{constructor(...e){super(...e),this.name="CancelUrlMustBeString",this.message="Cancel url must be a string.",this.status=c}}class Gt extends Error{constructor(e,...t){super(e,...t),this.name="CancelUrlInvalid",this.message=e?"Cancel url must start with http or https.":"Cancel url invalid.",this.status=c}}class Jt extends Error{constructor(...e){super(...e),this.name="StripeLibraryMissing",this.message="Stripe.js library missing. Be sure to include the script in your html file (https://stripe.com/docs/stripe-js#setup).",this.status=c}}class Wt extends Error{constructor(...e){super(...e),this.name="PaymentsDisabled",this.message="Payments on this app are disabled. Enable payments in the admin panel.",this.status=h}}class Yt extends Error{constructor(...e){super(...e),this.name="PriceIdOrPlanIdAllowed",this.message="Only one of priceId or planId allowed.",this.status=c}}class zt extends Error{constructor(...e){super(...e),this.name="PriceIdOrPlanIdMissing",this.message="Please provide a priceId or planId. You can create a product in the Stripe dashboard and find its priceId there.",this.status=c}}class Zt extends Error{constructor(...e){super(...e),this.name="SubscriptionPlanAlreadyPurchased",this.message="Subscription plan already purchased. Cancel subscription to purchase another.",this.status=f}}class Xt extends Error{constructor(...e){super(...e),this.name="StripeAccountNotConnected",this.message="Stripe account not connected. Connect a Stripe account in the admin panel.",this.status=h}}class Qt extends Error{constructor(...e){super(...e),this.name="SubscriptionNotFound",this.message="Subscription not found. User must purchase a subscription.",this.status=d}}class $t extends Error{constructor(e,...t){super(...t),this.name="SubscriptionInactive",this.message="The user's subscription is inactive.",this.subscriptionStatus=e,this.status=d}}class es extends Error{constructor(...e){super(...e),this.name="SubscriptionNotPurchased",this.message="Subscription not purchased. User must purchase a subscription.",this.status=d}}class ts extends Error{constructor(...e){super(...e),this.name="SubscriptionAlreadyCanceled",this.message="Subscription already canceled. User must purchase a new subscription.",this.status=c}}class ss extends Error{constructor(...e){super(...e),this.name="TrialExpired",this.message="Trial expired. User must purchase a subscription.",this.status=d}}class as extends Error{constructor(e,...t){super(e,...t);const{status:s,type:a,message:r}=e;this.name="StripeError",this.message=r,this.type=a,this.status=s}}var rs={SuccessUrlMissing:Lt,SuccessUrlMustBeString:jt,SuccessUrlInvalid:qt,CancelUrlMissing:Vt,CancelUrlMustBeString:Ht,CancelUrlInvalid:Gt,StripeJsLibraryMissing:Jt,PaymentsDisabled:Wt,PriceIdOrPlanIdAllowed:Yt,PriceIdOrPlanIdMissing:zt,SubscriptionPlanAlreadyPurchased:Zt,StripeAccountNotConnected:Xt,SubscriptionNotFound:Qt,SubscriptionInactive:$t,SubscriptionNotPurchased:es,SubscriptionAlreadyCanceled:ts,TrialExpired:ss,StripeError:as};function ns(e,t){var s=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),s.push.apply(s,a)}return s}function is(e){for(var t=1;t<arguments.length;t++){var s=null!=arguments[t]?arguments[t]:{};t%2?ns(Object(s),!0).forEach((function(t){r()(e,t,s[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(s)):ns(Object(s)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(s,t))}))}return e}class os extends Error{constructor(...e){super(...e),this.name="AppIdNotSet",this.message="App ID not set yet. Make sure to configure app ID.",this.status=c}}class cs extends Error{constructor(...e){super(...e),this.name="ServiceUnavailable",this.message="Service unavailable.",this.status=w}}class us extends Error{constructor(...e){super(...e),this.name="ParamsMustBeObject",this.message="Parameters passed to function must be placed inside an object.",this.status=c}}class ds extends Error{constructor(e,...t){super(e,...t);const s=Math.floor(e/1e3);this.name="TooManyRequests",this.message="Too many requests in a row. Please try again in ".concat(s," second").concat(1!==s?"s":"","."),this.status=m}}var hs=is(is(is(is(is({},ie),Dt),Ft),rs),{},{AppIdNotSet:os,InternalServerError:class extends cs{constructor(...e){super(...e),this.status=p}},ServiceUnavailable:cs,Timeout:class extends cs{constructor(...e){super(...e),this.status=g}},Reconnecting:class extends cs{constructor(...e){super(...e),this.message="Reconnecting."}},UnknownServiceUnavailable:class extends cs{constructor(e,...t){super(e,...t),console.error("Userbase error. Please report this to support@userbase.com.\n\n",e)}},ParamsMustBeObject:us,TooManyRequests:ds});let ls=null,fs=null,ms=!1;var ps="2.8.0",ws=()=>{if(!ls)throw new hs.AppIdNotSet;return ls},gs=()=>fs,ys=()=>window._userbaseEndpoint||"https://v1.userbase.com/v1",bs=({appId:e,updateUserHandler:t,allowServerSideEncryption:s})=>{if(ls&&ls!==e)throw new hs.AppIdAlreadySet(ls);ls=e,fs=t,ms=s},vs=e=>e?window._USERBASE_STRIPE_PRODUCTION_PUBLISHABLE_KEY||"pk_live_jI6lbsAIQlu2u4uTkDXFrSEW":window._USERBASE_STRIPE_TEST_PUBLISHABLE_KEY||"pk_test_rYANrLdNfdJXJ2d808wW4pqY",Ms=()=>ms;class Ss extends Error{constructor(e,t,s,...a){super(e,t,s,...a),this.response={data:e,status:t,statusText:s},this.message="Request failed with status code "+t}}class Is extends Error{constructor(e,...t){super(e,...t),this.message="timeout of ".concat(e,"ms exceeded")}}const Ps=(e,t,s,a=1e4)=>{e.timeout=a,e.onload=()=>((e,t,s)=>{let a;try{a=JSON.parse(e.response)}catch(t){a=e.response}e.status>=200&&e.status<300?t(a):s(new Ss(a,e.status,e.statusText))})(e,t,s),e.onerror=()=>s(new hs.ServiceUnavailable),e.ontimeout=()=>s(new Is(a))};var Es=(e,t,s,a,r,n,i,o,c)=>new Promise((u,d)=>{const h=new XMLHttpRequest,l="".concat(ys(),"/api/auth/sign-up?appId=").concat(ws(),"&userbaseJsVersion=").concat(ps),f=JSON.stringify({username:e,passwordToken:t,ecKeyData:s,passwordSalts:a,keySalts:r,email:n,profile:i,passwordBasedBackup:o,sessionLength:c});h.open("POST",l),h.setRequestHeader("Content-Type","application/json"),h.send(f),Ps(h,u,d)}),Bs=e=>new Promise((t,s)=>{const a=new XMLHttpRequest,r="".concat(ys(),"/api/auth/get-password-salts?appId=").concat(ws(),"&username=").concat(encodeURIComponent(e),"&userbaseJsVersion=").concat(ps);a.open("GET",r),a.send(),Ps(a,t,s)}),Ns=async(e,t,s)=>new Promise((a,r)=>{const n=new XMLHttpRequest,i="".concat(ys(),"/api/auth/sign-in?appId=").concat(ws(),"&userbaseJsVersion=").concat(ps),o=JSON.stringify({username:e,passwordToken:t,sessionLength:s});n.open("POST",i),n.setRequestHeader("Content-Type","application/json"),n.send(o),Ps(n,a,r)}),Us=(e,t)=>new Promise((s,a)=>{const r=new XMLHttpRequest,n="".concat(ys(),"/api/auth/sign-in-with-session?appId=").concat(ws(),"&sessionId=").concat(e,"&userbaseJsVersion=").concat(ps),i=JSON.stringify({sessionLength:t});r.open("POST",n),r.setRequestHeader("Content-Type","application/json"),r.send(i),Ps(r,s,a)}),As=async()=>new Promise((e,t)=>{const s=new XMLHttpRequest,a="".concat(ys(),"/api/auth/server-public-key?&userbaseJsVersion=").concat(ps);s.open("GET",a),s.responseType="arraybuffer",s.send(),Ps(s,e,t)}),Ts=e=>new Promise((t,s)=>{const a=new XMLHttpRequest,r="".concat(ys(),"/api/public-key?appId=").concat(ws(),"&username=").concat(encodeURIComponent(e),"&userbaseJsVersion=").concat(ps);a.open("GET",r),a.send(),Ps(a,t,s)}),ks=s(2),Ds=s.n(ks);function Ks(e,t){var s=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),s.push.apply(s,a)}return s}function xs(e){for(var t=1;t<arguments.length;t++){var s=null!=arguments[t]?arguments[t]:{};t%2?Ks(Object(s),!0).forEach((function(t){r()(e,t,s[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(s)):Ks(Object(s)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(s,t))}))}return e}const Rs=e=>(...t)=>{try{return e(...t)}catch(e){console.warn("Error accessing browser storage. Defaulting to memory.\n\n",e)}},Os=(e,t)=>"userbaseSeed.".concat(e,".").concat(t),Cs=Rs((e,t,s,a,r,n)=>{const i={username:t,signedIn:s,sessionId:a,creationDate:r,expirationDate:n},o=JSON.stringify(i);"local"===e?localStorage.setItem("userbaseCurrentSession",o):"session"===e&&sessionStorage.setItem("userbaseCurrentSession",o)});var _s={signInSession:(e,t,s,a,r)=>{Cs(e,t,!0,s,a,r)},signOutSession:(e,t)=>{Cs(e,t,!1)},getCurrentSession:Rs(()=>{const e=sessionStorage.getItem("userbaseCurrentSession");if(e){if(!JSON.parse(e).signedIn){const e=localStorage.getItem("userbaseCurrentSession");if(e){const t=JSON.parse(e);if(t.signedIn)return xs(xs({},t),{},{rememberMe:"local"})}}return xs(xs({},JSON.parse(e)),{},{rememberMe:"session"})}const t=localStorage.getItem("userbaseCurrentSession");return t&&xs(xs({},JSON.parse(t)),{},{rememberMe:"local"})}),saveSeedString:Rs((e,t,s,a)=>{"local"===e?localStorage.setItem(Os(t,s),a):"session"===e&&sessionStorage.setItem(Os(t,s),a)}),removeSeedString:Rs((e,t)=>{const s=Os(e,t);sessionStorage.removeItem(s),localStorage.removeItem(s)}),getSeedString:Rs((e,t)=>{const s=Os(e,t);return sessionStorage.getItem(s)||localStorage.getItem(s)}),removeCurrentSession:Rs(()=>{sessionStorage.removeItem("userbaseCurrentSession"),localStorage.removeItem("userbaseCurrentSession")})};const Fs=(e,t)=>{const s=t?new Uint8Array(e):new Uint16Array(e),a=s.length;let r="",n=10240;for(var i=0;i<a;i+=n){i+n>a&&(n=a-i);const e=s.subarray(i,i+n);r+=String.fromCharCode.apply(null,e)}return r},Ls=(e,t=!1)=>{let s=new ArrayBuffer(e.length*(t?1:2)),a=t?new Uint8Array(s):new Uint16Array(s);for(let t=0,s=e.length;t<s;t++)a[t]=e.charCodeAt(t);return s},js=(e,t)=>{const s=new Uint8Array(e.byteLength+t.byteLength);return s.set(new Uint8Array(e),0),s.set(new Uint8Array(t),e.byteLength),s.buffer},qs=async e=>await window.crypto.subtle.digest({name:"SHA-256"},e);var Vs={BYTE_SIZE:32,HASH_ALGORITHM_NAME:"SHA-256",hash:qs,hashBase64String:async e=>{const t=i.a.decode(e),s=await qs(t);return i.a.encode(s)},hashString:async e=>{const t=Ls(e),s=await qs(t);return i.a.encode(s)}};const Hs=["deriveKey","deriveBits"],Gs=async e=>await window.crypto.subtle.importKey("raw",e,{name:"HKDF"},!1,Hs),Js=Vs.BYTE_SIZE,Ws=(e,t)=>({name:"HKDF",info:Ls(e),hash:Vs.HASH_ALGORITHM_NAME,salt:t});var Ys={importHkdfKeyFromString:async e=>{const t=Ls(e);return await Gs(t)},importHkdfKey:Gs,generateSalt:()=>window.crypto.getRandomValues(new Uint8Array(Js)),getParams:Ws,getPasswordToken:async(e,t)=>{const s=await window.crypto.subtle.deriveBits(Ws("password-token",t),e,256);return i.a.encode(s)}};const zs=["encrypt","decrypt"],Zs=()=>"undefined"!=typeof window?window:self,Xs=()=>({name:"AES-GCM",length:256}),Qs=e=>({name:"AES-GCM",tagLength:128,iv:e}),$s=()=>window.crypto.getRandomValues(new Uint8Array(12)),ea=e=>{const t=e.byteLength-12;return{ciphertextArrayBuffer:e.slice(0,t),iv:e.slice(t)}},ta=async()=>await window.crypto.subtle.generateKey({name:"AES-GCM",length:256},!0,zs),sa=async e=>await Zs().crypto.subtle.importKey("raw",e,{name:"AES-GCM"},!0,zs),aa=async e=>await Zs().crypto.subtle.exportKey("raw",e),ra=async(e,t)=>{const s=$s(),a=await Zs().crypto.subtle.encrypt(Qs(s),e,t);return js(a,s)},na=async(e,t)=>{const s=Ls(t),a=await ra(e,s);return i.a.encode(a)},ia=async(e,t)=>{const{ciphertextArrayBuffer:s,iv:a}=ea(t);return await Zs().crypto.subtle.decrypt(Qs(a),e,s)},oa=async(e,t)=>{const s=i.a.decode(t),a=await ia(e,s);return Fs(a)};var ca={getEncryptionKeyParams:Xs,getCiphertextParams:Qs,generateIv:$s,sliceEncryptedArrayBuffer:ea,importKeyFromMaster:async(e,t,s="encryption")=>await window.crypto.subtle.deriveKey(Ys.getParams(s,t),e,{name:"AES-GCM",length:256},!0,zs),generateKey:ta,getKeyStringFromKey:async e=>{const t=await window.crypto.subtle.exportKey("raw",e);return i.a.encode(t)},getKeyFromKeyString:async e=>{const t=i.a.decode(e);return await sa(t)},getRawKeyFromKey:aa,getKeyFromRawKey:sa,encrypt:ra,encryptJson:async(e,t)=>{const s=JSON.stringify(t);return await na(e,s)},encryptString:na,decrypt:ia,decryptJson:async(e,t)=>{const s=await oa(e,t);return JSON.parse(s)},decryptString:oa,getPasswordBasedEncryptionKey:async(e,t)=>await window.crypto.subtle.deriveKey(Ys.getParams("password-based-encryption",t),e,{name:"AES-GCM",length:256},!1,zs),generateAndEncryptKeyEncryptionKey:async e=>{const t=await ta(),s=await aa(t);return[t,await ra(e,s)]},RAW_KEY_TYPE:"raw",KEY_WILL_BE_USED_TO:zs},ua=s(10),da=s.n(ua);const ha=["encrypt"],la=(e=>{if(e.length%2!=0)throw new Error("Hex string must be even length");const t=e.length/2,s=[];for(let a=0;a<t;a++){const t=2*a,r=e.substring(t,t+2),n=parseInt(r,16);s.push(n)}return new Uint8Array(s)})("ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff"),fa=[2];let ma=null;const pa=e=>((e,t)=>(e.setPrivateKey(t),e.generateKeys(),e))(da.a.createDiffieHellman(la,fa),e),wa=async(e,t)=>{const s=pa(e).computeSecret(t),a=await Vs.hash(s);return await ca.getKeyFromRawKey(a)};var ga={getPublicKey:e=>pa(e).getPublicKey(),getSharedKey:wa,getSharedKeyWithServer:async e=>await wa(e,new Uint8Array(await(async()=>ma||(ma=await As(),ma))())),importKeyFromMaster:async(e,t)=>{const s=await window.crypto.subtle.deriveKey(Ys.getParams("diffie-hellman",t),e,ca.getEncryptionKeyParams(),!0,ha);return await ca.getRawKeyFromKey(s)}};const ya=["sign","verify"],ba=["sign"],va=["verify"],Ma={name:"ECDSA",namedCurve:"P-256"},Sa={name:"ECDSA",hash:{name:Vs.HASH_ALGORITHM_NAME}},Ia=async e=>await window.crypto.subtle.exportKey("spki",e),Pa=async e=>{const t=await Ia(e);return i.a.encode(t)},Ea=async(e,t)=>await ca.importKeyFromMaster(e,t,"ecdsa-key-encryption-key"),Ba=async(e,t)=>await window.crypto.subtle.sign(Sa,e,t),Na=async(e,t,s)=>await window.crypto.subtle.verify(Sa,e,t,s);var Ua={generateEcdsaKeyData:async e=>{const t=await(async()=>await window.crypto.subtle.generateKey(Ma,!0,ya))(),s=Ys.generateSalt(),a=await Ea(e,s),r=await(async e=>{const t=await window.crypto.subtle.exportKey("jwk",e);return Ls(JSON.stringify(t))})(t.privateKey),n=await ca.encrypt(a,r);return{ecdsaPrivateKey:t.privateKey,ecdsaPublicKey:await Pa(t.publicKey),encryptedEcdsaPrivateKey:i.a.encode(n),ecdsaKeyEncryptionKeySalt:i.a.encode(s)}},importEcdsaKeyEncryptionKeyFromMaster:Ea,getPrivateKeyFromRawPrivateKey:async e=>{const t=JSON.parse(Fs(e));return await window.crypto.subtle.importKey("jwk",t,Ma,!0,ba)},getPublicKeyFromRawPublicKey:async e=>await window.crypto.subtle.importKey("spki",e,Ma,!0,va),getRawPublicKeyFromPublicKey:Ia,getPublicKeyStringFromPublicKey:Pa,getPublicKeyFromPrivateKey:async e=>{const t=await window.crypto.subtle.exportKey("jwk",e);delete t.d,t.key_ops=va;return await window.crypto.subtle.importKey("jwk",t,Ma,!0,va)},sign:Ba,signString:async(e,t)=>{const s=Ls(t),a=await Ba(e,s);return i.a.encode(a)},verify:Na,verifyString:async(e,t,s)=>{const a=Ls(s),r=i.a.decode(t);return await Na(e,r,a)}};const Aa=["deriveKey","deriveBits"],Ta={name:"ECDH",namedCurve:"P-256"},ka=async()=>await window.crypto.subtle.generateKey(Ta,!0,Aa),Da=async e=>await window.crypto.subtle.exportKey("spki",e),Ka=async(e,t)=>await ca.importKeyFromMaster(e,t,"ecdh-key-encryption-key");var xa={generateKeyPair:ka,generateEcdhKeyData:async(e,t)=>{const s=await ka(),a=Ys.generateSalt(),r=await Ka(e,a),n=await(async e=>{const t=await window.crypto.subtle.exportKey("jwk",e);return Ls(JSON.stringify(t))})(s.privateKey),o=await ca.encrypt(r,n),c=await Da(s.publicKey),u=await Ua.sign(t,c);return{ecdhPrivateKey:s.privateKey,ecdhPublicKey:i.a.encode(c),encryptedEcdhPrivateKey:i.a.encode(o),signedEcdhPublicKey:i.a.encode(u),ecdhKeyEncryptionKeySalt:i.a.encode(a)}},importEcdhKeyEncryptionKeyFromMaster:Ka,getPrivateKeyFromRawPrivateKey:async e=>{const t=JSON.parse(Fs(e));return await window.crypto.subtle.importKey("jwk",t,Ta,!0,Aa)},getRawPublicKeyFromPublicKey:Da,getPublicKeyFromRawPublicKey:async e=>await window.crypto.subtle.importKey("spki",e,Ta,!0,[]),computeSharedKeyEncryptionKey:async(e,t)=>await window.crypto.subtle.deriveKey({name:"ECDH",namedCurve:"P-256",public:e},t,ca.getEncryptionKeyParams(),!1,ca.KEY_WILL_BE_USED_TO)};const Ra=["sign"],Oa=["sign","verify"],Ca=async(e,t)=>await window.crypto.subtle.sign({name:"HMAC"},e,t);var _a={importKeyFromMaster:async(e,t)=>await window.crypto.subtle.deriveKey(Ys.getParams("authentication",t),e,{name:"HMAC",hash:{name:Vs.HASH_ALGORITHM_NAME},length:512},!1,Ra),importKeyFromRawBits:async e=>await window.crypto.subtle.importKey("raw",e,{name:"HMAC",hash:{name:Vs.HASH_ALGORITHM_NAME},length:256},!1,Oa),sign:Ca,signString:async(e,t)=>{const s=await Ca(e,Ls(t));return i.a.encode(s)}},Fa=s(11),La=s.n(Fa);var ja={generateSeed:()=>window.crypto.getRandomValues(new Uint8Array(32)),aesGcm:ca,diffieHellman:ga,ecdsa:Ua,ecdh:xa,sha256:Vs,hmac:_a,hkdf:Ys,scrypt:{generateSalt:()=>window.crypto.getRandomValues(new Uint8Array(16)),hash:async(e,t,s=La.a.scrypt)=>{const a=new Uint8Array(Ls(e)),r=await s(a,t,16384,8,1,32);return i.a.encode(r)}}};const qa=e=>e.split(":")[0],Va=e=>{const t=(e=>"http://"===e.substring(0,"http://".length)?e.substring("http://".length):"https://"===e.substring(0,"https://".length)?e.substring("https://".length):e)(e);return("https"===qa(e)?"wss://":"ws://")+t},Ha=e=>2*e.length,Ga=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);function Ja(){let e=[],t=0;this.getLength=()=>e.length-t,this.isEmpty=()=>0===e.length,this.enqueue=t=>(e.push(t),this.getLength()),this.dequeue=()=>{const s=e[t];return t+=1,2*t>e.length&&(e=e.slice(t),t=0),s},this.peek=()=>e[t]}const Wa=()=>{const e=URL.createObjectURL(new Blob(["(",function(){self.onmessage=function(e){const{compress:t,decompress:s,data:a}=e.data,r=function(){function e(e,t){if(!r[e]){r[e]={};for(var s=0;s<e.length;s++)r[e][e.charAt(s)]=s}return r[e][t]}var t=String.fromCharCode,s="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$",r={},n={compressToBase64:function(e){if(null==e)return"";var t=n._compress(e,6,(function(e){return s.charAt(e)}));switch(t.length%4){default:case 0:return t;case 1:return t+"===";case 2:return t+"==";case 3:return t+"="}},decompressFromBase64:function(t){return null==t?"":""==t?null:n._decompress(t.length,32,(function(a){return e(s,t.charAt(a))}))},compressToUTF16:function(e){return null==e?"":n._compress(e,15,(function(e){return t(e+32)}))+" "},decompressFromUTF16:function(e){return null==e?"":""==e?null:n._decompress(e.length,16384,(function(t){return e.charCodeAt(t)-32}))},compressToUint8Array:function(e){for(var t=n.compress(e),s=new Uint8Array(2*t.length),a=0,r=t.length;r>a;a++){var i=t.charCodeAt(a);s[2*a]=i>>>8,s[2*a+1]=i%256}return s},decompressFromUint8Array:function(e){if(null==e)return n.decompress(e);for(var s=new Array(e.length/2),a=0,r=s.length;r>a;a++)s[a]=256*e[2*a]+e[2*a+1];var i=[];return s.forEach((function(e){i.push(t(e))})),n.decompress(i.join(""))},compressToEncodedURIComponent:function(e){return null==e?"":n._compress(e,6,(function(e){return a.charAt(e)}))},decompressFromEncodedURIComponent:function(t){return null==t?"":""==t?null:(t=t.replace(/ /g,"+"),n._decompress(t.length,32,(function(s){return e(a,t.charAt(s))})))},compress:function(e){return n._compress(e,16,(function(e){return t(e)}))},_compress:function(e,t,s){if(null==e)return"";var a,r,n,i={},o={},c="",u="",d="",h=2,l=3,f=2,m=[],p=0,w=0;for(n=0;n<e.length;n+=1)if(c=e.charAt(n),Object.prototype.hasOwnProperty.call(i,c)||(i[c]=l++,o[c]=!0),u=d+c,Object.prototype.hasOwnProperty.call(i,u))d=u;else{if(Object.prototype.hasOwnProperty.call(o,d)){if(d.charCodeAt(0)<256){for(a=0;f>a;a++)p<<=1,w==t-1?(w=0,m.push(s(p)),p=0):w++;for(r=d.charCodeAt(0),a=0;8>a;a++)p=p<<1|1&r,w==t-1?(w=0,m.push(s(p)),p=0):w++,r>>=1}else{for(r=1,a=0;f>a;a++)p=p<<1|r,w==t-1?(w=0,m.push(s(p)),p=0):w++,r=0;for(r=d.charCodeAt(0),a=0;16>a;a++)p=p<<1|1&r,w==t-1?(w=0,m.push(s(p)),p=0):w++,r>>=1}0==--h&&(h=Math.pow(2,f),f++),delete o[d]}else for(r=i[d],a=0;f>a;a++)p=p<<1|1&r,w==t-1?(w=0,m.push(s(p)),p=0):w++,r>>=1;0==--h&&(h=Math.pow(2,f),f++),i[u]=l++,d=String(c)}if(""!==d){if(Object.prototype.hasOwnProperty.call(o,d)){if(d.charCodeAt(0)<256){for(a=0;f>a;a++)p<<=1,w==t-1?(w=0,m.push(s(p)),p=0):w++;for(r=d.charCodeAt(0),a=0;8>a;a++)p=p<<1|1&r,w==t-1?(w=0,m.push(s(p)),p=0):w++,r>>=1}else{for(r=1,a=0;f>a;a++)p=p<<1|r,w==t-1?(w=0,m.push(s(p)),p=0):w++,r=0;for(r=d.charCodeAt(0),a=0;16>a;a++)p=p<<1|1&r,w==t-1?(w=0,m.push(s(p)),p=0):w++,r>>=1}0==--h&&(h=Math.pow(2,f),f++),delete o[d]}else for(r=i[d],a=0;f>a;a++)p=p<<1|1&r,w==t-1?(w=0,m.push(s(p)),p=0):w++,r>>=1;0==--h&&(h=Math.pow(2,f),f++)}for(r=2,a=0;f>a;a++)p=p<<1|1&r,w==t-1?(w=0,m.push(s(p)),p=0):w++,r>>=1;for(;;){if(p<<=1,w==t-1){m.push(s(p));break}w++}return m.join("")},decompress:function(e){return null==e?"":""==e?null:n._decompress(e.length,32768,(function(t){return e.charCodeAt(t)}))},_decompress:function(e,s,a){var r,n,i,o,c,u,d,h=[],l=4,f=4,m=3,p="",w=[],g={val:a(0),position:s,index:1};for(r=0;3>r;r+=1)h[r]=r;for(i=0,c=Math.pow(2,2),u=1;u!=c;)o=g.val&g.position,g.position>>=1,0==g.position&&(g.position=s,g.val=a(g.index++)),i|=(o>0?1:0)*u,u<<=1;switch(i){case 0:for(i=0,c=Math.pow(2,8),u=1;u!=c;)o=g.val&g.position,g.position>>=1,0==g.position&&(g.position=s,g.val=a(g.index++)),i|=(o>0?1:0)*u,u<<=1;d=t(i);break;case 1:for(i=0,c=Math.pow(2,16),u=1;u!=c;)o=g.val&g.position,g.position>>=1,0==g.position&&(g.position=s,g.val=a(g.index++)),i|=(o>0?1:0)*u,u<<=1;d=t(i);break;case 2:return""}for(h[3]=d,n=d,w.push(d);;){if(g.index>e)return"";for(i=0,c=Math.pow(2,m),u=1;u!=c;)o=g.val&g.position,g.position>>=1,0==g.position&&(g.position=s,g.val=a(g.index++)),i|=(o>0?1:0)*u,u<<=1;switch(d=i){case 0:for(i=0,c=Math.pow(2,8),u=1;u!=c;)o=g.val&g.position,g.position>>=1,0==g.position&&(g.position=s,g.val=a(g.index++)),i|=(o>0?1:0)*u,u<<=1;h[f++]=t(i),d=f-1,l--;break;case 1:for(i=0,c=Math.pow(2,16),u=1;u!=c;)o=g.val&g.position,g.position>>=1,0==g.position&&(g.position=s,g.val=a(g.index++)),i|=(o>0?1:0)*u,u<<=1;h[f++]=t(i),d=f-1,l--;break;case 2:return w.join("")}if(0==l&&(l=Math.pow(2,m),m++),h[d])p=h[d];else{if(d!==f)return null;p=n+n.charAt(0)}w.push(p),h[f++]=n+p.charAt(0),n=p,0==--l&&(l=Math.pow(2,m),m++)}}};return n}();t?postMessage(r.compress(a)):s&&postMessage(r.decompress(a))}}.toString(),")()"],{type:"application/javascript"})),t=new Worker(e);return URL.revokeObjectURL(e),t},Ya=async e=>{const t=Wa();return new Promise(s=>{t.onmessage=e=>{s(e.data),t.terminate()},t.postMessage({compress:!0,data:e})})},za=async e=>{const t=Wa();return new Promise(s=>{t.onmessage=e=>{s(e.data),t.terminate()},t.postMessage({decompress:!0,data:e})})},Za=async(e,t,s,a,r,n)=>new Promise((i,o)=>{const c=new XMLHttpRequest,u="".concat(ys(),"/api/bundle-chunk?userbaseJsVersion=").concat(ps,"&")+"userId=".concat(e,"&")+"databaseId=".concat(t,"&")+"seqNo=".concat(s,"&")+"bundleId=".concat(a,"&")+"chunkNumber=".concat(r);c.open("POST",u),c.send(new Uint8Array(n)),Ps(c,i,o,3e4)});function Xa(e,t){var s=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),s.push.apply(s,a)}return s}function Qa(e){for(var t=1;t<arguments.length;t++){var s=null!=arguments[t]?arguments[t]:{};t%2?Xa(Object(s),!0).forEach((function(t){r()(e,t,s[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(s)):Xa(Object(s)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(s,t))}))}return e}const $a=Ds()();class er extends Error{constructor(e,t,...s){super(...s),this.name="RequestFailed: ".concat(e),this.message=t.message,this.status=t.status||"timeout"===t.message&&g,this.response=t.status&&t}}class tr extends Error{constructor(e,t,s,...a){super(...a),this.name="WebSocket error",this.message=e,this.username=t,this.e=s}}var sr=new class{constructor(){this.init()}init(e,t,s,a,r,n,i,o){this.pingTimeout&&clearTimeout(this.pingTimeout);for(const e of Object.keys(this))delete this[e];this.ws=null,this.connected=!1,this.resolveConnection=e,this.rejectConnection=t,this.connectionResolved=!1,this.session={username:s&&s.username,sessionId:s&&s.sessionId,creationDate:s&&s.creationDate,expirationDate:s&&s.expirationDate,userId:s&&s.userId,authToken:s&&s.authToken},this.seedString=a,this.changePassword=n,this.keys={init:!1,salts:{}},this.userData={stripeData:{}},this.rememberMe=r,this.requests={},this.state=i||{dbNameToHash:{},databases:{},databasesByDbId:{},shareTokenIdToDbId:{}},this.encryptionMode=o}connect(e,t=null,s,a,r,n){if(this.connected)throw new tr("Web Socket already connected",this.session.username);return new Promise((i,c)=>{let u=!1;const d=setTimeout(()=>{this.connected||this.reconnecting||(u=!0,c(new tr("timeout")))},1e4),h="".concat(Va(ys()),"/api?appId=").concat(ws(),"&sessionId=").concat(e.sessionId,"&clientId=").concat($a,"&userbaseJsVersion=").concat(ps),l=new WebSocket(h);l.onopen=async()=>{u||clearTimeout(d)},l.onmessage=async r=>{if(!u)try{const u=JSON.parse(r.data);switch(u.route){case"Ping":{this.heartbeat();const e="Pong";this.ws.send(JSON.stringify({action:e}));break}case"Connection":{const{encryptionMode:o}=u;if(this.init(i,c,e,t,s,a,n,o),this.ws=l,this.heartbeat(),this.connected=!0,t){const{keySalts:e,validationMessage:t,ecKeyData:s,encryptedValidationMessage:a}=u;this.keys.salts=e,this.validationMessage=t,this.ecKeyData=s,a&&(this.encryptedValidationMessage=new Uint8Array(a.data));try{await this.setKeys(this.seedString);const e=await this.validateKey();this.userData=e}catch(r){throw r&&"OperationError"===r.name||r instanceof DOMException?new Error("Invalid seed"):r}this.keys.init=!0}this.resolveConnection(),this.connectionResolved=!0;break}case"ApplyTransactions":{const e=u.dbId,t=u.dbNameHash,s=u.isOwner?this.state.databases[t]:this.state.databasesByDbId[e];if(!s)throw new Error("Missing database");s.applyTransactionsQueue.isEmpty()?s.applyTransactionsQueue.enqueue(null):await new Promise(e=>{const t=e;s.applyTransactionsQueue.enqueue(t)});if((u.dbNameHash&&(u.dbKey||u.plaintextDbKey)||u.shareTokenEncryptedDbKey)&&(!s.dbKeyString||!s.dbKey)){const e=u.plaintextDbKey||(u.dbKey?await ja.aesGcm.decryptString(this.keys.encryptionKey,u.dbKey):await s.decryptShareTokenEncryptedDbKey(u.shareTokenEncryptedDbKey,u.shareTokenEncryptionKeySalt));s.dbKeyString=e,s.dbKey=await ja.aesGcm.getKeyFromKeyString(e)}if(!s.dbKey)throw new Error("Missing db key");if(u.writers){s.attributionEnabled=!0;for(const{userId:e,username:t}of u.writers)s.usernamesByUserId.set(e,t)}if(u.waitForFullBundle){s.finishedWaitingForBundle||await new Promise(e=>s.finishedWaitingForBundle=e);try{const e=await this.rebuildBundle(s,u.bundleSeqNo,u.encryptedBundleEncryptionKey);await s.applyBundle(e,u.bundleSeqNo)}catch(r){throw window.alert("Oops! Something went wrong. Please contact the site administrator with this issue (".concat(e,").\n\n")+r),r}}const a=u.transactionLog;if(await s.applyTransactions(a,u.ownerId,e,t),u.buildBundle&&this.buildBundle(s),s.applyTransactionsQueue.dequeue(),!s.applyTransactionsQueue.isEmpty()){s.applyTransactionsQueue.peek()()}break}case"DownloadBundleChunk":{const{dbId:e,dbNameHash:t,isOwner:s,bundleSeqNo:a,isFirstChunk:r,isLastChunk:n,chunk:i}=u,o=s?this.state.databases[t]:this.state.databasesByDbId[e];if(!o)throw new Error("Missing database");r&&(o.bundleChunks[a]=[]),o.bundleChunks[a].push(i),n&&(o.finishedWaitingForBundle?o.finishedWaitingForBundle():o.finishedWaitingForBundle=!0);break}case"UpdatedUser":this.handleUpdateUser(u.updatedUser);break;case"SignOut":case"UpdateUser":case"DeleteUser":case"CreateDatabase":case"OpenDatabase":case"OpenDatabaseByDatabaseId":case"GetDatabases":case"GetDatabaseUsers":case"Insert":case"Update":case"Delete":case"BatchTransaction":case"InitBundleUpload":case"CompleteBundleUpload":case"GenerateFileId":case"UploadFileChunk":case"CompleteFileUpload":case"GetChunk":case"ValidateKey":case"GetPasswordSalts":case"PurchaseSubscription":case"CancelSubscription":case"ResumeSubscription":case"UpdatePaymentMethod":case"ShareDatabase":case"ShareDatabaseToken":case"AuthenticateShareToken":case"SaveDatabase":case"ModifyDatabasePermissions":case"VerifyUser":{const e=u.requestId;if(!e)return console.warn("Missing request id");const t=this.requests[e];if(!t)return console.warn("Request ".concat(e," no longer exists!"));if(!t.promiseResolve||!t.promiseReject)return;const s=u.response;return s&&s.status===o?t.promiseResolve(s):t.promiseReject(s)}default:console.log("Received unknown message from backend:"+JSON.stringify(u))}}catch(r){this.connectionResolved?console.warn("Error handling message: ",r):(this.close(),c(new tr(r.message,e.username,r)))}},l.onclose=async o=>{if(u)return;const d=o.code===y,h=o.code===b;if(d||h||!o.wasClean){const o=d&&!r?0:r?r+1e3:1e3;this.reconnecting=!0,await this.reconnect(i,c,e,this.seedString||t,s,a,o,!this.reconnected&&n)}else o.code===v?c(new tr("Web Socket already connected",e.username,o)):this.init()},l.onerror=()=>{}})}async reconnect(e,t,s,a,r,n,i,o){try{const t=Math.min(i,3e4);console.log("Connection to server lost. Attempting to reconnect in ".concat(t/1e3," second").concat(1e3!==t?"s":"","..."));const c=[],u=[];e(await new Promise((e,d)=>setTimeout(async()=>{try{const t=o||{dbNameToHash:Qa({},this.state.dbNameToHash),databases:Qa({},this.state.databases),databasesByDbId:Qa({},this.state.databasesByDbId),shareTokenIdToDbId:Qa({},this.state.shareTokenIdToDbId)};for(const e in t.databases)t.databases[e].init=!1,t.databases[e].finishedWaitingForBundle=!1,c.push(e);for(const e in t.databasesByDbId)t.databasesByDbId[e].init=!1,t.databasesByDbId[e].finishedWaitingForBundle=!1,u.push(e);this.init(),this.reconnecting=!0;const d=await this.connect(s,a,r,n,i,t);this.reconnected=!0,o||(await this.reopenDatabases(c,u,1e3),console.log("Reconnected!")),e(d)}catch(e){d(e)}},t)))}catch(e){t(e)}}async reopenDatabases(e,t,s){try{const s=[];for(const t of e){const e=this.state.databases[t];if(!e.init){const a="OpenDatabase",r={dbNameHash:t,reopenAtSeqNo:e.lastSeqNo};s.push(this.request(a,r))}}for(const e of t){const t=this.state.databasesByDbId[e];if(!t.init){const a=t.shareTokenHkdfKey,r=a?await this.authenticateShareToken(t.shareTokenId,a):{},n="OpenDatabaseByDatabaseId",i=Qa({databaseId:e,reopenAtSeqNo:t.lastSeqNo},r);s.push(this.request(n,i))}}await Promise.all(s)}catch(a){await new Promise(a=>setTimeout(async()=>{await this.reopenDatabases(e,t,s+1e3),a()},Math.min(s,3e4)))}}heartbeat(){clearTimeout(this.pingTimeout);this.pingTimeout=setTimeout(()=>{this.ws&&this.ws.close(b)},33e3)}close(e){this.ws?this.ws.close(e):this.init()}async signOut(){const e=this.session.username,t=this.connectionResolved,s=this.rejectConnection;try{_s.signOutSession(this.rememberMe,e);const a=this.session.sessionId;if(this.reconnecting)throw new hs.Reconnecting;const r="SignOut",n={sessionId:a};await this.request(r,n),this.close(),!t&&s&&s(new tr("Canceled",e))}catch(a){throw!t&&s&&s(new tr("Canceled",e)),a}}async setKeys(e){if(this.keys.init)return;if(!e)throw new tr("Missing seed",this.session.username);if(!this.keys.salts)throw new tr("Missing salts",this.session.username);this.seedString||(this.seedString=e);const t=i.a.decode(e),s=await ja.hkdf.importHkdfKey(t),a=this.keys.salts;if(this.keys.encryptionKey=await ja.aesGcm.importKeyFromMaster(s,i.a.decode(a.encryptionKeySalt)),this.keys.hmacKey=await ja.hmac.importKeyFromMaster(s,i.a.decode(a.hmacKeySalt)),a.ecdsaKeyEncryptionKeySalt){const e=await ja.ecdsa.importEcdsaKeyEncryptionKeyFromMaster(s,i.a.decode(a.ecdsaKeyEncryptionKeySalt)),t=i.a.decode(this.ecKeyData.encryptedEcdsaPrivateKey),r=await ja.aesGcm.decrypt(e,t);this.keys.ecdsaPrivateKey=await ja.ecdsa.getPrivateKeyFromRawPrivateKey(r);const n=await ja.ecdh.importEcdhKeyEncryptionKeyFromMaster(s,i.a.decode(a.ecdhKeyEncryptionKeySalt)),o=i.a.decode(this.ecKeyData.encryptedEcdhPrivateKey),c=await ja.aesGcm.decrypt(n,o);this.keys.ecdhPrivateKey=await ja.ecdh.getPrivateKeyFromRawPrivateKey(c)}else a.dhKeySalt&&(this.keys.dhPrivateKey=await ja.diffieHellman.importKeyFromMaster(s,i.a.decode(a.dhKeySalt)));if(a.dhKeySalt||a.ecdsaKeyWrapperSalt){const e=await ja.ecdsa.generateEcdsaKeyData(s),t=await ja.ecdh.generateEcdhKeyData(s,e.ecdsaPrivateKey);this.keys.ecdsaPrivateKey=e.ecdsaPrivateKey,this.keys.ecdhPrivateKey=t.ecdhPrivateKey,delete e.ecdsaPrivateKey,delete t.ecdhPrivateKey,this.newEcKeyData={ecdsaKeyData:e,ecdhKeyData:t}}}async validateKey(){let e;if(this.keys.ecdsaPrivateKey&&!this.keys.dhPrivateKey)e=await ja.ecdsa.sign(this.keys.ecdsaPrivateKey,i.a.decode(this.validationMessage));else if(this.keys.dhPrivateKey){const t=await ja.diffieHellman.getSharedKeyWithServer(this.keys.dhPrivateKey);e=await ja.aesGcm.decrypt(t,this.encryptedValidationMessage),delete this.keys.dhPrivateKey}const t={validationMessage:i.a.encode(e),ecKeyData:this.newEcKeyData};return(await this.request("ValidateKey",t)).data}async request(e,t){const s=Ds()();this.requests[s]={};const a=this.watch(s);this.ws.send(JSON.stringify({requestId:s,action:e,params:t}));try{return await a}catch(t){throw t.status===m?new hs.TooManyRequests(t.data.retryDelay):new er(e,t)}}async watch(e){const t=await new Promise((t,s)=>{this.requests[e].promiseResolve=t,this.requests[e].promiseReject=s,setTimeout(()=>{s(new Error("timeout"))},3e4)});return delete this.requests[e],t}async rebuildBundle(e,t,s){const a=[];for(let s=0;s<e.bundleChunks[t].length;s++){const r=e.bundleChunks[t][s],n=Ls(r);a.push(n)}const r=(e=>{const t=e.map(e=>e.byteLength),s=t.reduce((e,t)=>e+t),a=new Uint8Array(s);let r=0;for(let s=0;s<e.length;s++)a.set(new Uint8Array(e[s]),r),r+=t[s];return{buffer:a.buffer,byteLengths:t}})(a).buffer,{encrypted:n,plaintextMetadata:o}=JSON.parse(Fs(r)),c=await ja.aesGcm.decrypt(e.dbKey,i.a.decode(s)),u=await ja.aesGcm.getKeyFromRawKey(c),d=await ja.aesGcm.decrypt(u,Ls(n)),h=Fs(d),[l,f]=await Promise.all([za(h),za(o)]),m=Qa(Qa({},JSON.parse(l)),JSON.parse(f));return delete e.bundleChunks[t],m}async uploadBundle(e,t,s,a,r){let n=0,i=0,o=[];for(;n<r.byteLength;){const c=r.slice(n,n+524288);if(o.push(Za(e,t,s,a,i,c)),10===o.length){try{await Promise.all(o)}catch(e){return 0}o=[]}i+=1,n+=524288}try{await Promise.all(o)}catch(e){return 0}return i}async initBundleUpload(e,t,s){const a={dbId:e,seqNo:t};let r;try{r=await this.request("InitBundleUpload",a)}catch(e){return{}}const{bundleId:n}=r.data,[o,c]=await ja.aesGcm.generateAndEncryptKeyEncryptionKey(s);return{bundleId:n,bundleEncryptionKey:o,encryptedBundleEncryptionKey:i.a.encode(c)}}orderedItems(e,t){const s=[];for(let a=0;a<t.array.length;a++){const r=t.array[a].itemId;s.push(e[r])}return s}prepareBundle(e){const{items:t,itemsIndex:s,itemsPlaintextMetadata:a}=e;return{encrypted:JSON.stringify({items:this.orderedItems(t,s),itemsIndex:s.array}),plaintextMetadata:JSON.stringify({itemsPlaintextMetadata:this.orderedItems(a,s)})}}async buildBundle(e){const t=e.dbId,s=e.lastSeqNo,a=e.dbKey,r=this.session.userId;if(e.bundledAtSeqNo&&e.bundledAtSeqNo>=s)return;e.bundledAtSeqNo=s;const n=this.prepareBundle(e),i=e.attributionEnabled?[...e.usernamesByUserId.keys()].join(","):void 0,{bundleId:o,bundleEncryptionKey:c,encryptedBundleEncryptionKey:u}=await this.initBundleUpload(t,s,a);if(!o)return;const[d,h]=await Promise.all([Ya(n.encrypted),Ya(n.plaintextMetadata)]),l=Ls(d),f=await ja.aesGcm.encrypt(c,l);n.encrypted=Fs(f),n.plaintextMetadata=h;const m=Ls(JSON.stringify(n)),p=await this.uploadBundle(r,t,s,o,m);if(!p)return;const w={dbId:t,seqNo:s,bundleId:o,writers:i,numChunks:p,encryptedBundleEncryptionKey:u};try{await this.request("CompleteBundleUpload",w)}catch(e){return}}buildUserResult({username:e,userId:t,authToken:s,email:a,profile:r,protectedProfile:n,usedTempPassword:i,changePassword:o,passwordChanged:c,userData:u}){const d={username:e,userId:t,authToken:s};if(a&&(d.email=a),r&&(d.profile=r),n&&(d.protectedProfile=n),i&&(d.usedTempPassword=i),o&&(d.changePassword=o),c&&(d.passwordChanged=c),u){const{creationDate:e,stripeData:t}=u;if(e&&(d.creationDate=e),t){const{paymentsMode:e,subscriptionStatus:s,cancelSubscriptionAt:a,subscriptionPlanId:r,trialExpirationDate:n}=t;e&&(d.paymentsMode=e),s&&(d.subscriptionStatus=s),a&&(d.cancelSubscriptionAt=a),r&&(d.subscriptionPlanId=r),n&&(d.trialExpirationDate=n)}}return d}handleUpdateUser(e){if(this.session&&this.session.userId===e.userId){this.session.username=e.username,this.userData=e.userData;const t=gs();t&&t({user:this.buildUserResult(Qa({authToken:this.session.authToken},e))})}}async rotateKeys(e,t){const{keySalts:s,ecKeyData:a}=t,{ecdsaKeyData:r,ecdhKeyData:n}=a;s.ecdsaKeyEncryptionKeySalt=r.ecdsaKeyEncryptionKeySalt,s.ecdhKeyEncryptionKeySalt=n.ecdhKeyEncryptionKeySalt,this.keys.salts=s,this.ecKeyData=Qa(Qa({},r),n),await this.setKeys(e),this.keys.init=!0}async authenticateShareToken(e,t){const s={shareTokenId:e};let a;try{a=await this.request("AuthenticateShareToken",s)}catch(e){if(e.response&&"ShareTokenNotFound"===e.response.data)throw new hs.ShareTokenNotFound;throw e}const{databaseId:r,shareTokenAuthKeyData:n,validationMessage:o}=a.data;let c;try{const e=i.a.decode(n.shareTokenEcdsaKeyEncryptionKeySalt),s=await ja.ecdsa.importEcdsaKeyEncryptionKeyFromMaster(t,e),a=i.a.decode(n.shareTokenEncryptedEcdsaPrivateKey),r=await ja.aesGcm.decrypt(s,a);c=await ja.ecdsa.getPrivateKeyFromRawPrivateKey(r)}catch(e){throw new hs.ShareTokenInvalid}const u=await ja.ecdsa.sign(c,i.a.decode(o));return{databaseId:r,validationMessage:o,signedValidationMessage:i.a.encode(u)}}};function ar(e,t){var s=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),s.push.apply(s,a)}return s}function rr(e){for(var t=1;t<arguments.length;t++){var s=null!=arguments[t]?arguments[t]:{};t%2?ar(Object(s),!0).forEach((function(t){r()(e,t,s[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(s)):ar(Object(s)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(s,t))}))}return e}const nr={local:!0,session:!0,none:!0},ir="Device not recognized. This temporary password can only be used to sign in from a device you've signed in from before.",or="Device not recognized. Forgot password only works from a device you've signed in from before.",cr=e=>{if(e.response){if("Domain not whitelisted"===e.response.data)throw new hs.DomainNotWhitelisted(window.location.origin);if("App ID not valid"===e.response.data)throw new hs.AppIdNotValid;if("UserNotFound"===e.response.data)throw new hs.UserNotFound;if(e.response.status===p)throw new hs.InternalServerError;if(e.response.status===g)throw new hs.Timeout}else if(e.message&&-1!==e.message.indexOf("timeout"))throw new hs.Timeout},ur=async(e,t,s,a)=>{try{await sr.connect(e,t,s,a)}catch(e){if(cr(e),"Web Socket already connected"===e.message)throw new hs.UserAlreadySignedIn(e.username);throw e}},dr=e=>{if(e.response&&"UsernameTooLong"===e.response.data.error)throw new hs.UsernameTooLong(e.response.data.maxLen);if(e.response&&"PasswordAttemptLimitExceeded"===e.response.data.error)throw new hs.PasswordAttemptLimitExceeded(e.response.data.delay)},hr=e=>{if(e.response&&e.response.data){const t=e.response.data;switch(t.error){case"SessionLengthTooShort":throw new hs.SessionLengthTooShort(t.minLen);case"SessionLengthTooLong":throw new hs.SessionLengthTooLong(t.maxLen)}}},lr=(e,t)=>{if(cr(e),dr(e),e.response){const s=e.response.data;switch(s){case"UsernameAlreadyExists":throw new hs.UsernameAlreadyExists(t);case"TrialExceededLimit":throw new hs.TrialExceededLimit;case"CurrentPasswordIncorrect":throw new hs.CurrentPasswordIncorrect}switch(s.error){case"EmailNotValid":throw new hs.EmailNotValid;case"ProfileMustBeObject":throw new hs.ProfileMustBeObject;case"ProfileKeyTooLong":throw new hs.ProfileKeyTooLong(s.maxLen,s.key);case"ProfileValueMustBeString":throw new hs.ProfileValueMustBeString(s.key,s.value);case"ProfileValueCannotBeBlank":throw new hs.ProfileValueCannotBeBlank(s.key);case"ProfileValueTooLong":throw new hs.ProfileValueTooLong(s.maxLen,s.key,s.value);case"ProfileHasTooManyKeys":throw new hs.ProfileHasTooManyKeys(s.maxKeys);case"ProfileCannotBeEmpty":throw new hs.ProfileCannotBeEmpty}}throw e},fr=e=>e&&60*e*60*1e3,mr=e=>{if("string"!=typeof e)throw new hs.UsernameMustBeString;if(0===e.length)throw new hs.UsernameCannotBeBlank},pr=e=>{if("string"!=typeof e)throw new hs.PasswordMustBeString;if(0===e.length)throw new hs.PasswordCannotBeBlank;if(e.length<6)throw new hs.PasswordTooShort(6);if(e.length>1e3)throw new hs.PasswordTooLong(1e3)},wr=e=>{if("object"!=typeof e)throw new hs.ParamsMustBeObject;if(!Ga(e,"username"))throw new hs.UsernameMissing;if(!Ga(e,"password"))throw new hs.PasswordMissing;if(mr(e.username),pr(e.password),Ga(e,"rememberMe")&&!nr[e.rememberMe])throw new hs.RememberMeValueNotValid(nr);if(Ga(e,"sessionLength")&&"number"!=typeof e.sessionLength)throw new hs.SessionLengthMustBeNumber},gr=async(e,t,s)=>{const a=ja.scrypt.generateSalt(),r=await ja.scrypt.hash(e,a,s),n=await ja.hkdf.importHkdfKeyFromString(r),o=ja.hkdf.generateSalt(),c=await ja.hkdf.getPasswordToken(n,o),u=ja.hkdf.generateSalt(),d=await ja.aesGcm.getPasswordBasedEncryptionKey(n,u),h=await ja.aesGcm.encrypt(d,t);return{passwordToken:c,passwordSalts:{passwordSalt:i.a.encode(a),passwordTokenSalt:i.a.encode(o)},passwordBasedBackup:{passwordBasedEncryptionKeySalt:i.a.encode(u),passwordEncryptedSeed:i.a.encode(h)}}},yr=async e=>{const t=await ja.hkdf.importHkdfKey(e),s=ja.hkdf.generateSalt(),a=ja.hkdf.generateSalt(),r={encryptionKeySalt:i.a.encode(s),hmacKeySalt:i.a.encode(a)},n=await ja.ecdsa.generateEcdsaKeyData(t),o=await ja.ecdh.generateEcdhKeyData(t,n.ecdsaPrivateKey);delete n.ecdsaPrivateKey,delete o.ecdhPrivateKey;return{ecKeyData:{ecdsaKeyData:n,ecdhKeyData:o},keySalts:r}},br=e=>{if("object"!=typeof e)throw new hs.ProfileMustBeObject;let t=!1;for(const s in e){t=!0;const a=e[s];if("string"!=typeof a)throw new hs.ProfileValueMustBeString(s,a);if(!a)throw new hs.ProfileValueCannotBeBlank(s)}if(!t)throw new hs.ProfileCannotBeEmpty},vr=async()=>{try{const e="GetPasswordSalts";return(await sr.request(e)).data}catch(e){throw cr(e),e}},Mr=async(e,t,s)=>{const{passwordSalt:a,passwordTokenSalt:r}=t,n=await ja.scrypt.hash(e,new Uint8Array(i.a.decode(a)),s),o=await ja.hkdf.importHkdfKeyFromString(n);return{passwordHkdfKey:o,passwordToken:await ja.hkdf.getPasswordToken(o,i.a.decode(r))}},Sr=async(e,t)=>{let s;try{const a=_s.getCurrentSession();if(!a)return{};const{signedIn:r,sessionId:n,creationDate:i,expirationDate:o,rememberMe:c}=a;s=a.username;const u=_s.getSeedString(e,s);if(!r||!u||new Date>new Date(o))return{lastUsedUsername:s};let d;try{d=await Us(n,t)}catch(e){if(cr(e),hr(e),e.response&&"Session invalid"===e.response.data)return{lastUsedUsername:s};throw e}const{userId:h,authToken:l,username:f,email:m,profile:p,protectedProfile:w}=d;if(f!==s&&(_s.saveSeedString(c,e,f,u),_s.removeSeedString(e,s)),_s.signInSession(c,f,n,i,d.expirationDate),sr.connectionResolved){if(sr.session.sessionId===n)return{user:sr.buildUserResult({username:f,userId:h,authToken:sr.session.authToken,email:m,profile:p,protectedProfile:w,userData:sr.userData})};throw new hs.UserAlreadySignedIn(sr.session.username)}const g=rr(rr({},a),{},{username:f,userId:h,authToken:l});return await ur(g,u,c),{user:sr.buildUserResult({username:f,userId:h,authToken:l,email:m,profile:p,protectedProfile:w,userData:sr.userData})}}catch(e){if("Invalid seed"===e.message)return{lastUsedUsername:s};throw cr(e),e}},Ir=async(e,t)=>{const s=_s.getSeedString(e,t);if(!s)throw new hs.KeyNotFound(or);const a=i.a.decode(s);return await ja.hkdf.importHkdfKey(a)};var Pr={signUp:async e=>{try{(e=>{if(wr(e),e.profile&&br(e.profile),e.email&&"string"!=typeof e.email)throw new hs.EmailNotValid})(e);const{password:t,profile:s,passwordHashAlgo:a,rememberMe:r="session"}=e,n=e.username.toLowerCase(),o=e.email&&e.email.toLowerCase(),c=ws(),u=await ja.generateSeed(),d=fr(e.sessionLength),{sessionId:h,creationDate:l,expirationDate:f,userId:m,authToken:p}=await(async(e,t,s,a,r,n,i)=>{const{passwordToken:o,passwordSalts:c,passwordBasedBackup:u}=await gr(t,s,a),{ecKeyData:d,keySalts:h}=await yr(s);try{return await Es(e,o,d,c,h,r,n,u,i)}catch(t){hr(t),lr(t,e)}})(n,t,u,a,o,s,d),w={username:n,userId:m,sessionId:h,creationDate:l,expirationDate:f,authToken:p},g=i.a.encode(u);return _s.saveSeedString(r,c,n,g),_s.signInSession(r,n,h,l,f),await ur(w,g,r),sr.buildUserResult({username:n,userId:m,authToken:p,email:o,profile:s,userData:sr.userData})}catch(e){switch(e.name){case"ParamsMustBeObject":case"UsernameMissing":case"UsernameAlreadyExists":case"UsernameCannotBeBlank":case"UsernameMustBeString":case"UsernameTooLong":case"PasswordMissing":case"PasswordCannotBeBlank":case"PasswordTooShort":case"PasswordTooLong":case"PasswordMustBeString":case"EmailNotValid":case"ProfileMustBeObject":case"ProfileCannotBeEmpty":case"ProfileHasTooManyKeys":case"ProfileKeyTooLong":case"ProfileValueMustBeString":case"ProfileValueCannotBeBlank":case"ProfileValueTooLong":case"RememberMeValueNotValid":case"SessionLengthMustBeNumber":case"SessionLengthTooShort":case"SessionLengthTooLong":case"TrialExceededLimit":case"AppIdNotSet":case"AppIdNotValid":case"DomainNotWhitelisted":case"UserAlreadySignedIn":case"ServiceUnavailable":throw e;default:throw new hs.UnknownServiceUnavailable(e)}}},signOut:async()=>{try{if(!sr.session.username)throw new hs.UserNotSignedIn;try{await sr.signOut()}catch(e){throw cr(e),e}}catch(e){switch(e.name){case"UserNotSignedIn":case"ServiceUnavailable":throw e;default:throw new hs.UnknownServiceUnavailable(e)}}},signIn:async e=>{try{wr(e);const t=e.username.toLowerCase(),{password:s,passwordHashAlgo:a,rememberMe:r="session"}=e,n=ws(),o=await(async e=>{try{return await Bs(e)}catch(e){if(cr(e),dr(e),e.response&&"User not found"===e.response.data)throw new hs.UsernameOrPasswordMismatch;throw e}})(t),{passwordHkdfKey:c,passwordToken:u}=await Mr(s,o,a),d=fr(e.sessionLength),h=await(async(e,t,s)=>{try{return await Ns(e,t,s)}catch(e){if(cr(e),dr(e),hr(e),e.response&&"Invalid password"===e.response.data)throw new hs.UsernameOrPasswordMismatch;if(e.response&&"User pending deletion"===e.response.data)throw new hs.UserPendingDeletion;throw e}})(t,u,d),{userId:l,email:f,profile:m,passwordBasedBackup:p,protectedProfile:w,usedTempPassword:g,changePassword:y}=h,b=rr(rr({},h.session),{},{username:t,userId:l});let v;if(!y){const e=_s.getSeedString(n,t);let s;if(!e&&g)throw new hs.KeyNotFound(ir);g||(s=await(async(e,t)=>{const{passwordBasedEncryptionKeySalt:s,passwordEncryptedSeed:a}=t,r=await ja.aesGcm.getPasswordBasedEncryptionKey(e,i.a.decode(s)),n=await ja.aesGcm.decrypt(r,i.a.decode(a));return i.a.encode(n)})(c,p),_s.saveSeedString(r,n,t,s)),v=s||e}_s.signInSession(r,t,b.sessionId,b.creationDate,b.expirationDate);try{await ur(b,v,r,y)}catch(e){if(g&&"Invalid seed"===e.message)throw new hs.KeyNotFound(ir);throw e}return sr.buildUserResult({username:t,userId:l,authToken:b.authToken,email:f,profile:m,protectedProfile:w,usedTempPassword:g,changePassword:y,userData:sr.userData})}catch(e){switch(e.name){case"ParamsMustBeObject":case"UsernameMissing":case"UsernameOrPasswordMismatch":case"UserPendingDeletion":case"UsernameCannotBeBlank":case"UsernameTooLong":case"UsernameMustBeString":case"PasswordMissing":case"PasswordCannotBeBlank":case"PasswordTooShort":case"PasswordTooLong":case"PasswordMustBeString":case"PasswordAttemptLimitExceeded":case"RememberMeValueNotValid":case"SessionLengthMustBeNumber":case"SessionLengthTooShort":case"SessionLengthTooLong":case"KeyNotFound":case"AppIdNotSet":case"AppIdNotValid":case"DomainNotWhitelisted":case"UserAlreadySignedIn":case"ServiceUnavailable":throw e;default:throw new hs.UnknownServiceUnavailable(e)}}},init:async e=>{try{if(!window.crypto.subtle)throw new hs.WebCryptoUnavailable;if("object"!=typeof e)throw new hs.ParamsMustBeObject;if(!Ga(e,"appId"))throw new hs.AppIdMissing;if("string"!=typeof e.appId)throw new hs.AppIdMustBeString;if(0===e.appId.length)throw new hs.AppIdCannotBeBlank;if(Ga(e,"updateUserHandler")&&"function"!=typeof e.updateUserHandler)throw new hs.UpdateUserHandlerMustBeFunction;if(Ga(e,"sessionLength")&&"number"!=typeof e.sessionLength)throw new hs.SessionLengthMustBeNumber;if(Ga(e,"allowServerSideEncryption")&&"boolean"!=typeof e.allowServerSideEncryption)throw new hs.AllowServerSideEncryptionMustBeBoolean;bs(e);return await Sr(e.appId,fr(e.sessionLength))}catch(e){switch(e.name){case"WebCryptoUnavailable":case"ParamsMustBeObject":case"AppIdMissing":case"AppIdAlreadySet":case"AppIdMustBeString":case"AppIdCannotBeBlank":case"AppIdNotValid":case"DomainNotWhitelisted":case"UpdateUserHandlerMustBeFunction":case"SessionLengthMustBeNumber":case"SessionLengthTooShort":case"SessionLengthTooLong":case"AllowServerSideEncryptionMustBeBoolean":case"UserAlreadySignedIn":case"ServiceUnavailable":throw e;default:throw new hs.UnknownServiceUnavailable(e)}}},updateUser:async e=>{try{if("object"!=typeof e)throw new hs.ParamsMustBeObject;if((e=>{if(!(Ga(e,"username")||Ga(e,"newPassword")||Ga(e,"email")||Ga(e,"profile")))throw new hs.ParamsMissing;const{username:t,currentPassword:s,newPassword:a,email:r,profile:n}=e;if(Ga(e,"username")&&mr(t),Ga(e,"newPassword")){if(!Ga(e,"currentPassword"))throw new hs.CurrentPasswordMissing;pr(s),pr(a)}if(r&&"string"!=typeof r)throw new hs.EmailNotValid;n&&br(n)})(e),sr.reconnecting)throw new hs.Reconnecting;if(!sr.connectionResolved)throw new hs.UserNotSignedIn;const t=sr.session.userId,s=e.newPassword&&!sr.keys.init&&sr.changePassword&&await ja.generateSeed(),a="UpdateUser",r=await(async(e,t)=>{if(e.username&&(e.username=e.username.toLowerCase()),e.newPassword){const[s,a,r]=await Promise.all([vr(),gr(e.newPassword,t||i.a.decode(sr.seedString)),t&&yr(t)]),{passwordToken:n}=await Mr(e.currentPassword,s,e.passwordHashAlgo);e.currentPasswordToken=n,delete e.currentPassword,e.passwordToken=a.passwordToken,e.passwordSalts=a.passwordSalts,e.passwordBasedBackup=a.passwordBasedBackup,delete e.newPassword,r&&(e.newKeyData=r)}return e.email?e.email=e.email.toLowerCase():Ga(e,"email")&&(e.email=!1),!e.profile&&Ga(e,"profile")&&(e.profile=!1),e})(rr({},e),s);if(sr.reconnecting)throw new hs.Reconnecting;if(!sr.connectionResolved)throw new hs.UserNotSignedIn;if(!sr.session||t!==sr.session.userId)throw new hs.ServiceUnavailable;try{r.username&&_s.saveSeedString(sr.rememberMe,ws(),r.username,sr.seedString);const e=(await sr.request(a,r)).data.updatedUser;if(sr.handleUpdateUser(e),s&&sr.session&&t===sr.session.userId){const t=i.a.encode(s);await sr.rotateKeys(t,r.newKeyData),_s.saveSeedString(sr.rememberMe,ws(),e.username,t);const{sessionId:a,creationDate:n,expirationDate:o}=sr.session;_s.signInSession(sr.rememberMe,e.username,a,n,o)}}catch(e){lr(e,r.username)}}catch(e){switch(e.name){case"ParamsMustBeObject":case"ParamsMissing":case"UsernameAlreadyExists":case"UsernameMustBeString":case"UsernameCannotBeBlank":case"UsernameTooLong":case"CurrentPasswordMissing":case"CurrentPasswordIncorrect":case"PasswordAttemptLimitExceeded":case"PasswordMustBeString":case"PasswordCannotBeBlank":case"PasswordTooShort":case"PasswordTooLong":case"EmailNotValid":case"ProfileMustBeObject":case"ProfileCannotBeEmpty":case"ProfileHasTooManyKeys":case"ProfileKeyTooLong":case"ProfileValueMustBeString":case"ProfileValueCannotBeBlank":case"ProfileValueTooLong":case"AppIdNotSet":case"AppIdNotValid":case"UserNotFound":case"UserNotSignedIn":case"TooManyRequests":case"ServiceUnavailable":throw e;default:throw new hs.UnknownServiceUnavailable(e)}}},deleteUser:async()=>{try{(()=>{if(sr.reconnecting)throw new hs.Reconnecting;if(!sr.keys.init&&sr.changePassword)throw new hs.UserMustChangePassword;if(!sr.keys.init)throw new hs.UserNotSignedIn})();const e=sr.session.username;_s.removeSeedString(ws(),e),_s.removeCurrentSession();try{const e="DeleteUser";await sr.request(e)}catch(e){throw cr(e),e}sr.close()}catch(e){switch(e.name){case"UserMustChangePassword":case"UserNotSignedIn":case"UserNotFound":case"TooManyRequests":case"ServiceUnavailable":throw e;default:throw new hs.UnknownServiceUnavailable(e)}}},forgotPassword:async e=>{try{if("object"!=typeof e)throw new hs.ParamsMustBeObject;if(Ga(e,"deleteEndToEndEncryptedData")&&"boolean"!=typeof e.deleteEndToEndEncryptedData)throw new hs.DeleteEndToEndEncryptedDataMustBeBoolean;if(!Ga(e,"username"))throw new hs.UsernameMissing;mr(e.username);const t=e.username.toLowerCase(),s=ws(),a="".concat(Va(ys()),"/api/auth/forgot-password?appId=").concat(s,"&username=").concat(encodeURIComponent(t),"&userbaseJsVersion=").concat(ps),r=new WebSocket(a+(Ga(e,"deleteEndToEndEncryptedData")?"&deleteEndToEndEncryptedData=".concat(e.deleteEndToEndEncryptedData):""));await new Promise((e,a)=>{setTimeout(()=>a(new hs.Timeout),15e3),r.onerror=()=>a(new hs.ServiceUnavailable),r.onmessage=async n=>{try{const o=JSON.parse(n.data);switch(o.route){case"ReceiveEncryptedToken":{const e=await Ir(s,t),a=new Uint8Array(o.encryptedForgotPasswordToken.data),n=await ja.diffieHellman.importKeyFromMaster(e,i.a.decode(o.dhKeySalt)),c=await ja.diffieHellman.getSharedKeyWithServer(n);let u;try{u=i.a.encode(await ja.aesGcm.decrypt(c,a))}catch(e){throw new hs.KeyNotFound(or)}r.send(JSON.stringify({action:"ForgotPassword",params:{forgotPasswordToken:u}}));break}case"ReceiveToken":{const e=await Ir(s,t),{ecdsaKeyEncryptionKeySalt:a,encryptedEcdsaPrivateKey:n,forgotPasswordToken:c}=o,u=await ja.ecdsa.importEcdsaKeyEncryptionKeyFromMaster(e,i.a.decode(a));let d;try{const e=await ja.aesGcm.decrypt(u,i.a.decode(n));d=await ja.ecdsa.getPrivateKeyFromRawPrivateKey(e)}catch(e){throw new hs.KeyNotFound(or)}const h=i.a.encode(await ja.ecdsa.sign(d,i.a.decode(c)));r.send(JSON.stringify({action:"ForgotPassword",params:{signedForgotPasswordToken:h}}));break}case"SuccessfullyForgotPassword":e();break;case"Error":{const e=o.data;switch(e.name){case"UsernameTooLong":throw new hs.UsernameTooLong(e.maxLen);case"AppIdNotValid":throw new hs.AppIdNotValid;case"UserNotFound":throw new hs.UserNotFound;case"UserEmailNotFound":throw new hs.UserEmailNotFound;default:throw o.status===p?new hs.ServiceUnavailable:new hs.UnknownServiceUnavailable(e)}}case"Ping":break;default:a(new Error("Received unknown message from userbase-server: ".concat(n.data)))}}catch(n){a(n)}}}),r.close()}catch(e){switch(e.name){case"ParamsMustBeObject":case"UsernameMissing":case"UsernameMustBeString":case"UsernameCannotBeBlank":case"UsernameTooLong":case"AppIdNotSet":case"AppIdNotValid":case"KeyNotFound":case"UserNotFound":case"UserEmailNotFound":case"ServiceUnavailable":throw e;default:throw new hs.UnknownServiceUnavailable(e)}}}},Er=s(12),Br=s.n(Er);function Nr(e,t){var s=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),s.push.apply(s,a)}return s}function Ur(e){for(var t=1;t<arguments.length;t++){var s=null!=arguments[t]?arguments[t]:{};t%2?Nr(Object(s),!0).forEach((function(t){r()(e,t,s[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(s)):Nr(Object(s)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(s,t))}))}return e}const Ar={"end-to-end":!0,"server-side":!0},Tr=()=>{if(sr.reconnecting)throw new hs.Reconnecting;if(!sr.keys.init&&sr.changePassword)throw new hs.UserMustChangePassword;if(!sr.keys.init||!Ar[sr.encryptionMode])throw new hs.UserNotSignedIn},kr=e=>{if(e.response){if("UserNotFound"===e.response.data)throw new hs.UserNotFound;if(e.response.status===p)throw new hs.InternalServerError;if(e.response.status===g)throw new hs.Timeout}else if(e.message&&-1!==e.message.indexOf("timeout"))throw new hs.Timeout};class Dr{constructor(e){this.startSeqNo=e,this.txSeqNo=null,this.transactions={},this.promiseResolve=null,this.promiseReject=null,this.index=null}getStartSeqNo(){return this.startSeqNo}getIndex(){return this.index}setIndex(e){this.index=e}async getResult(e){this.txSeqNo=e;const t=new Promise((e,t)=>{this.promiseResolve=e,this.promiseReject=t,setTimeout(()=>{t(new Error("timeout"))},3e4)});return this.verifyPromise(),t}verifyPromise(){(this.txSeqNo||0==this.txSeqNo)&&this.promiseResolve&&this.promiseReject&&this.transactions[this.txSeqNo]&&("Success"==this.transactions[this.txSeqNo]?this.promiseResolve():this.promiseReject(this.transactions[this.txSeqNo]))}addTransaction(e,t){this.transactions[e.seqNo]||(this.transactions[e.seqNo]=t,this.verifyPromise())}}class Kr{constructor(e,t,s,a){this.onChange=xr(e),this.items={},this.itemsPlaintextMetadata={},this.fileIds={};this.itemsIndex=new Br.a([],(e,t)=>e.seqNo<t.seqNo||e.seqNo===t.seqNo&&e.operationIndex<t.operationIndex?-1:e.seqNo>t.seqNo||e.seqNo===t.seqNo&&e.operationIndex>t.operationIndex?1:0),this.unverifiedTransactions=[],this.lastSeqNo=0,this.init=!1,this.dbKey=null,this.receivedMessage=t,this.usernamesByUserId=new Map,this.attributionEnabled=!1,this.shareTokenId=s,this.shareTokenHkdfKey=a,this.applyTransactionsQueue=new Ja,this.bundleChunks={}}async applyTransactions(e,t,s,a){for(let s=0;s<e.length;s++){const a=e[s],r=a.seqNo;if(r!==this.lastSeqNo+1){console.warn("Client attempted to apply transaction with seq no ".concat(r," when last seq no is ").concat(this.lastSeqNo));continue}const n=await this.applyTransaction(this.dbKey,a,t);this.lastSeqNo=r;for(let t=0;t<this.unverifiedTransactions.length;t++)!this.unverifiedTransactions[t]||r<this.unverifiedTransactions[t].getStartSeqNo()||this.unverifiedTransactions[t].addTransaction(e[s],n);this.init&&"Success"===n&&this.onChange(this.getItems())}this.init||(this.init=!0,this.dbId=s,this.dbNameHash=a,this.onChange(this.getItems()),this.receivedMessage())}async applyBundle(e,t){if(0===this.lastSeqNo){for(let t=0;t<e.itemsIndex.length;t++){const s=e.itemsIndex[t],a=e.itemsIndex[t].itemId,r=e.items[t],n=e.itemsPlaintextMetadata[t];r.file&&r.file.fileEncryptionKeyString&&(r.file.fileEncryptionKey=await ja.aesGcm.getKeyFromKeyString(r.file.fileEncryptionKeyString),this.fileIds[r.file.fileId]=a),this.items[a]=r,this.itemsPlaintextMetadata[a]=n,this.itemsIndex.insert(s)}this.lastSeqNo=t}else console.warn("Client attempted to apply bundle when last seq no is ".concat(this.lastSeqNo))}async applyTransaction(e,t,s){const a=t.seqNo,r=t.command;switch(r){case"Insert":try{const s=await ja.aesGcm.decryptJson(e,t.record),r=s.id,n=s.item,i=this.attributionFromTransaction(t),o=t.writeAccess;return this.validateInsert(r),this.applyInsert(r,a,n,i,o)}catch(e){return e}case"Update":try{const a=await ja.aesGcm.decryptJson(e,t.record),r=a.id,n=a.item,i=this.attributionFromTransaction(t),o=a.__v,c=t.writeAccess;return this.validateUpdate(r,o,i,s,c,"updateItem"),this.applyUpdate(r,n,o,i,c)}catch(e){return e}case"Delete":try{const a=await ja.aesGcm.decryptJson(e,t.record),r=a.id,n=this.attributionFromTransaction(t),i=a.__v;return this.validateUpdateOrDelete(r,i,n,s,"deleteItem"),this.applyDelete(r)}catch(e){return e}case"BatchTransaction":try{const r=t.operations,n=this.attributionFromTransaction(t),i=[];for(const t of r)i.push(t.record&&ja.aesGcm.decryptJson(e,t.record));const o=await Promise.all(i);return this.validateBatchTransaction(r,o,n,s),this.applyBatchTransaction(a,r,o,n)}catch(e){return e}case"UploadFile":try{const a=await ja.aesGcm.decrypt(e,i.a.decode(t.fileEncryptionKey)),r=await ja.aesGcm.getKeyFromRawKey(a),n=await ja.aesGcm.getKeyStringFromKey(r),o=await ja.aesGcm.decryptJson(r,t.fileMetadata),c=o.itemId,u=o.__v,{fileName:d,fileSize:h,fileType:l}=o,f=t.fileId,m=this.attributionFromTransaction(t);return this.validateUploadFile(c,u,m,s,"uploadFile"),this.applyUploadFile(c,m,u,r,n,d,f,h,l)}catch(e){return e}case"Rollback":return;default:return void console.warn("Unknown command: ".concat(r))}}attributionFromTransaction(e){if(this.attributionEnabled)return{timestamp:e.timestamp,userId:e.userId}}validateInsert(e){if(this.items[e])throw new hs.ItemAlreadyExists}validateUpdate(e,t,s,a,r,n){this.validateUpdateOrDelete(e,t,s,a,n);const{createdBy:i}=this.itemsPlaintextMetadata[e];if(r||!1===r){if(!i)return;const e=i.userId,t=s.userId;if(e!==t&&t!==a)throw new hs.WriteAccessParamNotAllowed}}validateUpdateOrDelete(e,t,s,a,r){if(!this.items[e])throw new hs.ItemDoesNotExist;if(t<=this.getItemVersionNumber(e))throw new hs.ItemUpdateConflict;this.validateAccessPermissions(e,s,a,r)}validateUploadFile(e,t,s,a,r){if(!this.items[e])throw new hs.ItemDoesNotExist;if(t<=this.getFileVersionNumber(e))throw new hs.FileUploadConflict;this.validateAccessPermissions(e,s,a,r)}validateAccessPermissions(e,t,s,a){const{createdBy:r,writeAccess:n}=this.itemsPlaintextMetadata[e];if(r&&t&&n){const e=r.userId,i=t.userId;let o=!1;const{onlyCreator:c,users:u}=n;if(i===s||i===e)o=!0;else if(!c&&u)for(const{userId:e}of u)if(o=i===e,o)break;if(!o)throw new hs.TransactionUnauthorized(a)}}itemExists(e){return Ga(this.items,e)}applyInsert(e,t,s,a,r,n){const i={seqNo:t};if("number"==typeof n&&(i.operationIndex=n),this.items[e]=Ur(Ur({},i),{},{record:s,__v:0}),this.itemsPlaintextMetadata[e]={createdBy:a,writeAccess:r},this.itemsIndex.insert(Ur(Ur({},i),{},{itemId:e})),r&&r.users)for(const{userId:e,username:t}of r.users)this.usernamesByUserId.set(e,t);return"Success"}applyUpdate(e,t,s,a,r){if(this.items[e].record=t,this.items[e].__v=s,this.itemsPlaintextMetadata[e].updatedBy=a,!1===r)delete this.itemsPlaintextMetadata[e].writeAccess;else if(r&&(this.itemsPlaintextMetadata[e].writeAccess=r,r.users))for(const{userId:e,username:t}of r.users)this.usernamesByUserId.set(e,t);return"Success"}applyUploadFile(e,t,s,a,r,n,i,o,c){const u=this.items[e].file;return u&&delete this.fileIds[u.fileId],this.items[e].file={fileName:n,fileId:i,fileSize:o,fileType:c,fileEncryptionKey:a,fileEncryptionKeyString:r,__v:s},this.itemsPlaintextMetadata[e].fileUploadedBy=t,this.fileIds[i]=e,"Success"}applyDelete(e){return this.itemsIndex.remove(this.items[e]),delete this.items[e],delete this.itemsPlaintextMetadata[e],"Success"}validateBatchTransaction(e,t,s,a){const r={};for(let n=0;n<e.length;n++){const i=e[n],{command:o,writeAccess:c}=i,u=t[n].id,d=t[n].__v;if(r[u])throw new hs.OperationsConflict;switch(r[u]=!0,o){case"Insert":this.validateInsert(u);break;case"Update":this.validateUpdate(u,d,s,a,c,o);break;case"Delete":this.validateUpdateOrDelete(u,d,s,a,o)}}}applyBatchTransaction(e,t,s,a){for(let r=0;r<t.length;r++){const n=t[r],i=s[r].id,o=s[r].item,c=s[r].__v,u=n.writeAccess;switch(n.command){case"Insert":this.applyInsert(i,e,o,a,u,r);break;case"Update":this.applyUpdate(i,o,c,a,u);break;case"Delete":this.applyDelete(i,c)}}return"Success"}registerUnverifiedTransaction(){const e=new Dr(this.lastSeqNo),t=this.unverifiedTransactions.push(e);return e.setIndex(t-1),e}unregisterUnverifiedTransaction(e){delete this.unverifiedTransactions[e.getIndex()]}getItems(){const e=[];for(let t=0;t<this.itemsIndex.array.length;t++){const s=this.itemsIndex.array[t].itemId,a={itemId:s,item:this.items[s].record};if(this.items[s].file){const{fileId:e,fileName:t,fileSize:r}=this.items[s].file;a.fileId=e,a.fileName=t,a.fileSize=r}for(const e of["createdBy","updatedBy","fileUploadedBy"])if(this.itemsPlaintextMetadata[s][e]){const{timestamp:t,userId:r}=this.itemsPlaintextMetadata[s][e],n={timestamp:t},i=this.usernamesByUserId.get(r);null==i?n.userDeleted=!0:n.username=i,a[e]=n}if(this.itemsPlaintextMetadata[s].writeAccess){const{onlyCreator:e,users:t}=this.itemsPlaintextMetadata[s].writeAccess,r={};if(e&&(r.onlyCreator=e),t){r.users=[];for(const{userId:e}of t){const t=this.usernamesByUserId.get(e);t&&r.users.push({username:t})}}a.writeAccess=r}e.push(a)}return e}getItemVersionNumber(e){return this.items[e].__v}getFileVersionNumber(e){return this.items[e].file&&this.items[e].file.__v}async decryptShareTokenEncryptedDbKey(e,t){const s=await ja.aesGcm.importKeyFromMaster(this.shareTokenHkdfKey,i.a.decode(t));return await ja.aesGcm.decryptString(s,e)}}const xr=e=>t=>{try{e(t)}catch(e){console.error("There was an error in your changeHandler.\n\n",e)}},Rr=(e,t,s)=>{e.onChange=xr(t);const a=e.receivedMessage;return e.receivedMessage=()=>{a(),s()},!!e.init&&(e.onChange(e.getItems()),e.receivedMessage(),!0)},Or=e=>{const t=e.slice(0,36),s=Fs(t,!0);if(!s||36!==s.length)throw new hs.ShareTokenInvalid;return s},Cr=async(e,t,s)=>{let a,r;try{a=(e=>{const t=i.a.decode(e);return{shareTokenId:Or(t),shareTokenSeed:t.slice(36)}})(e),r=await ja.hkdf.importHkdfKey(a.shareTokenSeed)}catch(e){throw new hs.ShareTokenInvalid}const{shareTokenId:n}=a,{databaseId:o,validationMessage:c,signedValidationMessage:u}=await sr.authenticateShareToken(n,r);sr.state.shareTokenIdToDbId[n]=o,await _r(o,t,s,n,r,c,u)},_r=async(e,t,s,a,r,n,i)=>{const o=sr.state.databasesByDbId[e];if(o){if(Rr(o,t,s))return}else sr.state.databasesByDbId[e]=new Kr(t,s,a,r);const c={databaseId:e,validationMessage:n,signedValidationMessage:i};await sr.request("OpenDatabaseByDatabaseId",c)},Fr=async(e,t)=>{try{let s,a;const r=new Promise((e,t)=>{s=e,a=setTimeout(()=>t(new Error("timeout")),3e4)}),{dbNameHash:n,newDatabaseParams:i,databaseId:o,shareToken:c}=t;try{n?await(async(e,t,s,a)=>{const r=sr.state.databases[e];if(r){if(Rr(r,s,a))return}else sr.state.databases[e]=new Kr(s,a);const n={dbNameHash:e,newDatabaseParams:t};await sr.request("OpenDatabase",n)})(n,i,e,s):o?await _r(o,e,s):c&&await Cr(c,e,s),await r}catch(e){if(clearTimeout(a),e.response&&e.response.data){const t=e.response.data;if("Database already creating"===t)throw new hs.DatabaseAlreadyOpening;if("Database is owned by user"===t){if(o)throw new hs.DatabaseIdNotAllowedForOwnDatabase;if(c)throw new hs.ShareTokenNotAllowedForOwnDatabase}else if("Database key not found"===t||"Database not found"===t)throw new hs.DatabaseNotFound;switch(t.name){case"SubscriptionNotFound":throw new hs.SubscriptionNotFound;case"SubscriptionInactive":throw new hs.SubscriptionInactive(t.subscriptionStatus);case"TrialExpired":throw new hs.TrialExpired}}throw e}}catch(e){throw kr(e),e}},Lr=e=>{if("server-side"===e&&!Ms())throw new hs.ServerSideEncryptionNotEnabledInClient},jr=e=>{if("object"!=typeof e)throw new hs.ParamsMustBeObject;if(Ga(e,"databaseName")){if((e=>{if("string"!=typeof e)throw new hs.DatabaseNameMustBeString;if(0===e.length)throw new hs.DatabaseNameCannotBeBlank;if(e.length>100)throw new hs.DatabaseNameTooLong(100)})(e.databaseName),Ga(e,"databaseId"))throw new hs.DatabaseIdNotAllowed;if(Ga(e,"shareToken"))throw new hs.ShareTokenNotAllowed;if(!e.allowVerifiedUsersDatabase&&"__userbase_verified_users"===e.databaseName)throw new hs.DatabaseNameRestricted("__userbase_verified_users")}else if(Ga(e,"databaseId")){if((e=>{if("string"!=typeof e)throw new hs.DatabaseIdMustBeString;if(0===e.length)throw new hs.DatabaseIdCannotBeBlank;if(36!==e.length)throw new hs.DatabaseIdInvalidLength(36)})(e.databaseId),Ga(e,"shareToken"))throw new hs.ShareTokenNotAllowed}else{if(!Ga(e,"shareToken"))throw new hs.DatabaseNameMissing;if("string"!=typeof e.shareToken)throw new hs.ShareTokenInvalid}if(Ga(e,"encryptionMode")&&!Ar[e.encryptionMode])throw new hs.EncryptionModeNotValid(Ar);Tr()},qr=async e=>{try{if(jr(e),!Ga(e,"changeHandler"))throw new hs.ChangeHandlerMissing;const{databaseName:t,databaseId:s,shareToken:a,changeHandler:r,encryptionMode:n=sr.encryptionMode}=e;if("function"!=typeof r)throw new hs.ChangeHandlerMustBeFunction;if(Lr(n),t){const e="server-side"===n?t:sr.state.dbNameToHash[t]||await ja.hmac.signString(sr.keys.hmacKey,t);"end-to-end"===n&&(sr.state.dbNameToHash[t]=e);const s={dbNameHash:e,newDatabaseParams:await(async(e,t)=>{const s=Ds()(),a=await ja.aesGcm.generateKey(),r=await ja.aesGcm.getKeyStringFromKey(a),[n,i]=await Promise.all([ja.aesGcm.encryptString(sr.keys.encryptionKey,r),ja.aesGcm.encryptString(a,e)]),o={dbId:s,encryptedDbKey:n,encryptedDbName:i,attribution:!0};return"server-side"===t&&(o.plaintextDbKey=r),o.fingerprint=await ln(),o})(t,n)};await Fr(r,s)}else if(s){const e={databaseId:s};await Fr(r,e)}else{const e={shareToken:a};await Fr(r,e)}}catch(e){switch(e.name){case"ParamsMustBeObject":case"DatabaseAlreadyOpening":case"DatabaseNameMustBeString":case"DatabaseNameMissing":case"DatabaseNameCannotBeBlank":case"DatabaseNameTooLong":case"DatabaseNameRestricted":case"DatabaseIdMustBeString":case"DatabaseIdCannotBeBlank":case"DatabaseIdInvalidLength":case"DatabaseIdNotAllowed":case"DatabaseIdNotAllowedForOwnDatabase":case"ShareTokenNotAllowed":case"ShareTokenInvalid":case"ShareTokenNotFound":case"ShareTokenNotAllowedForOwnDatabase":case"DatabaseNotFound":case"ChangeHandlerMissing":case"ChangeHandlerMustBeFunction":case"EncryptionModeNotValid":case"ServerSideEncryptionNotEnabledInClient":case"UserMustChangePassword":case"UserNotSignedIn":case"UserNotFound":case"SubscriptionNotFound":case"SubscriptionInactive":case"TrialExpired":case"TooManyRequests":case"ServiceUnavailable":throw e;default:throw new hs.UnknownServiceUnavailable(e)}}},Vr=(e,t,s,a="end-to-end")=>{Lr(a);const r=s&&Or(i.a.decode(s)),n="server-side"===a?e:sr.state.dbNameToHash[e],o=e?sr.state.databases[n]:sr.state.databasesByDbId[t||sr.state.shareTokenIdToDbId[r]];if(!o||!o.init)throw new hs.DatabaseNotOpen;return o},Hr=async e=>{try{jr(e);const t=Vr(e.databaseName,e.databaseId,e.shareToken,e.encryptionMode||sr.encryptionMode),s="Insert",a=await Gr(t,e);await zr(t,s,a)}catch(e){switch(e.name){case"ParamsMustBeObject":case"DatabaseNotOpen":case"DatabaseNameMissing":case"DatabaseNameMustBeString":case"DatabaseNameCannotBeBlank":case"DatabaseNameTooLong":case"DatabaseNameRestricted":case"DatabaseIdMustBeString":case"DatabaseIdCannotBeBlank":case"DatabaseIdInvalidLength":case"DatabaseIdNotAllowed":case"ShareTokenNotAllowed":case"ShareTokenInvalid":case"DatabaseIsReadOnly":case"EncryptionModeNotValid":case"ServerSideEncryptionNotEnabledInClient":case"ItemIdMustBeString":case"ItemIdCannotBeBlank":case"ItemIdTooLong":case"ItemMissing":case"ItemInvalid":case"ItemTooLarge":case"ItemAlreadyExists":case"UserMustChangePassword":case"UserNotSignedIn":case"UserNotFound":case"TooManyRequests":case"ServiceUnavailable":throw e;default:throw new hs.UnknownServiceUnavailable(e)}}},Gr=async(e,t)=>{if(!Ga(t,"item"))throw new hs.ItemMissing;const{item:s,itemId:a,writeAccess:r}=t;if(Ga(t,"itemId")){if("string"!=typeof a)throw new hs.ItemIdMustBeString;if(0===a.length)throw new hs.ItemIdCannotBeBlank;if(a.length>100)throw new hs.ItemIdTooLong(100)}const n=JSON.stringify(s);if(!n)throw new hs.ItemInvalid;if(Ha(n)>10240)throw new hs.ItemTooLarge(10);const i=a||Ds()(),o={id:i,item:s};return{itemKey:await ja.hmac.signString(sr.keys.hmacKey,i),encryptedItem:await ja.aesGcm.encryptJson(e.dbKey,o),writeAccess:r}},Jr=async e=>{try{jr(e);const t=Vr(e.databaseName,e.databaseId,e.shareToken,e.encryptionMode||sr.encryptionMode),s="Update",a=await Wr(t,e);await zr(t,s,a)}catch(e){switch(e.name){case"ParamsMustBeObject":case"DatabaseNotOpen":case"DatabaseNameMissing":case"DatabaseNameMustBeString":case"DatabaseNameCannotBeBlank":case"DatabaseNameTooLong":case"DatabaseNameRestricted":case"DatabaseIdMustBeString":case"DatabaseIdCannotBeBlank":case"DatabaseIdInvalidLength":case"DatabaseIdNotAllowed":case"ShareTokenNotAllowed":case"ShareTokenInvalid":case"DatabaseIsReadOnly":case"EncryptionModeNotValid":case"ServerSideEncryptionNotEnabledInClient":case"ItemIdMissing":case"ItemIdMustBeString":case"ItemIdCannotBeBlank":case"ItemIdTooLong":case"ItemMissing":case"ItemInvalid":case"ItemTooLarge":case"ItemDoesNotExist":case"ItemUpdateConflict":case"WriteAccessParamNotAllowed":case"TransactionUnauthorized":case"UserMustChangePassword":case"UserNotSignedIn":case"UserNotFound":case"TooManyRequests":case"ServiceUnavailable":throw e;default:throw new hs.UnknownServiceUnavailable(e)}}},Wr=async(e,t)=>{if(!Ga(t,"item"))throw new hs.ItemMissing;if(!Ga(t,"itemId"))throw new hs.ItemIdMissing;!t.writeAccess&&Ga(t,"writeAccess")&&(t.writeAccess=!1);const{item:s,itemId:a,writeAccess:r}=t;if("string"!=typeof a)throw new hs.ItemIdMustBeString;if(0===a.length)throw new hs.ItemIdCannotBeBlank;if(a.length>100)throw new hs.ItemIdTooLong(100);if(!e.itemExists(a))throw new hs.ItemDoesNotExist;const n=JSON.stringify(s);if(!n)throw new hs.ItemInvalid;if(Ha(n)>10240)throw new hs.ItemTooLarge(10);const i={id:a,item:s,__v:e.getItemVersionNumber(a)+1};return{itemKey:await ja.hmac.signString(sr.keys.hmacKey,a),encryptedItem:await ja.aesGcm.encryptJson(e.dbKey,i),writeAccess:r}},Yr=async(e,t)=>{if(!Ga(t,"itemId"))throw new hs.ItemIdMissing;const{itemId:s}=t;if("string"!=typeof s)throw new hs.ItemIdMustBeString;if(0===s.length)throw new hs.ItemIdCannotBeBlank;if(s.length>100)throw new hs.ItemIdTooLong(100);if(!e.itemExists(s))throw new hs.ItemDoesNotExist;const a={id:s,__v:e.getItemVersionNumber(s)+1};return{itemKey:await ja.hmac.signString(sr.keys.hmacKey,s),encryptedItem:await ja.aesGcm.encryptJson(e.dbKey,a)}},zr=async(e,t,s)=>{try{const a=e.registerUnverifiedTransaction(),r=Ur(Ur({},s),{},{dbId:e.dbId,dbNameHash:e.dbNameHash}),n=(await sr.request(t,r)).data.sequenceNo;return await a.getResult(n),e.unregisterUnverifiedTransaction(a),n}catch(e){if(kr(e),e.response){if("DatabaseIsReadOnly"===e.response.data.name)throw new hs.DatabaseIsReadOnly;if("UserNotFound"===e.response.data.message)throw new hs.UserNotFound(e.response.data.username)}throw e}},Zr=async(e,t,s,a,r,n,i,o)=>{const c=await(async e=>{const t=new FileReader;return new Promise((s,a)=>{t.onload=e=>{e.target.error?a(e.target.error):s(e.target.result)},t.readAsArrayBuffer(e)})})(t),[u,d]=await ja.aesGcm.generateAndEncryptKeyEncryptionKey(r),h=await ja.aesGcm.encrypt(u,c),l={dbId:s,chunkNumber:n,fileId:a,chunk:Fs(new Uint8Array(h)),chunkEncryptionKey:Fs(new Uint8Array(d))},f=(async(e,t,s,a)=>{await e,t.bytesTransferred+=a,s&&s(Ur({},t))})(sr.request("UploadFileChunk",l),i,o,t.size);e.push(f),10===e.length&&(await Promise.all(e),e.length=0)},Xr=async(e,t,s,a)=>{try{const r="GetChunk",n={dbId:e,fileId:t,chunkNumber:s},i=(await sr.request(r,n)).data,o=new Uint8Array(new Uint16Array(Ls(i.chunk))).buffer,c=new Uint8Array(new Uint16Array(Ls(i.chunkEncryptionKey))).buffer,u=await ja.aesGcm.decrypt(a,c),d=await ja.aesGcm.getKeyFromRawKey(u);return await ja.aesGcm.decrypt(d,o)}catch(e){throw kr(e),e}},Qr=async(e,t,s)=>{const{username:a,senderUsername:r,verificationValues:n}=s,{sentSignature:o,receivedSignature:c,senderEcdsaPublicKey:u}=n,d=t[a]&&t[a].record.fingerprint,h=i.a.decode(u),l=t[r]&&t[r].record.fingerprint||await hn(h),f=await ja.ecdsa.getPublicKeyFromRawPublicKey(h),m=await rn(e,d),p=await ja.ecdsa.verifyString(f,o,m),w=await ja.ecdsa.getPublicKeyFromRawPublicKey(i.a.decode(n.recipientEcdsaPublicKey)),g=await rn(e,l),y=await ja.ecdsa.verifyString(w,c,g);return p&&y},$r=async(e,t,s,a,r)=>{const{mySentSignature:n,myReceivedSignature:o}=r,c=await rn(e,t),u=await ja.ecdsa.verifyString(a,o,c);if(!u)return u;const d=await rn(e,s),h=await ja.ecdsa.getPublicKeyFromRawPublicKey(i.a.decode(r.mySenderEcdsaPublicKey));return await ja.ecdsa.verifyString(h,n,d)&&u},en=async(e,t,s,a,r)=>{const{sentSignature:n,receivedSignature:o}=r,c=await rn(e,t),u=await ja.ecdsa.verifyString(a,n,c);if(!u)return u;const d=await rn(e,s),h=await ja.ecdsa.getPublicKeyFromRawPublicKey(i.a.decode(r.recipientEcdsaPublicKey)),l=await ja.ecdsa.verifyString(h,o,d);return u&&l},tn=async(e,t,s,a,r)=>{const n=await ja.ecdsa.getPublicKeyFromPrivateKey(sr.keys.ecdsaPrivateKey),i=await ln();for(let o=0;o<t.length;o++){const c=t[o],{username:u,isOwner:d,senderUsername:h,verificationValues:l}=c;try{const a=s[u]&&s[u].record.fingerprint,f=l.isChild,m=r===u;if(a)if(f)t[o].verified=await en(e,a,i,n,l);else if(m){const r=await $r(e,a,i,n,l);if(r&&h){const a=await Qr(e,s,c);t[o].verified=a}else t[o].verified=r}else if(d)t[o].verified=d;else{const a=await Qr(e,s,c);t[o].verified=a}}catch(e){}delete t[o].senderUsername,d||(l&&l.isChild?t[o].receivedFromUsername=a:h&&(t[o].receivedFromUsername=h)),delete t[o].verificationValues}return t},sn=async(e,t,s,a,r)=>{const{databaseId:n,databaseNameHash:o,isOwner:c,readOnly:u,resharingAllowed:d,senderUsername:h}=e;let l,f;if(e.encryptedDbKey||e.plaintextDbKey){const s=e.plaintextDbKey||await ja.aesGcm.decryptString(t,e.encryptedDbKey);if(l=await ja.aesGcm.getKeyFromKeyString(s),f=await ja.aesGcm.decryptString(l,e.databaseName),c&&"__userbase_verified_users"===f)return null}else{if(e.wrappedDbKey)return null;{let a;try{const{ephemeralPublicKey:t,signedEphemeralPublicKey:r,sharedEncryptedDbKey:n}=e;a=i.a.decode(e.senderEcdsaPublicKey);const o=await ja.ecdsa.getPublicKeyFromRawPublicKey(a);if(!await ja.ecdsa.verify(o,i.a.decode(r),i.a.decode(t)))throw new hs.ServiceUnavailable;const c=await ja.ecdh.getPublicKeyFromRawPublicKey(i.a.decode(t)),u=await ja.ecdh.computeSharedKeyEncryptionKey(c,s),d=await ja.aesGcm.decryptString(u,n);l=await ja.aesGcm.getKeyFromKeyString(d),f=await ja.aesGcm.decryptString(l,e.databaseName)}catch(e){return null}const r=await hn(a),n=await nn(l,r),c=await ja.aesGcm.getKeyStringFromKey(l),u="SaveDatabase",d={databaseNameHash:o,encryptedDbKey:await ja.aesGcm.encryptString(t,c),receivedSignature:n};sr.request(u,d)}}const m={databaseName:f,databaseId:n,isOwner:c,readOnly:u,resharingAllowed:d,encryptionMode:e.plaintextDbKey?"server-side":"end-to-end"},p=await(async(e,t,s,a,r,n)=>{const i=[],o={databaseId:e,databaseNameHash:t};let c=await sr.request("GetDatabaseUsers",o);for(i.push(...await tn(s,c.data.users,a,r,n));c.data.nextPageTokenLessThanUserId||c.data.nextPageTokenMoreThanUserId;)o.nextPageTokenLessThanUserId=c.data.nextPageTokenLessThanUserId,o.nextPageTokenMoreThanUserId=c.data.nextPageTokenMoreThanUserId,c=await sr.request("GetDatabaseUsers",o),i.push(...await tn(s,c.data.users,a,r,n));return i})(n,o,l,a,r,h);return c||(e=>{for(let t=0;t<e.length;t++){if(e[t].isOwner)return!0}return!1})(p)?(m.users=p,!c&&h&&(m.receivedFromUsername=h),m):null},an=async(e,t,s="end-to-end")=>{let a;Lr(s);try{a=Vr(e,t,null,s)}catch(r){const n="GetDatabases",i=e?{dbNameHash:"server-side"===s?e:await ja.hmac.signString(sr.keys.hmacKey,e)}:{databaseId:t},o=(await sr.request(n,i)).data.databases;if(!o||!o.length)throw new hs.DatabaseNotFound;a=o[0],a.dbNameHash=a.databaseNameHash,a.dbId=a.databaseId}return a},rn=async(e,t)=>{const s=await ja.aesGcm.getRawKeyFromKey(e),a=await ja.sha256.hash(s),r=await ja.hmac.importKeyFromRawBits(a);return await ja.hmac.signString(r,t)},nn=async(e,t)=>{const s=await rn(e,t);return await ja.ecdsa.signString(sr.keys.ecdsaPrivateKey,s)},on=async e=>{let t;return e.dbKey?t=await ja.aesGcm.getKeyStringFromKey(e.dbKey):(t=e.plaintextDbKey||await ja.aesGcm.decryptString(sr.keys.encryptionKey,e.encryptedDbKey),e.dbKey=await ja.aesGcm.getKeyFromKeyString(t)),t},cn=async(e,t,s,a,r)=>{const{databaseName:n,databaseId:o}=e,c=e.username.toLowerCase();try{const[e,u,d]=await Promise.all([Ts(c),a&&fn(),an(n,o,r)]);if(!e.ecdhPublicKey||!e.ecdsaPublicKey)throw new hs.UserUnableToReceiveDatabase;const h=i.a.decode(e.ecdsaPublicKey),l=await hn(h);a&&await(async(e,t,s)=>{let a,r;const n=Object.keys(s);for(let i=0;i<n.length;i++){const o=n[i],c=s[o].record.fingerprint;if(e===o&&t===c){a=c;break}c===t&&(r=!0)}if(!a&&r)throw new hs.UserMustBeReverified;if(!a)throw new hs.UserNotVerified})(c,l,u);const f=await ja.ecdsa.getPublicKeyFromRawPublicKey(h),{signedEcdhPublicKey:m,ecdhPublicKey:p}=e;if(!await ja.ecdsa.verify(f,i.a.decode(m),i.a.decode(p)))throw new hs.ServiceUnavailable;const w=await ja.ecdh.getPublicKeyFromRawPublicKey(i.a.decode(e.ecdhPublicKey)),g=await ja.ecdh.generateKeyPair(),y=await ja.ecdh.getRawPublicKeyFromPublicKey(g.publicKey),b=await ja.ecdsa.sign(sr.keys.ecdsaPrivateKey,y),v=await ja.ecdh.computeSharedKeyEncryptionKey(w,g.privateKey),M=await on(d),S=await ja.aesGcm.encryptString(v,M),I="ShareDatabase",P={databaseId:d.dbId,databaseNameHash:d.dbNameHash,username:c,readOnly:t,resharingAllowed:s,sharedEncryptedDbKey:S,ephemeralPublicKey:i.a.encode(y),signedEphemeralPublicKey:i.a.encode(b),sentSignature:await nn(d.dbKey,l),recipientEcdsaPublicKey:e.ecdsaPublicKey};await sr.request(I,P)}catch(e){if(kr(e),e.response&&e.response.data)switch(e.response.data.message){case"SharingWithSelfNotAllowed":throw new hs.SharingWithSelfNotAllowed;case"DatabaseNotFound":throw new hs.DatabaseNotFound;case"ResharingNotAllowed":throw new hs.ResharingNotAllowed("Must have permission to reshare the database with another user");case"ResharingWithWriteAccessNotAllowed":throw new hs.ResharingWithWriteAccessNotAllowed;case"UserNotFound":throw new hs.UserNotFound;case"DatabaseAlreadyShared":return}throw e}},un=e=>{if("string"!=typeof e)throw new hs.UsernameMustBeString;if(0===e.length)throw new hs.UsernameCannotBeBlank},dn=e=>{if(Ga(e,"shareToken"))throw new hs.ShareTokenNotAllowed;if(Ga(e,"username")&&un(e.username),Ga(e,"readOnly")&&"boolean"!=typeof e.readOnly)throw new hs.ReadOnlyMustBeBoolean;if(Ga(e,"resharingAllowed")&&"boolean"!=typeof e.resharingAllowed)throw new hs.ResharingAllowedMustBeBoolean;if(Ga(e,"requireVerified")&&"boolean"!=typeof e.requireVerified)throw new hs.RequireVerifiedMustBeBoolean},hn=async e=>{const t=await ja.sha256.hash(e);return i.a.encode(t)},ln=async()=>{const e=await ja.ecdsa.getPublicKeyFromPrivateKey(sr.keys.ecdsaPrivateKey),t=await ja.ecdsa.getRawPublicKeyFromPublicKey(e);return await hn(t)},fn=async()=>{await qr({databaseName:"__userbase_verified_users",changeHandler:()=>{},allowVerifiedUsersDatabase:!0,encryptionMode:"end-to-end"});const e=sr.state.dbNameToHash.__userbase_verified_users;return sr.state.databases[e].items};var mn={openDatabase:qr,getDatabases:async e=>{try{void 0!==e&&jr(e),Tr();const{encryptionKey:t,ecdhPrivateKey:s}=sr.keys,a=sr.session.username;if(e&&Ga(e,"shareToken"))throw new hs.ShareTokenNotAllowed;const r=e&&e.encryptionMode||sr.encryptionMode;Lr(r);try{const n=[],i="GetDatabases",o=e&&{databaseId:e.databaseId,dbNameHash:"server-side"===r?e.databaseName:e.databaseName&&await ja.hmac.signString(sr.keys.hmacKey,e.databaseName)};let[c,u]=await Promise.all([sr.request(i,o),fn()]),d=await Promise.all(c.data.databases.map(e=>sn(e,t,s,u,a)));for(n.push(...d);c.data.nextPageToken;){const e={nextPageToken:c.data.nextPageToken};c=await sr.request(i,e),d=await Promise.all(c.data.databases.map(e=>sn(e,t,s,u,a))),n.push(...d)}return{databases:n.filter(e=>null!==e)}}catch(e){throw kr(e),e}}catch(e){switch(e.name){case"ParamsMustBeObject":case"DatabaseNameMustBeString":case"DatabaseNameCannotBeBlank":case"DatabaseNameTooLong":case"DatabaseNameRestricted":case"DatabaseIdMustBeString":case"DatabaseIdCannotBeBlank":case"DatabaseIdInvalidLength":case"DatabaseIdNotAllowed":case"ShareTokenNotAllowed":case"EncryptionModeNotValid":case"ServerSideEncryptionNotEnabledInClient":case"UserMustChangePassword":case"UserNotSignedIn":case"ServiceUnavailable":throw e;default:throw new hs.UnknownServiceUnavailable(e)}}},insertItem:Hr,updateItem:Jr,deleteItem:async e=>{try{jr(e);const t=Vr(e.databaseName,e.databaseId,e.shareToken,e.encryptionMode||sr.encryptionMode),s="Delete",a=await Yr(t,e);await zr(t,s,a)}catch(e){switch(e.name){case"ParamsMustBeObject":case"DatabaseNotOpen":case"DatabaseNameMissing":case"DatabaseNameMustBeString":case"DatabaseNameCannotBeBlank":case"DatabaseNameTooLong":case"DatabaseNameRestricted":case"DatabaseIdMustBeString":case"DatabaseIdCannotBeBlank":case"DatabaseIdInvalidLength":case"DatabaseIdNotAllowed":case"ShareTokenNotAllowed":case"ShareTokenInvalid":case"DatabaseIsReadOnly":case"EncryptionModeNotValid":case"ServerSideEncryptionNotEnabledInClient":case"ItemIdMissing":case"ItemIdMustBeString":case"ItemIdCannotBeBlank":case"ItemIdTooLong":case"ItemDoesNotExist":case"ItemUpdateConflict":case"TransactionUnauthorized":case"UserMustChangePassword":case"UserNotSignedIn":case"UserNotFound":case"TooManyRequests":case"ServiceUnavailable":throw e;default:throw new hs.UnknownServiceUnavailable(e)}}},putTransaction:async e=>{try{if(jr(e),!Ga(e,"operations"))throw new hs.OperationsMissing;const{databaseName:t,databaseId:s,shareToken:a,operations:r,encryptionMode:n=sr.encryptionMode}=e;if(!Array.isArray(r))throw new hs.OperationsMustBeArray;const i=Vr(t,s,a,n),o="BatchTransaction",c=await Promise.all(r.map(e=>{const t=e.command;switch(t){case"Insert":return Gr(i,e);case"Update":return Wr(i,e);case"Delete":return Yr(i,e);default:throw new hs.CommandNotRecognized(t)}})),u=await Promise.all(c),d={operations:r.map((e,t)=>Ur({command:e.command},u[t]))};try{await zr(i,o,d)}catch(e){if(e.response&&"OperationsExceedLimit"===e.response.data.error)throw new hs.OperationsExceedLimit(e.response.data.limit);throw e}}catch(e){switch(e.name){case"ParamsMustBeObject":case"DatabaseNotOpen":case"DatabaseNameMissing":case"DatabaseNameMustBeString":case"DatabaseNameCannotBeBlank":case"DatabaseNameTooLong":case"DatabaseNameRestricted":case"DatabaseIdMustBeString":case"DatabaseIdCannotBeBlank":case"DatabaseIdInvalidLength":case"DatabaseIdNotAllowed":case"ShareTokenNotAllowed":case"ShareTokenInvalid":case"DatabaseIsReadOnly":case"EncryptionModeNotValid":case"ServerSideEncryptionNotEnabledInClient":case"OperationsMissing":case"OperationsMustBeArray":case"OperationsConflict":case"OperationsExceedLimit":case"CommandNotRecognized":case"ItemIdMissing":case"ItemIdMustBeString":case"ItemIdCannotBeBlank":case"ItemIdTooLong":case"ItemMissing":case"ItemInvalid":case"ItemTooLarge":case"ItemAlreadyExists":case"ItemDoesNotExist":case"ItemUpdateConflict":case"WriteAccessParamNotAllowed":case"TransactionUnauthorized":case"UserMustChangePassword":case"UserNotSignedIn":case"UserNotFound":case"TooManyRequests":case"ServiceUnavailable":throw e;default:throw new hs.UnknownServiceUnavailable(e)}}},uploadFile:async e=>{try{(e=>{if(jr(e),Ga(e,"progressHandler")&&"function"!=typeof e.progressHandler)throw new hs.ProgressHandlerMustBeFunction})(e);const t=Vr(e.databaseName,e.databaseId,e.shareToken,e.encryptionMode||sr.encryptionMode),{dbId:s}=t;try{const{itemKey:a,fileMetadata:r}=await(async(e,t)=>{if(!Ga(e,"itemId"))throw new hs.ItemIdMissing;if(!Ga(e,"file"))throw new hs.FileMissing;const{itemId:s,file:a}=e;if("string"!=typeof s)throw new hs.ItemIdMustBeString;if(0===s.length)throw new hs.ItemIdCannotBeBlank;if(s.length>100)throw new hs.ItemIdTooLong(100);if(!t.itemExists(s))throw new hs.ItemDoesNotExist;if(!(a instanceof File))throw new hs.FileMustBeFile;if(0===a.size)throw new hs.FileCannotBeEmpty;const r=await ja.hmac.signString(sr.keys.hmacKey,s),n=t.getFileVersionNumber(s);return{itemKey:r,fileMetadata:{itemId:s,__v:void 0===n?0:n+1,fileName:a.name,fileSize:a.size,fileType:a.type}}})(e,t),[n,o]=await ja.aesGcm.generateAndEncryptKeyEncryptionKey(t.dbKey),c=await ja.aesGcm.encryptJson(n,r),{data:{fileId:u}}=await sr.request("GenerateFileId",{dbId:t.dbId}),d=e.file;let h=0,l=0,f=[];const m={bytesTransferred:0};for(;h<d.size;){const t=d.slice(h,h+524288);await Zr(f,t,s,u,n,l,m,e.progressHandler),l+=1,h+=524288}await Promise.all(f),await(async(e,t,s,a,r)=>{const n={dbId:e.dbId,fileId:t,itemKey:s,fileMetadata:a,fileEncryptionKey:i.a.encode(r)};await zr(e,"CompleteFileUpload",n)})(t,u,a,c,o)}catch(e){if(kr(e),e.response&&"DatabaseIsReadOnly"===e.response.data)throw new hs.DatabaseIsReadOnly;throw e}}catch(e){switch(e.name){case"ParamsMustBeObject":case"DatabaseNotOpen":case"DatabaseNameMissing":case"DatabaseNameMustBeString":case"DatabaseNameCannotBeBlank":case"DatabaseNameTooLong":case"DatabaseNameRestricted":case"DatabaseIdMustBeString":case"DatabaseIdCannotBeBlank":case"DatabaseIdInvalidLength":case"DatabaseIdNotAllowed":case"ShareTokenNotAllowed":case"ShareTokenInvalid":case"DatabaseIsReadOnly":case"EncryptionModeNotValid":case"ServerSideEncryptionNotEnabledInClient":case"ItemIdMissing":case"ItemIdMustBeString":case"ItemIdCannotBeBlank":case"ItemIdTooLong":case"ItemDoesNotExist":case"TransactionUnauthorized":case"FileMustBeFile":case"FileCannotBeEmpty":case"FileMissing":case"FileUploadConflict":case"ProgressHandlerMustBeFunction":case"UserMustChangePassword":case"UserNotSignedIn":case"TooManyRequests":case"ServiceUnavailable":throw e;default:throw new hs.UnknownServiceUnavailable(e)}}},getFile:async e=>{try{(e=>{if(jr(e),!Ga(e,"fileId"))throw new hs.FileIdMissing;const{fileId:t,range:s}=e;if("string"!=typeof t)throw new hs.FileIdMustBeString;if(0===t.length)throw new hs.FileIdCannotBeBlank;if(t.length>100)throw new hs.FileIdTooLong(100);if(Ga(e,"range")){if("object"!=typeof s)throw new hs.RangeMustBeObject;if(!Ga(s,"start"))throw new hs.RangeMissingStart;if(!Ga(s,"end"))throw new hs.RangeMissingEnd;const{start:e,end:t}=s;if("number"!=typeof e)throw new hs.RangeStartMustBeNumber;if("number"!=typeof t)throw new hs.RangeEndMustBeNumber;if(e<0)throw new hs.RangeStartMustBeGreaterThanZero;if(t<=e)throw new hs.RangeEndMustBeGreaterThanRangeStart}})(e);const t=Vr(e.databaseName,e.databaseId,e.shareToken,e.encryptionMode||sr.encryptionMode),{dbId:s}=t,{fileId:a,range:r}=e,n=t.fileIds[a],i=t.items[n];if(!i||!i.file)throw new hs.FileNotFound;const{file:{fileName:o,fileSize:c,fileType:u,fileEncryptionKey:d}}=i;if(r&&r.end>c)throw new hs.RangeEndMustBeLessThanFileSize;const h=r?await(async(e,t,s,a)=>{const{start:r,end:n}=a,i=[],o=Math.floor(r/524288),c=Math.floor(n/524288)-(n%524288==0?1:0);let u=o;for(;u<=c;){let a=await Xr(e,t,u,s);u===o&&u===c&&n%524288?a=a.slice(r%524288,n%524288):u===o?a=a.slice(r%524288):u===c&&n%524288&&(a=a.slice(0,n%524288)),i.push(a),u+=1}return i})(s,a,d,r):await(async(e,t,s,a)=>{const r=[];let n=0;const i=a<524288?0:Math.floor(a/524288)-(a%524288==0?1:0);for(;n<=i;){const a=await Xr(e,t,n,s);r.push(a),n+=1}return r})(s,a,d,c);return{file:new File(h,o,{type:u})}}catch(e){switch(e.name){case"ParamsMustBeObject":case"DatabaseNotOpen":case"DatabaseNameMissing":case"DatabaseNameMustBeString":case"DatabaseNameCannotBeBlank":case"DatabaseNameTooLong":case"DatabaseNameRestricted":case"DatabaseIdMustBeString":case"DatabaseIdCannotBeBlank":case"DatabaseIdInvalidLength":case"DatabaseIdNotAllowed":case"ShareTokenNotAllowed":case"ShareTokenInvalid":case"DatabaseIsReadOnly":case"EncryptionModeNotValid":case"ServerSideEncryptionNotEnabledInClient":case"FileIdMissing":case"FileIdMustBeString":case"FileIdCannotBeBlank":case"FileIdTooLong":case"FileNotFound":case"RangeMustBeObject":case"RangeMissingStart":case"RangeMissingEnd":case"RangeStartMustBeNumber":case"RangeEndMustBeNumber":case"RangeStartMustBeGreaterThanZero":case"RangeEndMustBeGreaterThanRangeStart":case"RangeEndMustBeLessThanFileSize":case"UserMustChangePassword":case"UserNotSignedIn":case"UserNotFound":case"TooManyRequests":case"ServiceUnavailable":throw e;default:throw new hs.UnknownServiceUnavailable(e)}}},shareDatabase:async e=>{try{jr(e),dn(e);const t=!Ga(e,"readOnly")||e.readOnly,s=!!Ga(e,"resharingAllowed")&&e.resharingAllowed,a=!Ga(e,"requireVerified")||e.requireVerified,r=e.encryptionMode||sr.encryptionMode;Lr(r);let n={};return Ga(e,"username")?await cn(e,t,s,a,r):n.shareToken=await(async(e,t,s)=>{try{const{databaseName:a,databaseId:r}=e;if(Ga(e,"requireVerified"))throw new hs.RequireVerifiedParamNotNecessary;if(Ga(e,"resharingAllowed"))throw new hs.ResharingAllowedParamNotAllowed("when retrieving a share token");const n=ja.generateSeed(),o=await ja.hkdf.importHkdfKey(n),c=ja.hkdf.generateSalt(),u=await ja.aesGcm.importKeyFromMaster(o,c),d=await an(a,r,s),h=await on(d),l=await ja.aesGcm.encryptString(u,h),{ecdsaPublicKey:f,encryptedEcdsaPrivateKey:m,ecdsaKeyEncryptionKeySalt:p}=await ja.ecdsa.generateEcdsaKeyData(o),w="ShareDatabaseToken",g={databaseId:d.dbId,databaseNameHash:d.dbNameHash,readOnly:t,keyData:{shareTokenEncryptedDbKey:l,shareTokenEncryptionKeySalt:i.a.encode(c),shareTokenPublicKey:f,shareTokenEncryptedEcdsaPrivateKey:m,shareTokenEcdsaKeyEncryptionKeySalt:p}},y=await sr.request(w,g),{shareTokenId:b}=y.data,v=Ls(b,!0);return i.a.encode(js(v,n))}catch(e){if(kr(e),e.response&&e.response.data)switch(e.response.data.message){case"DatabaseNotFound":throw new hs.DatabaseNotFound;case"ResharingNotAllowed":throw new hs.ResharingNotAllowed("Only the owner can generate a share token")}throw e}})(e,t,r),n}catch(e){switch(e.name){case"ParamsMustBeObject":case"DatabaseNameMissing":case"DatabaseNameMustBeString":case"DatabaseNameCannotBeBlank":case"DatabaseNameTooLong":case"DatabaseNameRestricted":case"DatabaseIdMustBeString":case"DatabaseIdCannotBeBlank":case"DatabaseIdInvalidLength":case"DatabaseIdNotAllowed":case"ShareTokenNotAllowed":case"DatabaseNotFound":case"EncryptionModeNotValid":case"ServerSideEncryptionNotEnabledInClient":case"UsernameCannotBeBlank":case"UsernameMustBeString":case"ReadOnlyMustBeBoolean":case"ResharingAllowedMustBeBoolean":case"ResharingNotAllowed":case"ResharingWithWriteAccessNotAllowed":case"ResharingAllowedParamNotAllowed":case"RequireVerifiedMustBeBoolean":case"RequireVerifiedParamNotNecessary":case"SharingWithSelfNotAllowed":case"UserMustChangePassword":case"UserNotSignedIn":case"UserUnableToReceiveDatabase":case"UserNotFound":case"UserNotVerified":case"UserMustBeReverified":case"ServiceUnavailable":throw e;default:throw new hs.UnknownServiceUnavailable(e)}}},modifyDatabasePermissions:async e=>{try{if(jr(e),dn(e),!Ga(e,"username"))throw new hs.UsernameMissing;if(Ga(e,"revoke")){if("boolean"!=typeof e.revoke)throw new hs.RevokeMustBeBoolean;if(e.revoke){if(Ga(e,"readOnly"))throw new hs.ReadOnlyParamNotAllowed;if(Ga(e,"resharingAllowed"))throw new hs.ResharingAllowedParamNotAllowed("when revoking access to a database")}}else if(!Ga(e,"readOnly")&&!Ga(e,"resharingAllowed"))throw new hs.ParamsMissing;const{databaseName:t,databaseId:s,readOnly:a,resharingAllowed:r,revoke:n,encryptionMode:i=sr.encryptionMode}=e,o=e.username.toLowerCase();try{const e=await an(t,s,i),c="ModifyDatabasePermissions",u={databaseId:e.dbId,databaseNameHash:e.dbNameHash,username:o,readOnly:a,resharingAllowed:r,revoke:n};await sr.request(c,u)}catch(e){if(kr(e),e.response&&e.response.data)switch(e.response.data.message){case"SharingWithSelfNotAllowed":throw new hs.ModifyingOwnPermissionsNotAllowed;case"ModifyingOwnerPermissionsNotAllowed":throw new hs.ModifyingOwnerPermissionsNotAllowed;case"ResharingNotAllowed":throw new hs.ModifyingPermissionsNotAllowed;case"ResharingWithWriteAccessNotAllowed":throw new hs.GrantingWriteAccessNotAllowed;case"DatabaseNotFound":throw new hs.DatabaseNotFound;case"UserNotFound":throw new hs.UserNotFound}throw e}}catch(e){switch(e.name){case"ParamsMustBeObject":case"ParamsMissing":case"DatabaseNameMissing":case"DatabaseNameMustBeString":case"DatabaseNameCannotBeBlank":case"DatabaseNameTooLong":case"DatabaseNameRestricted":case"DatabaseIdMustBeString":case"DatabaseIdCannotBeBlank":case"DatabaseIdInvalidLength":case"DatabaseIdNotAllowed":case"ShareTokenNotAllowed":case"DatabaseNotFound":case"EncryptionModeNotValid":case"ServerSideEncryptionNotEnabledInClient":case"UsernameMissing":case"UsernameCannotBeBlank":case"UsernameMustBeString":case"ReadOnlyMustBeBoolean":case"ReadOnlyParamNotAllowed":case"ResharingAllowedMustBeBoolean":case"ResharingAllowedParamNotAllowed":case"RevokeMustBeBoolean":case"ModifyingOwnPermissionsNotAllowed":case"ModifyingOwnerPermissionsNotAllowed":case"ModifyingPermissionsNotAllowed":case"GrantingWriteAccessNotAllowed":case"UserMustChangePassword":case"UserNotSignedIn":case"UserNotFound":case"ServiceUnavailable":throw e;default:throw new hs.UnknownServiceUnavailable(e)}}},getVerificationMessage:async()=>{try{Tr();const e=sr.session.username,t=await ln();return{verificationMessage:((e,t)=>btoa(JSON.stringify({username:e,fingerprint:t})))(e,t)}}catch(e){switch(e.name){case"UserMustChangePassword":case"UserNotSignedIn":case"ServiceUnavailable":throw e;default:throw new hs.UnknownServiceUnavailable(e)}}},verifyUser:async e=>{try{if("object"!=typeof e)throw new hs.ParamsMustBeObject;if(Tr(),!Ga(e,"verificationMessage"))throw new hs.VerificationMessageMissing;const{verificationMessage:t}=e;if("string"!=typeof t)throw new hs.VerificationMessageMustBeString;if(0===t.length)throw new hs.VerificationMessageCannotBeBlank;const{username:s,fingerprint:a}=(e=>{try{const{username:t,fingerprint:s}=JSON.parse(atob(e));if(un(t),!s)throw new hs.VerificationMessageInvalid;return{username:t,fingerprint:s}}catch(e){throw new hs.VerificationMessageInvalid}})(t);if(s===sr.session.username||a===await ln())throw new hs.VerifyingSelfNotAllowed;await fn();const r="__userbase_verified_users",n=!0,i=s,o={fingerprint:a};try{await Hr({databaseName:r,itemId:i,item:o,allowVerifiedUsersDatabase:n})}catch(e){if("ItemAlreadyExists"!==e.name)throw e;await Jr({databaseName:r,itemId:i,item:o,allowVerifiedUsersDatabase:n})}}catch(e){switch(e.name){case"ParamsMustBeObject":case"VerificationMessageMissing":case"VerificationMessageMustBeString":case"VerificationMessageCannotBeBlank":case"VerificationMessageInvalid":case"VerifyingSelfNotAllowed":case"UserMustChangePassword":case"UserNotSignedIn":case"ServiceUnavailable":throw e;default:throw new hs.UnknownServiceUnavailable(e)}}}};const pn=()=>{if(sr.reconnecting)throw new hs.Reconnecting;if(!sr.keys.init&&sr.changePassword)throw new hs.UserMustChangePassword;if(!sr.keys.init)throw new hs.UserNotSignedIn},wn=e=>{if(e.response){if(e.response.status===p)throw new hs.InternalServerError;if(e.response.status===g)throw new hs.Timeout}else if(e.message&&-1!==e.message.indexOf("timeout"))throw new hs.Timeout},gn=e=>{pn();const t=sr.userData.stripeData;if(!t.stripeAccountId)throw new hs.StripeAccountNotConnected;if("disabled"===t.paymentsMode)throw new hs.PaymentsDisabled;if(!Ga(window,"Stripe"))throw new hs.StripeJsLibraryMissing;if("object"!=typeof e)throw new hs.ParamsMustBeObject;if(!Ga(e,"successUrl"))throw new hs.SuccessUrlMissing;if("string"!=typeof e.successUrl)throw new hs.SuccessUrlMustBeString;const s=qa(e.successUrl);if("http"!==s&&"https"!==s){const e=!0;throw new hs.SuccessUrlInvalid(e)}if(!Ga(e,"cancelUrl"))throw new hs.CancelUrlMissing;if("string"!=typeof e.cancelUrl)throw new hs.CancelUrlMustBeString;const a=qa(e.cancelUrl);if("http"!==a&&"https"!==a){const e=!0;throw new hs.CancelUrlInvalid(e)}},yn=()=>{pn();const e=sr.userData.stripeData;if(!e.stripeAccountId)throw new hs.StripeAccountNotConnected;if("disabled"===e.paymentsMode)throw new hs.PaymentsDisabled;if("canceled"===e.subscriptionStatus)throw new hs.SubscriptionAlreadyCanceled};var bn={purchaseSubscription:async e=>{try{const t=sr.userData.stripeData;if(!t.cancelSubscriptionAt&&t.subscriptionStatus&&"canceled"!==t.subscriptionStatus)throw new hs.SubscriptionPlanAlreadyPurchased;gn(e);try{const s="PurchaseSubscription",a=(await sr.request(s,e)).data,r=vs("prod"===t.paymentsMode),n=await window.Stripe(r,{stripeAccount:t.stripeAccountId}).redirectToCheckout({sessionId:a});if(n.error)throw n.error}catch(e){if(wn(e),e.response)switch(e.response.data){case"PriceIdOrPlanIdAllowed":throw new hs.PriceIdOrPlanIdAllowed;case"PriceIdOrPlanIdMissing":throw new hs.PriceIdOrPlanIdMissing;case"SubscriptionPlanAlreadyPurchased":throw new hs.SubscriptionPlanAlreadyPurchased;case"SuccessUrlInvalid":throw new hs.SuccessUrlInvalid;case"CancelUrlInvalid":throw new hs.CancelUrlInvalid;default:if(e.response.data&&"StripeError"===e.response.data.name)throw new hs.StripeError(e.response.data)}throw e}}catch(e){switch(e.name){case"ParamsMustBeObject":case"SuccessUrlMissing":case"SuccessUrlMustBeString":case"SuccessUrlInvalid":case"CancelUrlMissing":case"CancelUrlMustBeString":case"CancelUrlInvalid":case"StripeError":case"StripeJsLibraryMissing":case"PriceIdOrPlanIdAllowed":case"PriceIdOrPlanIdMissing":case"SubscriptionPlanAlreadyPurchased":case"StripeAccountNotConnected":case"PaymentsDisabled":case"UserMustChangePassword":case"UserNotSignedIn":case"TooManyRequests":case"ServiceUnavailable":throw e;default:throw new hs.UnknownServiceUnavailable(e)}}},cancelSubscription:async()=>{try{yn();try{const e="CancelSubscription",t=(await sr.request(e)).data;return sr.userData.stripeData.cancelSubscriptionAt=t,{cancelSubscriptionAt:t}}catch(e){if(wn(e),e.response&&"SubscriptionNotFound"===e.response.data)throw new hs.SubscriptionNotFound;throw e}}catch(e){switch(e.name){case"SubscriptionNotFound":case"StripeAccountNotConnected":case"PaymentsDisabled":case"SubscriptionAlreadyCanceled":case"UserMustChangePassword":case"UserNotSignedIn":case"TooManyRequests":case"ServiceUnavailable":throw e;default:throw new hs.UnknownServiceUnavailable(e)}}},resumeSubscription:async()=>{try{yn();try{const e="ResumeSubscription";await sr.request(e),delete sr.userData.stripeData.cancelSubscriptionAt}catch(e){if(wn(e),e.response&&"SubscriptionNotFound"===e.response.data)throw new hs.SubscriptionNotFound;throw e}}catch(e){switch(e.name){case"SubscriptionNotFound":case"StripeAccountNotConnected":case"PaymentsDisabled":case"SubscriptionAlreadyCanceled":case"UserMustChangePassword":case"UserNotSignedIn":case"TooManyRequests":case"ServiceUnavailable":throw e;default:throw new hs.UnknownServiceUnavailable(e)}}},updatePaymentMethod:async e=>{try{gn(e);const t=sr.userData.stripeData;if(!t.subscriptionStatus)throw new hs.SubscriptionNotPurchased;try{const s="UpdatePaymentMethod",a=(await sr.request(s,e)).data,r=vs("prod"===t.paymentsMode),n=await window.Stripe(r,{stripeAccount:t.stripeAccountId}).redirectToCheckout({sessionId:a});if(n.error)throw n.error}catch(e){if(wn(e),e.response){if("SuccessUrlInvalid"===e.response.data)throw new hs.SuccessUrlInvalid;if("CancelUrlInvalid"===e.response.data)throw new hs.CancelUrlInvalid}throw e}}catch(e){switch(e.name){case"ParamsMustBeObject":case"SuccessUrlMissing":case"SuccessUrlMustBeString":case"SuccessUrlInvalid":case"CancelUrlMissing":case"CancelUrlMustBeString":case"CancelUrlInvalid":case"StripeJsLibraryMissing":case"SubscriptionNotPurchased":case"StripeAccountNotConnected":case"PaymentsDisabled":case"UserMustChangePassword":case"UserNotSignedIn":case"TooManyRequests":case"ServiceUnavailable":throw e;default:throw new hs.UnknownServiceUnavailable(e)}}}};t.default={init:Pr.init,signUp:Pr.signUp,signIn:Pr.signIn,signOut:Pr.signOut,updateUser:Pr.updateUser,deleteUser:Pr.deleteUser,forgotPassword:Pr.forgotPassword,openDatabase:mn.openDatabase,insertItem:mn.insertItem,updateItem:mn.updateItem,deleteItem:mn.deleteItem,putTransaction:mn.putTransaction,uploadFile:mn.uploadFile,getFile:mn.getFile,getDatabases:mn.getDatabases,shareDatabase:mn.shareDatabase,modifyDatabasePermissions:mn.modifyDatabasePermissions,getVerificationMessage:mn.getVerificationMessage,verifyUser:mn.verifyUser,purchaseSubscription:bn.purchaseSubscription,cancelSubscription:bn.cancelSubscription,resumeSubscription:bn.resumeSubscription,updatePaymentMethod:bn.updatePaymentMethod}}]).default; +//# sourceMappingURL=userbase.js.map +var userbase=function(e){var t={};function s(a){if(t[a])return t[a].exports;var r=t[a]={i:a,l:!1,exports:{}};return e[a].call(r.exports,r,r.exports,s),r.l=!0,r.exports}return s.m=e,s.c=t,s.d=function(e,t,a){s.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:a})},s.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},s.t=function(e,t){if(1&t&&(e=s(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var a=Object.create(null);if(s.r(a),Object.defineProperty(a,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)s.d(a,r,function(t){return e[t]}.bind(null,r));return a},s.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return s.d(t,"a",t),t},s.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},s.p="",s(s.s=27)}([function(e,t){!function(){"use strict";for(var e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=new Uint8Array(256),a=0;a<e.length;a++)s[e.charCodeAt(a)]=a;t.encode=function(t){var s,a=new Uint8Array(t),r=a.length,n="";for(s=0;s<r;s+=3)n+=e[a[s]>>2],n+=e[(3&a[s])<<4|a[s+1]>>4],n+=e[(15&a[s+1])<<2|a[s+2]>>6],n+=e[63&a[s+2]];return r%3==2?n=n.substring(0,n.length-1)+"=":r%3==1&&(n=n.substring(0,n.length-2)+"=="),n},t.decode=function(e){var t,a,r,n,i,o=.75*e.length,c=e.length,u=0;"="===e[e.length-1]&&(o--,"="===e[e.length-2]&&o--);var d=new ArrayBuffer(o),h=new Uint8Array(d);for(t=0;t<c;t+=4)a=s[e.charCodeAt(t)],r=s[e.charCodeAt(t+1)],n=s[e.charCodeAt(t+2)],i=s[e.charCodeAt(t+3)],h[u++]=a<<2|r>>4,h[u++]=(15&r)<<4|n>>2,h[u++]=(3&n)<<6|63&i;return d}}()},function(e,t){e.exports=function(e,t,s){return t in e?Object.defineProperty(e,t,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[t]=s,e}},function(e,t,s){var a=s(13),r=s(14);e.exports=function(e,t,s){var n=t&&s||0;"string"==typeof e&&(t="binary"===e?new Array(16):null,e=null);var i=(e=e||{}).random||(e.rng||a)();if(i[6]=15&i[6]|64,i[8]=63&i[8]|128,t)for(var o=0;o<16;++o)t[n+o]=i[o];return t||r(i)}},function(e,t){var s;s=function(){return this}();try{s=s||new Function("return this")()}catch(e){"object"==typeof window&&(s=window)}e.exports=s},function(e,t,s){"use strict";(function(e){ +/*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh <http://feross.org> + * @license MIT + */ +var a=s(15),r=s(16),n=s(17);function i(){return c.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function o(e,t){if(i()<t)throw new RangeError("Invalid typed array length");return c.TYPED_ARRAY_SUPPORT?(e=new Uint8Array(t)).__proto__=c.prototype:(null===e&&(e=new c(t)),e.length=t),e}function c(e,t,s){if(!(c.TYPED_ARRAY_SUPPORT||this instanceof c))return new c(e,t,s);if("number"==typeof e){if("string"==typeof t)throw new Error("If encoding is specified then the first argument must be a string");return h(this,e)}return u(this,e,t,s)}function u(e,t,s,a){if("number"==typeof t)throw new TypeError('"value" argument must not be a number');return"undefined"!=typeof ArrayBuffer&&t instanceof ArrayBuffer?function(e,t,s,a){if(t.byteLength,s<0||t.byteLength<s)throw new RangeError("'offset' is out of bounds");if(t.byteLength<s+(a||0))throw new RangeError("'length' is out of bounds");t=void 0===s&&void 0===a?new Uint8Array(t):void 0===a?new Uint8Array(t,s):new Uint8Array(t,s,a);c.TYPED_ARRAY_SUPPORT?(e=t).__proto__=c.prototype:e=l(e,t);return e}(e,t,s,a):"string"==typeof t?function(e,t,s){"string"==typeof s&&""!==s||(s="utf8");if(!c.isEncoding(s))throw new TypeError('"encoding" must be a valid string encoding');var a=0|m(t,s),r=(e=o(e,a)).write(t,s);r!==a&&(e=e.slice(0,r));return e}(e,t,s):function(e,t){if(c.isBuffer(t)){var s=0|f(t.length);return 0===(e=o(e,s)).length||t.copy(e,0,0,s),e}if(t){if("undefined"!=typeof ArrayBuffer&&t.buffer instanceof ArrayBuffer||"length"in t)return"number"!=typeof t.length||(a=t.length)!=a?o(e,0):l(e,t);if("Buffer"===t.type&&n(t.data))return l(e,t.data)}var a;throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}(e,t)}function d(e){if("number"!=typeof e)throw new TypeError('"size" argument must be a number');if(e<0)throw new RangeError('"size" argument must not be negative')}function h(e,t){if(d(t),e=o(e,t<0?0:0|f(t)),!c.TYPED_ARRAY_SUPPORT)for(var s=0;s<t;++s)e[s]=0;return e}function l(e,t){var s=t.length<0?0:0|f(t.length);e=o(e,s);for(var a=0;a<s;a+=1)e[a]=255&t[a];return e}function f(e){if(e>=i())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+i().toString(16)+" bytes");return 0|e}function m(e,t){if(c.isBuffer(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var s=e.length;if(0===s)return 0;for(var a=!1;;)switch(t){case"ascii":case"latin1":case"binary":return s;case"utf8":case"utf-8":case void 0:return L(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*s;case"hex":return s>>>1;case"base64":return j(e).length;default:if(a)return L(e).length;t=(""+t).toLowerCase(),a=!0}}function p(e,t,s){var a=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===s||s>this.length)&&(s=this.length),s<=0)return"";if((s>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return A(this,t,s);case"utf8":case"utf-8":return B(this,t,s);case"ascii":return N(this,t,s);case"latin1":case"binary":return U(this,t,s);case"base64":return E(this,t,s);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return T(this,t,s);default:if(a)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),a=!0}}function w(e,t,s){var a=e[t];e[t]=e[s],e[s]=a}function g(e,t,s,a,r){if(0===e.length)return-1;if("string"==typeof s?(a=s,s=0):s>2147483647?s=2147483647:s<-2147483648&&(s=-2147483648),s=+s,isNaN(s)&&(s=r?0:e.length-1),s<0&&(s=e.length+s),s>=e.length){if(r)return-1;s=e.length-1}else if(s<0){if(!r)return-1;s=0}if("string"==typeof t&&(t=c.from(t,a)),c.isBuffer(t))return 0===t.length?-1:y(e,t,s,a,r);if("number"==typeof t)return t&=255,c.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?r?Uint8Array.prototype.indexOf.call(e,t,s):Uint8Array.prototype.lastIndexOf.call(e,t,s):y(e,[t],s,a,r);throw new TypeError("val must be string, number or Buffer")}function y(e,t,s,a,r){var n,i=1,o=e.length,c=t.length;if(void 0!==a&&("ucs2"===(a=String(a).toLowerCase())||"ucs-2"===a||"utf16le"===a||"utf-16le"===a)){if(e.length<2||t.length<2)return-1;i=2,o/=2,c/=2,s/=2}function u(e,t){return 1===i?e[t]:e.readUInt16BE(t*i)}if(r){var d=-1;for(n=s;n<o;n++)if(u(e,n)===u(t,-1===d?0:n-d)){if(-1===d&&(d=n),n-d+1===c)return d*i}else-1!==d&&(n-=n-d),d=-1}else for(s+c>o&&(s=o-c),n=s;n>=0;n--){for(var h=!0,l=0;l<c;l++)if(u(e,n+l)!==u(t,l)){h=!1;break}if(h)return n}return-1}function b(e,t,s,a){s=Number(s)||0;var r=e.length-s;a?(a=Number(a))>r&&(a=r):a=r;var n=t.length;if(n%2!=0)throw new TypeError("Invalid hex string");a>n/2&&(a=n/2);for(var i=0;i<a;++i){var o=parseInt(t.substr(2*i,2),16);if(isNaN(o))return i;e[s+i]=o}return i}function v(e,t,s,a){return q(L(t,e.length-s),e,s,a)}function M(e,t,s,a){return q(function(e){for(var t=[],s=0;s<e.length;++s)t.push(255&e.charCodeAt(s));return t}(t),e,s,a)}function S(e,t,s,a){return M(e,t,s,a)}function I(e,t,s,a){return q(j(t),e,s,a)}function P(e,t,s,a){return q(function(e,t){for(var s,a,r,n=[],i=0;i<e.length&&!((t-=2)<0);++i)s=e.charCodeAt(i),a=s>>8,r=s%256,n.push(r),n.push(a);return n}(t,e.length-s),e,s,a)}function E(e,t,s){return 0===t&&s===e.length?a.fromByteArray(e):a.fromByteArray(e.slice(t,s))}function B(e,t,s){s=Math.min(e.length,s);for(var a=[],r=t;r<s;){var n,i,o,c,u=e[r],d=null,h=u>239?4:u>223?3:u>191?2:1;if(r+h<=s)switch(h){case 1:u<128&&(d=u);break;case 2:128==(192&(n=e[r+1]))&&(c=(31&u)<<6|63&n)>127&&(d=c);break;case 3:n=e[r+1],i=e[r+2],128==(192&n)&&128==(192&i)&&(c=(15&u)<<12|(63&n)<<6|63&i)>2047&&(c<55296||c>57343)&&(d=c);break;case 4:n=e[r+1],i=e[r+2],o=e[r+3],128==(192&n)&&128==(192&i)&&128==(192&o)&&(c=(15&u)<<18|(63&n)<<12|(63&i)<<6|63&o)>65535&&c<1114112&&(d=c)}null===d?(d=65533,h=1):d>65535&&(d-=65536,a.push(d>>>10&1023|55296),d=56320|1023&d),a.push(d),r+=h}return function(e){var t=e.length;if(t<=4096)return String.fromCharCode.apply(String,e);var s="",a=0;for(;a<t;)s+=String.fromCharCode.apply(String,e.slice(a,a+=4096));return s}(a)}t.Buffer=c,t.SlowBuffer=function(e){+e!=e&&(e=0);return c.alloc(+e)},t.INSPECT_MAX_BYTES=50,c.TYPED_ARRAY_SUPPORT=void 0!==e.TYPED_ARRAY_SUPPORT?e.TYPED_ARRAY_SUPPORT:function(){try{var e=new Uint8Array(1);return e.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===e.foo()&&"function"==typeof e.subarray&&0===e.subarray(1,1).byteLength}catch(e){return!1}}(),t.kMaxLength=i(),c.poolSize=8192,c._augment=function(e){return e.__proto__=c.prototype,e},c.from=function(e,t,s){return u(null,e,t,s)},c.TYPED_ARRAY_SUPPORT&&(c.prototype.__proto__=Uint8Array.prototype,c.__proto__=Uint8Array,"undefined"!=typeof Symbol&&Symbol.species&&c[Symbol.species]===c&&Object.defineProperty(c,Symbol.species,{value:null,configurable:!0})),c.alloc=function(e,t,s){return function(e,t,s,a){return d(t),t<=0?o(e,t):void 0!==s?"string"==typeof a?o(e,t).fill(s,a):o(e,t).fill(s):o(e,t)}(null,e,t,s)},c.allocUnsafe=function(e){return h(null,e)},c.allocUnsafeSlow=function(e){return h(null,e)},c.isBuffer=function(e){return!(null==e||!e._isBuffer)},c.compare=function(e,t){if(!c.isBuffer(e)||!c.isBuffer(t))throw new TypeError("Arguments must be Buffers");if(e===t)return 0;for(var s=e.length,a=t.length,r=0,n=Math.min(s,a);r<n;++r)if(e[r]!==t[r]){s=e[r],a=t[r];break}return s<a?-1:a<s?1:0},c.isEncoding=function(e){switch(String(e).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},c.concat=function(e,t){if(!n(e))throw new TypeError('"list" argument must be an Array of Buffers');if(0===e.length)return c.alloc(0);var s;if(void 0===t)for(t=0,s=0;s<e.length;++s)t+=e[s].length;var a=c.allocUnsafe(t),r=0;for(s=0;s<e.length;++s){var i=e[s];if(!c.isBuffer(i))throw new TypeError('"list" argument must be an Array of Buffers');i.copy(a,r),r+=i.length}return a},c.byteLength=m,c.prototype._isBuffer=!0,c.prototype.swap16=function(){var e=this.length;if(e%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var t=0;t<e;t+=2)w(this,t,t+1);return this},c.prototype.swap32=function(){var e=this.length;if(e%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var t=0;t<e;t+=4)w(this,t,t+3),w(this,t+1,t+2);return this},c.prototype.swap64=function(){var e=this.length;if(e%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var t=0;t<e;t+=8)w(this,t,t+7),w(this,t+1,t+6),w(this,t+2,t+5),w(this,t+3,t+4);return this},c.prototype.toString=function(){var e=0|this.length;return 0===e?"":0===arguments.length?B(this,0,e):p.apply(this,arguments)},c.prototype.equals=function(e){if(!c.isBuffer(e))throw new TypeError("Argument must be a Buffer");return this===e||0===c.compare(this,e)},c.prototype.inspect=function(){var e="",s=t.INSPECT_MAX_BYTES;return this.length>0&&(e=this.toString("hex",0,s).match(/.{2}/g).join(" "),this.length>s&&(e+=" ... ")),"<Buffer "+e+">"},c.prototype.compare=function(e,t,s,a,r){if(!c.isBuffer(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===s&&(s=e?e.length:0),void 0===a&&(a=0),void 0===r&&(r=this.length),t<0||s>e.length||a<0||r>this.length)throw new RangeError("out of range index");if(a>=r&&t>=s)return 0;if(a>=r)return-1;if(t>=s)return 1;if(this===e)return 0;for(var n=(r>>>=0)-(a>>>=0),i=(s>>>=0)-(t>>>=0),o=Math.min(n,i),u=this.slice(a,r),d=e.slice(t,s),h=0;h<o;++h)if(u[h]!==d[h]){n=u[h],i=d[h];break}return n<i?-1:i<n?1:0},c.prototype.includes=function(e,t,s){return-1!==this.indexOf(e,t,s)},c.prototype.indexOf=function(e,t,s){return g(this,e,t,s,!0)},c.prototype.lastIndexOf=function(e,t,s){return g(this,e,t,s,!1)},c.prototype.write=function(e,t,s,a){if(void 0===t)a="utf8",s=this.length,t=0;else if(void 0===s&&"string"==typeof t)a=t,s=this.length,t=0;else{if(!isFinite(t))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");t|=0,isFinite(s)?(s|=0,void 0===a&&(a="utf8")):(a=s,s=void 0)}var r=this.length-t;if((void 0===s||s>r)&&(s=r),e.length>0&&(s<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");a||(a="utf8");for(var n=!1;;)switch(a){case"hex":return b(this,e,t,s);case"utf8":case"utf-8":return v(this,e,t,s);case"ascii":return M(this,e,t,s);case"latin1":case"binary":return S(this,e,t,s);case"base64":return I(this,e,t,s);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return P(this,e,t,s);default:if(n)throw new TypeError("Unknown encoding: "+a);a=(""+a).toLowerCase(),n=!0}},c.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function N(e,t,s){var a="";s=Math.min(e.length,s);for(var r=t;r<s;++r)a+=String.fromCharCode(127&e[r]);return a}function U(e,t,s){var a="";s=Math.min(e.length,s);for(var r=t;r<s;++r)a+=String.fromCharCode(e[r]);return a}function A(e,t,s){var a=e.length;(!t||t<0)&&(t=0),(!s||s<0||s>a)&&(s=a);for(var r="",n=t;n<s;++n)r+=F(e[n]);return r}function T(e,t,s){for(var a=e.slice(t,s),r="",n=0;n<a.length;n+=2)r+=String.fromCharCode(a[n]+256*a[n+1]);return r}function k(e,t,s){if(e%1!=0||e<0)throw new RangeError("offset is not uint");if(e+t>s)throw new RangeError("Trying to access beyond buffer length")}function D(e,t,s,a,r,n){if(!c.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>r||t<n)throw new RangeError('"value" argument is out of bounds');if(s+a>e.length)throw new RangeError("Index out of range")}function K(e,t,s,a){t<0&&(t=65535+t+1);for(var r=0,n=Math.min(e.length-s,2);r<n;++r)e[s+r]=(t&255<<8*(a?r:1-r))>>>8*(a?r:1-r)}function x(e,t,s,a){t<0&&(t=4294967295+t+1);for(var r=0,n=Math.min(e.length-s,4);r<n;++r)e[s+r]=t>>>8*(a?r:3-r)&255}function R(e,t,s,a,r,n){if(s+a>e.length)throw new RangeError("Index out of range");if(s<0)throw new RangeError("Index out of range")}function O(e,t,s,a,n){return n||R(e,0,s,4),r.write(e,t,s,a,23,4),s+4}function C(e,t,s,a,n){return n||R(e,0,s,8),r.write(e,t,s,a,52,8),s+8}c.prototype.slice=function(e,t){var s,a=this.length;if((e=~~e)<0?(e+=a)<0&&(e=0):e>a&&(e=a),(t=void 0===t?a:~~t)<0?(t+=a)<0&&(t=0):t>a&&(t=a),t<e&&(t=e),c.TYPED_ARRAY_SUPPORT)(s=this.subarray(e,t)).__proto__=c.prototype;else{var r=t-e;s=new c(r,void 0);for(var n=0;n<r;++n)s[n]=this[n+e]}return s},c.prototype.readUIntLE=function(e,t,s){e|=0,t|=0,s||k(e,t,this.length);for(var a=this[e],r=1,n=0;++n<t&&(r*=256);)a+=this[e+n]*r;return a},c.prototype.readUIntBE=function(e,t,s){e|=0,t|=0,s||k(e,t,this.length);for(var a=this[e+--t],r=1;t>0&&(r*=256);)a+=this[e+--t]*r;return a},c.prototype.readUInt8=function(e,t){return t||k(e,1,this.length),this[e]},c.prototype.readUInt16LE=function(e,t){return t||k(e,2,this.length),this[e]|this[e+1]<<8},c.prototype.readUInt16BE=function(e,t){return t||k(e,2,this.length),this[e]<<8|this[e+1]},c.prototype.readUInt32LE=function(e,t){return t||k(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},c.prototype.readUInt32BE=function(e,t){return t||k(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},c.prototype.readIntLE=function(e,t,s){e|=0,t|=0,s||k(e,t,this.length);for(var a=this[e],r=1,n=0;++n<t&&(r*=256);)a+=this[e+n]*r;return a>=(r*=128)&&(a-=Math.pow(2,8*t)),a},c.prototype.readIntBE=function(e,t,s){e|=0,t|=0,s||k(e,t,this.length);for(var a=t,r=1,n=this[e+--a];a>0&&(r*=256);)n+=this[e+--a]*r;return n>=(r*=128)&&(n-=Math.pow(2,8*t)),n},c.prototype.readInt8=function(e,t){return t||k(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},c.prototype.readInt16LE=function(e,t){t||k(e,2,this.length);var s=this[e]|this[e+1]<<8;return 32768&s?4294901760|s:s},c.prototype.readInt16BE=function(e,t){t||k(e,2,this.length);var s=this[e+1]|this[e]<<8;return 32768&s?4294901760|s:s},c.prototype.readInt32LE=function(e,t){return t||k(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},c.prototype.readInt32BE=function(e,t){return t||k(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},c.prototype.readFloatLE=function(e,t){return t||k(e,4,this.length),r.read(this,e,!0,23,4)},c.prototype.readFloatBE=function(e,t){return t||k(e,4,this.length),r.read(this,e,!1,23,4)},c.prototype.readDoubleLE=function(e,t){return t||k(e,8,this.length),r.read(this,e,!0,52,8)},c.prototype.readDoubleBE=function(e,t){return t||k(e,8,this.length),r.read(this,e,!1,52,8)},c.prototype.writeUIntLE=function(e,t,s,a){(e=+e,t|=0,s|=0,a)||D(this,e,t,s,Math.pow(2,8*s)-1,0);var r=1,n=0;for(this[t]=255&e;++n<s&&(r*=256);)this[t+n]=e/r&255;return t+s},c.prototype.writeUIntBE=function(e,t,s,a){(e=+e,t|=0,s|=0,a)||D(this,e,t,s,Math.pow(2,8*s)-1,0);var r=s-1,n=1;for(this[t+r]=255&e;--r>=0&&(n*=256);)this[t+r]=e/n&255;return t+s},c.prototype.writeUInt8=function(e,t,s){return e=+e,t|=0,s||D(this,e,t,1,255,0),c.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},c.prototype.writeUInt16LE=function(e,t,s){return e=+e,t|=0,s||D(this,e,t,2,65535,0),c.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):K(this,e,t,!0),t+2},c.prototype.writeUInt16BE=function(e,t,s){return e=+e,t|=0,s||D(this,e,t,2,65535,0),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):K(this,e,t,!1),t+2},c.prototype.writeUInt32LE=function(e,t,s){return e=+e,t|=0,s||D(this,e,t,4,4294967295,0),c.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):x(this,e,t,!0),t+4},c.prototype.writeUInt32BE=function(e,t,s){return e=+e,t|=0,s||D(this,e,t,4,4294967295,0),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):x(this,e,t,!1),t+4},c.prototype.writeIntLE=function(e,t,s,a){if(e=+e,t|=0,!a){var r=Math.pow(2,8*s-1);D(this,e,t,s,r-1,-r)}var n=0,i=1,o=0;for(this[t]=255&e;++n<s&&(i*=256);)e<0&&0===o&&0!==this[t+n-1]&&(o=1),this[t+n]=(e/i>>0)-o&255;return t+s},c.prototype.writeIntBE=function(e,t,s,a){if(e=+e,t|=0,!a){var r=Math.pow(2,8*s-1);D(this,e,t,s,r-1,-r)}var n=s-1,i=1,o=0;for(this[t+n]=255&e;--n>=0&&(i*=256);)e<0&&0===o&&0!==this[t+n+1]&&(o=1),this[t+n]=(e/i>>0)-o&255;return t+s},c.prototype.writeInt8=function(e,t,s){return e=+e,t|=0,s||D(this,e,t,1,127,-128),c.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},c.prototype.writeInt16LE=function(e,t,s){return e=+e,t|=0,s||D(this,e,t,2,32767,-32768),c.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):K(this,e,t,!0),t+2},c.prototype.writeInt16BE=function(e,t,s){return e=+e,t|=0,s||D(this,e,t,2,32767,-32768),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):K(this,e,t,!1),t+2},c.prototype.writeInt32LE=function(e,t,s){return e=+e,t|=0,s||D(this,e,t,4,2147483647,-2147483648),c.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):x(this,e,t,!0),t+4},c.prototype.writeInt32BE=function(e,t,s){return e=+e,t|=0,s||D(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):x(this,e,t,!1),t+4},c.prototype.writeFloatLE=function(e,t,s){return O(this,e,t,!0,s)},c.prototype.writeFloatBE=function(e,t,s){return O(this,e,t,!1,s)},c.prototype.writeDoubleLE=function(e,t,s){return C(this,e,t,!0,s)},c.prototype.writeDoubleBE=function(e,t,s){return C(this,e,t,!1,s)},c.prototype.copy=function(e,t,s,a){if(s||(s=0),a||0===a||(a=this.length),t>=e.length&&(t=e.length),t||(t=0),a>0&&a<s&&(a=s),a===s)return 0;if(0===e.length||0===this.length)return 0;if(t<0)throw new RangeError("targetStart out of bounds");if(s<0||s>=this.length)throw new RangeError("sourceStart out of bounds");if(a<0)throw new RangeError("sourceEnd out of bounds");a>this.length&&(a=this.length),e.length-t<a-s&&(a=e.length-t+s);var r,n=a-s;if(this===e&&s<t&&t<a)for(r=n-1;r>=0;--r)e[r+t]=this[r+s];else if(n<1e3||!c.TYPED_ARRAY_SUPPORT)for(r=0;r<n;++r)e[r+t]=this[r+s];else Uint8Array.prototype.set.call(e,this.subarray(s,s+n),t);return n},c.prototype.fill=function(e,t,s,a){if("string"==typeof e){if("string"==typeof t?(a=t,t=0,s=this.length):"string"==typeof s&&(a=s,s=this.length),1===e.length){var r=e.charCodeAt(0);r<256&&(e=r)}if(void 0!==a&&"string"!=typeof a)throw new TypeError("encoding must be a string");if("string"==typeof a&&!c.isEncoding(a))throw new TypeError("Unknown encoding: "+a)}else"number"==typeof e&&(e&=255);if(t<0||this.length<t||this.length<s)throw new RangeError("Out of range index");if(s<=t)return this;var n;if(t>>>=0,s=void 0===s?this.length:s>>>0,e||(e=0),"number"==typeof e)for(n=t;n<s;++n)this[n]=e;else{var i=c.isBuffer(e)?e:L(new c(e,a).toString()),o=i.length;for(n=0;n<s-t;++n)this[n+t]=i[n%o]}return this};var _=/[^+\/0-9A-Za-z-_]/g;function F(e){return e<16?"0"+e.toString(16):e.toString(16)}function L(e,t){var s;t=t||1/0;for(var a=e.length,r=null,n=[],i=0;i<a;++i){if((s=e.charCodeAt(i))>55295&&s<57344){if(!r){if(s>56319){(t-=3)>-1&&n.push(239,191,189);continue}if(i+1===a){(t-=3)>-1&&n.push(239,191,189);continue}r=s;continue}if(s<56320){(t-=3)>-1&&n.push(239,191,189),r=s;continue}s=65536+(r-55296<<10|s-56320)}else r&&(t-=3)>-1&&n.push(239,191,189);if(r=null,s<128){if((t-=1)<0)break;n.push(s)}else if(s<2048){if((t-=2)<0)break;n.push(s>>6|192,63&s|128)}else if(s<65536){if((t-=3)<0)break;n.push(s>>12|224,s>>6&63|128,63&s|128)}else{if(!(s<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;n.push(s>>18|240,s>>12&63|128,s>>6&63|128,63&s|128)}}return n}function j(e){return a.toByteArray(function(e){if((e=function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}(e).replace(_,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function q(e,t,s,a){for(var r=0;r<a&&!(r+s>=t.length||r>=e.length);++r)t[r+s]=e[r];return r}}).call(this,s(3))},function(e,t,s){(function(e){!function(e,t){"use strict";function a(e,t){if(!e)throw new Error(t||"Assertion failed")}function r(e,t){e.super_=t;var s=function(){};s.prototype=t.prototype,e.prototype=new s,e.prototype.constructor=e}function n(e,t,s){if(n.isBN(e))return e;this.negative=0,this.words=null,this.length=0,this.red=null,null!==e&&("le"!==t&&"be"!==t||(s=t,t=10),this._init(e||0,t||10,s||"be"))}var i;"object"==typeof e?e.exports=n:t.BN=n,n.BN=n,n.wordSize=26;try{i=s(20).Buffer}catch(e){}function o(e,t,s){for(var a=0,r=Math.min(e.length,s),n=t;n<r;n++){var i=e.charCodeAt(n)-48;a<<=4,a|=i>=49&&i<=54?i-49+10:i>=17&&i<=22?i-17+10:15&i}return a}function c(e,t,s,a){for(var r=0,n=Math.min(e.length,s),i=t;i<n;i++){var o=e.charCodeAt(i)-48;r*=a,r+=o>=49?o-49+10:o>=17?o-17+10:o}return r}n.isBN=function(e){return e instanceof n||null!==e&&"object"==typeof e&&e.constructor.wordSize===n.wordSize&&Array.isArray(e.words)},n.max=function(e,t){return e.cmp(t)>0?e:t},n.min=function(e,t){return e.cmp(t)<0?e:t},n.prototype._init=function(e,t,s){if("number"==typeof e)return this._initNumber(e,t,s);if("object"==typeof e)return this._initArray(e,t,s);"hex"===t&&(t=16),a(t===(0|t)&&t>=2&&t<=36);var r=0;"-"===(e=e.toString().replace(/\s+/g,""))[0]&&r++,16===t?this._parseHex(e,r):this._parseBase(e,t,r),"-"===e[0]&&(this.negative=1),this.strip(),"le"===s&&this._initArray(this.toArray(),t,s)},n.prototype._initNumber=function(e,t,s){e<0&&(this.negative=1,e=-e),e<67108864?(this.words=[67108863&e],this.length=1):e<4503599627370496?(this.words=[67108863&e,e/67108864&67108863],this.length=2):(a(e<9007199254740992),this.words=[67108863&e,e/67108864&67108863,1],this.length=3),"le"===s&&this._initArray(this.toArray(),t,s)},n.prototype._initArray=function(e,t,s){if(a("number"==typeof e.length),e.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(e.length/3),this.words=new Array(this.length);for(var r=0;r<this.length;r++)this.words[r]=0;var n,i,o=0;if("be"===s)for(r=e.length-1,n=0;r>=0;r-=3)i=e[r]|e[r-1]<<8|e[r-2]<<16,this.words[n]|=i<<o&67108863,this.words[n+1]=i>>>26-o&67108863,(o+=24)>=26&&(o-=26,n++);else if("le"===s)for(r=0,n=0;r<e.length;r+=3)i=e[r]|e[r+1]<<8|e[r+2]<<16,this.words[n]|=i<<o&67108863,this.words[n+1]=i>>>26-o&67108863,(o+=24)>=26&&(o-=26,n++);return this.strip()},n.prototype._parseHex=function(e,t){this.length=Math.ceil((e.length-t)/6),this.words=new Array(this.length);for(var s=0;s<this.length;s++)this.words[s]=0;var a,r,n=0;for(s=e.length-6,a=0;s>=t;s-=6)r=o(e,s,s+6),this.words[a]|=r<<n&67108863,this.words[a+1]|=r>>>26-n&4194303,(n+=24)>=26&&(n-=26,a++);s+6!==t&&(r=o(e,t,s+6),this.words[a]|=r<<n&67108863,this.words[a+1]|=r>>>26-n&4194303),this.strip()},n.prototype._parseBase=function(e,t,s){this.words=[0],this.length=1;for(var a=0,r=1;r<=67108863;r*=t)a++;a--,r=r/t|0;for(var n=e.length-s,i=n%a,o=Math.min(n,n-i)+s,u=0,d=s;d<o;d+=a)u=c(e,d,d+a,t),this.imuln(r),this.words[0]+u<67108864?this.words[0]+=u:this._iaddn(u);if(0!==i){var h=1;for(u=c(e,d,e.length,t),d=0;d<i;d++)h*=t;this.imuln(h),this.words[0]+u<67108864?this.words[0]+=u:this._iaddn(u)}},n.prototype.copy=function(e){e.words=new Array(this.length);for(var t=0;t<this.length;t++)e.words[t]=this.words[t];e.length=this.length,e.negative=this.negative,e.red=this.red},n.prototype.clone=function(){var e=new n(null);return this.copy(e),e},n.prototype._expand=function(e){for(;this.length<e;)this.words[this.length++]=0;return this},n.prototype.strip=function(){for(;this.length>1&&0===this.words[this.length-1];)this.length--;return this._normSign()},n.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},n.prototype.inspect=function(){return(this.red?"<BN-R: ":"<BN: ")+this.toString(16)+">"};var u=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],d=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],h=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function l(e,t,s){s.negative=t.negative^e.negative;var a=e.length+t.length|0;s.length=a,a=a-1|0;var r=0|e.words[0],n=0|t.words[0],i=r*n,o=67108863&i,c=i/67108864|0;s.words[0]=o;for(var u=1;u<a;u++){for(var d=c>>>26,h=67108863&c,l=Math.min(u,t.length-1),f=Math.max(0,u-e.length+1);f<=l;f++){var m=u-f|0;d+=(i=(r=0|e.words[m])*(n=0|t.words[f])+h)/67108864|0,h=67108863&i}s.words[u]=0|h,c=0|d}return 0!==c?s.words[u]=0|c:s.length--,s.strip()}n.prototype.toString=function(e,t){var s;if(t=0|t||1,16===(e=e||10)||"hex"===e){s="";for(var r=0,n=0,i=0;i<this.length;i++){var o=this.words[i],c=(16777215&(o<<r|n)).toString(16);s=0!==(n=o>>>24-r&16777215)||i!==this.length-1?u[6-c.length]+c+s:c+s,(r+=2)>=26&&(r-=26,i--)}for(0!==n&&(s=n.toString(16)+s);s.length%t!=0;)s="0"+s;return 0!==this.negative&&(s="-"+s),s}if(e===(0|e)&&e>=2&&e<=36){var l=d[e],f=h[e];s="";var m=this.clone();for(m.negative=0;!m.isZero();){var p=m.modn(f).toString(e);s=(m=m.idivn(f)).isZero()?p+s:u[l-p.length]+p+s}for(this.isZero()&&(s="0"+s);s.length%t!=0;)s="0"+s;return 0!==this.negative&&(s="-"+s),s}a(!1,"Base should be between 2 and 36")},n.prototype.toNumber=function(){var e=this.words[0];return 2===this.length?e+=67108864*this.words[1]:3===this.length&&1===this.words[2]?e+=4503599627370496+67108864*this.words[1]:this.length>2&&a(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-e:e},n.prototype.toJSON=function(){return this.toString(16)},n.prototype.toBuffer=function(e,t){return a(void 0!==i),this.toArrayLike(i,e,t)},n.prototype.toArray=function(e,t){return this.toArrayLike(Array,e,t)},n.prototype.toArrayLike=function(e,t,s){var r=this.byteLength(),n=s||Math.max(1,r);a(r<=n,"byte array longer than desired length"),a(n>0,"Requested array length <= 0"),this.strip();var i,o,c="le"===t,u=new e(n),d=this.clone();if(c){for(o=0;!d.isZero();o++)i=d.andln(255),d.iushrn(8),u[o]=i;for(;o<n;o++)u[o]=0}else{for(o=0;o<n-r;o++)u[o]=0;for(o=0;!d.isZero();o++)i=d.andln(255),d.iushrn(8),u[n-o-1]=i}return u},Math.clz32?n.prototype._countBits=function(e){return 32-Math.clz32(e)}:n.prototype._countBits=function(e){var t=e,s=0;return t>=4096&&(s+=13,t>>>=13),t>=64&&(s+=7,t>>>=7),t>=8&&(s+=4,t>>>=4),t>=2&&(s+=2,t>>>=2),s+t},n.prototype._zeroBits=function(e){if(0===e)return 26;var t=e,s=0;return 0==(8191&t)&&(s+=13,t>>>=13),0==(127&t)&&(s+=7,t>>>=7),0==(15&t)&&(s+=4,t>>>=4),0==(3&t)&&(s+=2,t>>>=2),0==(1&t)&&s++,s},n.prototype.bitLength=function(){var e=this.words[this.length-1],t=this._countBits(e);return 26*(this.length-1)+t},n.prototype.zeroBits=function(){if(this.isZero())return 0;for(var e=0,t=0;t<this.length;t++){var s=this._zeroBits(this.words[t]);if(e+=s,26!==s)break}return e},n.prototype.byteLength=function(){return Math.ceil(this.bitLength()/8)},n.prototype.toTwos=function(e){return 0!==this.negative?this.abs().inotn(e).iaddn(1):this.clone()},n.prototype.fromTwos=function(e){return this.testn(e-1)?this.notn(e).iaddn(1).ineg():this.clone()},n.prototype.isNeg=function(){return 0!==this.negative},n.prototype.neg=function(){return this.clone().ineg()},n.prototype.ineg=function(){return this.isZero()||(this.negative^=1),this},n.prototype.iuor=function(e){for(;this.length<e.length;)this.words[this.length++]=0;for(var t=0;t<e.length;t++)this.words[t]=this.words[t]|e.words[t];return this.strip()},n.prototype.ior=function(e){return a(0==(this.negative|e.negative)),this.iuor(e)},n.prototype.or=function(e){return this.length>e.length?this.clone().ior(e):e.clone().ior(this)},n.prototype.uor=function(e){return this.length>e.length?this.clone().iuor(e):e.clone().iuor(this)},n.prototype.iuand=function(e){var t;t=this.length>e.length?e:this;for(var s=0;s<t.length;s++)this.words[s]=this.words[s]&e.words[s];return this.length=t.length,this.strip()},n.prototype.iand=function(e){return a(0==(this.negative|e.negative)),this.iuand(e)},n.prototype.and=function(e){return this.length>e.length?this.clone().iand(e):e.clone().iand(this)},n.prototype.uand=function(e){return this.length>e.length?this.clone().iuand(e):e.clone().iuand(this)},n.prototype.iuxor=function(e){var t,s;this.length>e.length?(t=this,s=e):(t=e,s=this);for(var a=0;a<s.length;a++)this.words[a]=t.words[a]^s.words[a];if(this!==t)for(;a<t.length;a++)this.words[a]=t.words[a];return this.length=t.length,this.strip()},n.prototype.ixor=function(e){return a(0==(this.negative|e.negative)),this.iuxor(e)},n.prototype.xor=function(e){return this.length>e.length?this.clone().ixor(e):e.clone().ixor(this)},n.prototype.uxor=function(e){return this.length>e.length?this.clone().iuxor(e):e.clone().iuxor(this)},n.prototype.inotn=function(e){a("number"==typeof e&&e>=0);var t=0|Math.ceil(e/26),s=e%26;this._expand(t),s>0&&t--;for(var r=0;r<t;r++)this.words[r]=67108863&~this.words[r];return s>0&&(this.words[r]=~this.words[r]&67108863>>26-s),this.strip()},n.prototype.notn=function(e){return this.clone().inotn(e)},n.prototype.setn=function(e,t){a("number"==typeof e&&e>=0);var s=e/26|0,r=e%26;return this._expand(s+1),this.words[s]=t?this.words[s]|1<<r:this.words[s]&~(1<<r),this.strip()},n.prototype.iadd=function(e){var t,s,a;if(0!==this.negative&&0===e.negative)return this.negative=0,t=this.isub(e),this.negative^=1,this._normSign();if(0===this.negative&&0!==e.negative)return e.negative=0,t=this.isub(e),e.negative=1,t._normSign();this.length>e.length?(s=this,a=e):(s=e,a=this);for(var r=0,n=0;n<a.length;n++)t=(0|s.words[n])+(0|a.words[n])+r,this.words[n]=67108863&t,r=t>>>26;for(;0!==r&&n<s.length;n++)t=(0|s.words[n])+r,this.words[n]=67108863&t,r=t>>>26;if(this.length=s.length,0!==r)this.words[this.length]=r,this.length++;else if(s!==this)for(;n<s.length;n++)this.words[n]=s.words[n];return this},n.prototype.add=function(e){var t;return 0!==e.negative&&0===this.negative?(e.negative=0,t=this.sub(e),e.negative^=1,t):0===e.negative&&0!==this.negative?(this.negative=0,t=e.sub(this),this.negative=1,t):this.length>e.length?this.clone().iadd(e):e.clone().iadd(this)},n.prototype.isub=function(e){if(0!==e.negative){e.negative=0;var t=this.iadd(e);return e.negative=1,t._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(e),this.negative=1,this._normSign();var s,a,r=this.cmp(e);if(0===r)return this.negative=0,this.length=1,this.words[0]=0,this;r>0?(s=this,a=e):(s=e,a=this);for(var n=0,i=0;i<a.length;i++)n=(t=(0|s.words[i])-(0|a.words[i])+n)>>26,this.words[i]=67108863&t;for(;0!==n&&i<s.length;i++)n=(t=(0|s.words[i])+n)>>26,this.words[i]=67108863&t;if(0===n&&i<s.length&&s!==this)for(;i<s.length;i++)this.words[i]=s.words[i];return this.length=Math.max(this.length,i),s!==this&&(this.negative=1),this.strip()},n.prototype.sub=function(e){return this.clone().isub(e)};var f=function(e,t,s){var a,r,n,i=e.words,o=t.words,c=s.words,u=0,d=0|i[0],h=8191&d,l=d>>>13,f=0|i[1],m=8191&f,p=f>>>13,w=0|i[2],g=8191&w,y=w>>>13,b=0|i[3],v=8191&b,M=b>>>13,S=0|i[4],I=8191&S,P=S>>>13,E=0|i[5],B=8191&E,N=E>>>13,U=0|i[6],A=8191&U,T=U>>>13,k=0|i[7],D=8191&k,K=k>>>13,x=0|i[8],R=8191&x,O=x>>>13,C=0|i[9],_=8191&C,F=C>>>13,L=0|o[0],j=8191&L,q=L>>>13,V=0|o[1],H=8191&V,G=V>>>13,J=0|o[2],W=8191&J,Y=J>>>13,z=0|o[3],Z=8191&z,X=z>>>13,Q=0|o[4],$=8191&Q,ee=Q>>>13,te=0|o[5],se=8191&te,ae=te>>>13,re=0|o[6],ne=8191&re,ie=re>>>13,oe=0|o[7],ce=8191&oe,ue=oe>>>13,de=0|o[8],he=8191&de,le=de>>>13,fe=0|o[9],me=8191&fe,pe=fe>>>13;s.negative=e.negative^t.negative,s.length=19;var we=(u+(a=Math.imul(h,j))|0)+((8191&(r=(r=Math.imul(h,q))+Math.imul(l,j)|0))<<13)|0;u=((n=Math.imul(l,q))+(r>>>13)|0)+(we>>>26)|0,we&=67108863,a=Math.imul(m,j),r=(r=Math.imul(m,q))+Math.imul(p,j)|0,n=Math.imul(p,q);var ge=(u+(a=a+Math.imul(h,H)|0)|0)+((8191&(r=(r=r+Math.imul(h,G)|0)+Math.imul(l,H)|0))<<13)|0;u=((n=n+Math.imul(l,G)|0)+(r>>>13)|0)+(ge>>>26)|0,ge&=67108863,a=Math.imul(g,j),r=(r=Math.imul(g,q))+Math.imul(y,j)|0,n=Math.imul(y,q),a=a+Math.imul(m,H)|0,r=(r=r+Math.imul(m,G)|0)+Math.imul(p,H)|0,n=n+Math.imul(p,G)|0;var ye=(u+(a=a+Math.imul(h,W)|0)|0)+((8191&(r=(r=r+Math.imul(h,Y)|0)+Math.imul(l,W)|0))<<13)|0;u=((n=n+Math.imul(l,Y)|0)+(r>>>13)|0)+(ye>>>26)|0,ye&=67108863,a=Math.imul(v,j),r=(r=Math.imul(v,q))+Math.imul(M,j)|0,n=Math.imul(M,q),a=a+Math.imul(g,H)|0,r=(r=r+Math.imul(g,G)|0)+Math.imul(y,H)|0,n=n+Math.imul(y,G)|0,a=a+Math.imul(m,W)|0,r=(r=r+Math.imul(m,Y)|0)+Math.imul(p,W)|0,n=n+Math.imul(p,Y)|0;var be=(u+(a=a+Math.imul(h,Z)|0)|0)+((8191&(r=(r=r+Math.imul(h,X)|0)+Math.imul(l,Z)|0))<<13)|0;u=((n=n+Math.imul(l,X)|0)+(r>>>13)|0)+(be>>>26)|0,be&=67108863,a=Math.imul(I,j),r=(r=Math.imul(I,q))+Math.imul(P,j)|0,n=Math.imul(P,q),a=a+Math.imul(v,H)|0,r=(r=r+Math.imul(v,G)|0)+Math.imul(M,H)|0,n=n+Math.imul(M,G)|0,a=a+Math.imul(g,W)|0,r=(r=r+Math.imul(g,Y)|0)+Math.imul(y,W)|0,n=n+Math.imul(y,Y)|0,a=a+Math.imul(m,Z)|0,r=(r=r+Math.imul(m,X)|0)+Math.imul(p,Z)|0,n=n+Math.imul(p,X)|0;var ve=(u+(a=a+Math.imul(h,$)|0)|0)+((8191&(r=(r=r+Math.imul(h,ee)|0)+Math.imul(l,$)|0))<<13)|0;u=((n=n+Math.imul(l,ee)|0)+(r>>>13)|0)+(ve>>>26)|0,ve&=67108863,a=Math.imul(B,j),r=(r=Math.imul(B,q))+Math.imul(N,j)|0,n=Math.imul(N,q),a=a+Math.imul(I,H)|0,r=(r=r+Math.imul(I,G)|0)+Math.imul(P,H)|0,n=n+Math.imul(P,G)|0,a=a+Math.imul(v,W)|0,r=(r=r+Math.imul(v,Y)|0)+Math.imul(M,W)|0,n=n+Math.imul(M,Y)|0,a=a+Math.imul(g,Z)|0,r=(r=r+Math.imul(g,X)|0)+Math.imul(y,Z)|0,n=n+Math.imul(y,X)|0,a=a+Math.imul(m,$)|0,r=(r=r+Math.imul(m,ee)|0)+Math.imul(p,$)|0,n=n+Math.imul(p,ee)|0;var Me=(u+(a=a+Math.imul(h,se)|0)|0)+((8191&(r=(r=r+Math.imul(h,ae)|0)+Math.imul(l,se)|0))<<13)|0;u=((n=n+Math.imul(l,ae)|0)+(r>>>13)|0)+(Me>>>26)|0,Me&=67108863,a=Math.imul(A,j),r=(r=Math.imul(A,q))+Math.imul(T,j)|0,n=Math.imul(T,q),a=a+Math.imul(B,H)|0,r=(r=r+Math.imul(B,G)|0)+Math.imul(N,H)|0,n=n+Math.imul(N,G)|0,a=a+Math.imul(I,W)|0,r=(r=r+Math.imul(I,Y)|0)+Math.imul(P,W)|0,n=n+Math.imul(P,Y)|0,a=a+Math.imul(v,Z)|0,r=(r=r+Math.imul(v,X)|0)+Math.imul(M,Z)|0,n=n+Math.imul(M,X)|0,a=a+Math.imul(g,$)|0,r=(r=r+Math.imul(g,ee)|0)+Math.imul(y,$)|0,n=n+Math.imul(y,ee)|0,a=a+Math.imul(m,se)|0,r=(r=r+Math.imul(m,ae)|0)+Math.imul(p,se)|0,n=n+Math.imul(p,ae)|0;var Se=(u+(a=a+Math.imul(h,ne)|0)|0)+((8191&(r=(r=r+Math.imul(h,ie)|0)+Math.imul(l,ne)|0))<<13)|0;u=((n=n+Math.imul(l,ie)|0)+(r>>>13)|0)+(Se>>>26)|0,Se&=67108863,a=Math.imul(D,j),r=(r=Math.imul(D,q))+Math.imul(K,j)|0,n=Math.imul(K,q),a=a+Math.imul(A,H)|0,r=(r=r+Math.imul(A,G)|0)+Math.imul(T,H)|0,n=n+Math.imul(T,G)|0,a=a+Math.imul(B,W)|0,r=(r=r+Math.imul(B,Y)|0)+Math.imul(N,W)|0,n=n+Math.imul(N,Y)|0,a=a+Math.imul(I,Z)|0,r=(r=r+Math.imul(I,X)|0)+Math.imul(P,Z)|0,n=n+Math.imul(P,X)|0,a=a+Math.imul(v,$)|0,r=(r=r+Math.imul(v,ee)|0)+Math.imul(M,$)|0,n=n+Math.imul(M,ee)|0,a=a+Math.imul(g,se)|0,r=(r=r+Math.imul(g,ae)|0)+Math.imul(y,se)|0,n=n+Math.imul(y,ae)|0,a=a+Math.imul(m,ne)|0,r=(r=r+Math.imul(m,ie)|0)+Math.imul(p,ne)|0,n=n+Math.imul(p,ie)|0;var Ie=(u+(a=a+Math.imul(h,ce)|0)|0)+((8191&(r=(r=r+Math.imul(h,ue)|0)+Math.imul(l,ce)|0))<<13)|0;u=((n=n+Math.imul(l,ue)|0)+(r>>>13)|0)+(Ie>>>26)|0,Ie&=67108863,a=Math.imul(R,j),r=(r=Math.imul(R,q))+Math.imul(O,j)|0,n=Math.imul(O,q),a=a+Math.imul(D,H)|0,r=(r=r+Math.imul(D,G)|0)+Math.imul(K,H)|0,n=n+Math.imul(K,G)|0,a=a+Math.imul(A,W)|0,r=(r=r+Math.imul(A,Y)|0)+Math.imul(T,W)|0,n=n+Math.imul(T,Y)|0,a=a+Math.imul(B,Z)|0,r=(r=r+Math.imul(B,X)|0)+Math.imul(N,Z)|0,n=n+Math.imul(N,X)|0,a=a+Math.imul(I,$)|0,r=(r=r+Math.imul(I,ee)|0)+Math.imul(P,$)|0,n=n+Math.imul(P,ee)|0,a=a+Math.imul(v,se)|0,r=(r=r+Math.imul(v,ae)|0)+Math.imul(M,se)|0,n=n+Math.imul(M,ae)|0,a=a+Math.imul(g,ne)|0,r=(r=r+Math.imul(g,ie)|0)+Math.imul(y,ne)|0,n=n+Math.imul(y,ie)|0,a=a+Math.imul(m,ce)|0,r=(r=r+Math.imul(m,ue)|0)+Math.imul(p,ce)|0,n=n+Math.imul(p,ue)|0;var Pe=(u+(a=a+Math.imul(h,he)|0)|0)+((8191&(r=(r=r+Math.imul(h,le)|0)+Math.imul(l,he)|0))<<13)|0;u=((n=n+Math.imul(l,le)|0)+(r>>>13)|0)+(Pe>>>26)|0,Pe&=67108863,a=Math.imul(_,j),r=(r=Math.imul(_,q))+Math.imul(F,j)|0,n=Math.imul(F,q),a=a+Math.imul(R,H)|0,r=(r=r+Math.imul(R,G)|0)+Math.imul(O,H)|0,n=n+Math.imul(O,G)|0,a=a+Math.imul(D,W)|0,r=(r=r+Math.imul(D,Y)|0)+Math.imul(K,W)|0,n=n+Math.imul(K,Y)|0,a=a+Math.imul(A,Z)|0,r=(r=r+Math.imul(A,X)|0)+Math.imul(T,Z)|0,n=n+Math.imul(T,X)|0,a=a+Math.imul(B,$)|0,r=(r=r+Math.imul(B,ee)|0)+Math.imul(N,$)|0,n=n+Math.imul(N,ee)|0,a=a+Math.imul(I,se)|0,r=(r=r+Math.imul(I,ae)|0)+Math.imul(P,se)|0,n=n+Math.imul(P,ae)|0,a=a+Math.imul(v,ne)|0,r=(r=r+Math.imul(v,ie)|0)+Math.imul(M,ne)|0,n=n+Math.imul(M,ie)|0,a=a+Math.imul(g,ce)|0,r=(r=r+Math.imul(g,ue)|0)+Math.imul(y,ce)|0,n=n+Math.imul(y,ue)|0,a=a+Math.imul(m,he)|0,r=(r=r+Math.imul(m,le)|0)+Math.imul(p,he)|0,n=n+Math.imul(p,le)|0;var Ee=(u+(a=a+Math.imul(h,me)|0)|0)+((8191&(r=(r=r+Math.imul(h,pe)|0)+Math.imul(l,me)|0))<<13)|0;u=((n=n+Math.imul(l,pe)|0)+(r>>>13)|0)+(Ee>>>26)|0,Ee&=67108863,a=Math.imul(_,H),r=(r=Math.imul(_,G))+Math.imul(F,H)|0,n=Math.imul(F,G),a=a+Math.imul(R,W)|0,r=(r=r+Math.imul(R,Y)|0)+Math.imul(O,W)|0,n=n+Math.imul(O,Y)|0,a=a+Math.imul(D,Z)|0,r=(r=r+Math.imul(D,X)|0)+Math.imul(K,Z)|0,n=n+Math.imul(K,X)|0,a=a+Math.imul(A,$)|0,r=(r=r+Math.imul(A,ee)|0)+Math.imul(T,$)|0,n=n+Math.imul(T,ee)|0,a=a+Math.imul(B,se)|0,r=(r=r+Math.imul(B,ae)|0)+Math.imul(N,se)|0,n=n+Math.imul(N,ae)|0,a=a+Math.imul(I,ne)|0,r=(r=r+Math.imul(I,ie)|0)+Math.imul(P,ne)|0,n=n+Math.imul(P,ie)|0,a=a+Math.imul(v,ce)|0,r=(r=r+Math.imul(v,ue)|0)+Math.imul(M,ce)|0,n=n+Math.imul(M,ue)|0,a=a+Math.imul(g,he)|0,r=(r=r+Math.imul(g,le)|0)+Math.imul(y,he)|0,n=n+Math.imul(y,le)|0;var Be=(u+(a=a+Math.imul(m,me)|0)|0)+((8191&(r=(r=r+Math.imul(m,pe)|0)+Math.imul(p,me)|0))<<13)|0;u=((n=n+Math.imul(p,pe)|0)+(r>>>13)|0)+(Be>>>26)|0,Be&=67108863,a=Math.imul(_,W),r=(r=Math.imul(_,Y))+Math.imul(F,W)|0,n=Math.imul(F,Y),a=a+Math.imul(R,Z)|0,r=(r=r+Math.imul(R,X)|0)+Math.imul(O,Z)|0,n=n+Math.imul(O,X)|0,a=a+Math.imul(D,$)|0,r=(r=r+Math.imul(D,ee)|0)+Math.imul(K,$)|0,n=n+Math.imul(K,ee)|0,a=a+Math.imul(A,se)|0,r=(r=r+Math.imul(A,ae)|0)+Math.imul(T,se)|0,n=n+Math.imul(T,ae)|0,a=a+Math.imul(B,ne)|0,r=(r=r+Math.imul(B,ie)|0)+Math.imul(N,ne)|0,n=n+Math.imul(N,ie)|0,a=a+Math.imul(I,ce)|0,r=(r=r+Math.imul(I,ue)|0)+Math.imul(P,ce)|0,n=n+Math.imul(P,ue)|0,a=a+Math.imul(v,he)|0,r=(r=r+Math.imul(v,le)|0)+Math.imul(M,he)|0,n=n+Math.imul(M,le)|0;var Ne=(u+(a=a+Math.imul(g,me)|0)|0)+((8191&(r=(r=r+Math.imul(g,pe)|0)+Math.imul(y,me)|0))<<13)|0;u=((n=n+Math.imul(y,pe)|0)+(r>>>13)|0)+(Ne>>>26)|0,Ne&=67108863,a=Math.imul(_,Z),r=(r=Math.imul(_,X))+Math.imul(F,Z)|0,n=Math.imul(F,X),a=a+Math.imul(R,$)|0,r=(r=r+Math.imul(R,ee)|0)+Math.imul(O,$)|0,n=n+Math.imul(O,ee)|0,a=a+Math.imul(D,se)|0,r=(r=r+Math.imul(D,ae)|0)+Math.imul(K,se)|0,n=n+Math.imul(K,ae)|0,a=a+Math.imul(A,ne)|0,r=(r=r+Math.imul(A,ie)|0)+Math.imul(T,ne)|0,n=n+Math.imul(T,ie)|0,a=a+Math.imul(B,ce)|0,r=(r=r+Math.imul(B,ue)|0)+Math.imul(N,ce)|0,n=n+Math.imul(N,ue)|0,a=a+Math.imul(I,he)|0,r=(r=r+Math.imul(I,le)|0)+Math.imul(P,he)|0,n=n+Math.imul(P,le)|0;var Ue=(u+(a=a+Math.imul(v,me)|0)|0)+((8191&(r=(r=r+Math.imul(v,pe)|0)+Math.imul(M,me)|0))<<13)|0;u=((n=n+Math.imul(M,pe)|0)+(r>>>13)|0)+(Ue>>>26)|0,Ue&=67108863,a=Math.imul(_,$),r=(r=Math.imul(_,ee))+Math.imul(F,$)|0,n=Math.imul(F,ee),a=a+Math.imul(R,se)|0,r=(r=r+Math.imul(R,ae)|0)+Math.imul(O,se)|0,n=n+Math.imul(O,ae)|0,a=a+Math.imul(D,ne)|0,r=(r=r+Math.imul(D,ie)|0)+Math.imul(K,ne)|0,n=n+Math.imul(K,ie)|0,a=a+Math.imul(A,ce)|0,r=(r=r+Math.imul(A,ue)|0)+Math.imul(T,ce)|0,n=n+Math.imul(T,ue)|0,a=a+Math.imul(B,he)|0,r=(r=r+Math.imul(B,le)|0)+Math.imul(N,he)|0,n=n+Math.imul(N,le)|0;var Ae=(u+(a=a+Math.imul(I,me)|0)|0)+((8191&(r=(r=r+Math.imul(I,pe)|0)+Math.imul(P,me)|0))<<13)|0;u=((n=n+Math.imul(P,pe)|0)+(r>>>13)|0)+(Ae>>>26)|0,Ae&=67108863,a=Math.imul(_,se),r=(r=Math.imul(_,ae))+Math.imul(F,se)|0,n=Math.imul(F,ae),a=a+Math.imul(R,ne)|0,r=(r=r+Math.imul(R,ie)|0)+Math.imul(O,ne)|0,n=n+Math.imul(O,ie)|0,a=a+Math.imul(D,ce)|0,r=(r=r+Math.imul(D,ue)|0)+Math.imul(K,ce)|0,n=n+Math.imul(K,ue)|0,a=a+Math.imul(A,he)|0,r=(r=r+Math.imul(A,le)|0)+Math.imul(T,he)|0,n=n+Math.imul(T,le)|0;var Te=(u+(a=a+Math.imul(B,me)|0)|0)+((8191&(r=(r=r+Math.imul(B,pe)|0)+Math.imul(N,me)|0))<<13)|0;u=((n=n+Math.imul(N,pe)|0)+(r>>>13)|0)+(Te>>>26)|0,Te&=67108863,a=Math.imul(_,ne),r=(r=Math.imul(_,ie))+Math.imul(F,ne)|0,n=Math.imul(F,ie),a=a+Math.imul(R,ce)|0,r=(r=r+Math.imul(R,ue)|0)+Math.imul(O,ce)|0,n=n+Math.imul(O,ue)|0,a=a+Math.imul(D,he)|0,r=(r=r+Math.imul(D,le)|0)+Math.imul(K,he)|0,n=n+Math.imul(K,le)|0;var ke=(u+(a=a+Math.imul(A,me)|0)|0)+((8191&(r=(r=r+Math.imul(A,pe)|0)+Math.imul(T,me)|0))<<13)|0;u=((n=n+Math.imul(T,pe)|0)+(r>>>13)|0)+(ke>>>26)|0,ke&=67108863,a=Math.imul(_,ce),r=(r=Math.imul(_,ue))+Math.imul(F,ce)|0,n=Math.imul(F,ue),a=a+Math.imul(R,he)|0,r=(r=r+Math.imul(R,le)|0)+Math.imul(O,he)|0,n=n+Math.imul(O,le)|0;var De=(u+(a=a+Math.imul(D,me)|0)|0)+((8191&(r=(r=r+Math.imul(D,pe)|0)+Math.imul(K,me)|0))<<13)|0;u=((n=n+Math.imul(K,pe)|0)+(r>>>13)|0)+(De>>>26)|0,De&=67108863,a=Math.imul(_,he),r=(r=Math.imul(_,le))+Math.imul(F,he)|0,n=Math.imul(F,le);var Ke=(u+(a=a+Math.imul(R,me)|0)|0)+((8191&(r=(r=r+Math.imul(R,pe)|0)+Math.imul(O,me)|0))<<13)|0;u=((n=n+Math.imul(O,pe)|0)+(r>>>13)|0)+(Ke>>>26)|0,Ke&=67108863;var xe=(u+(a=Math.imul(_,me))|0)+((8191&(r=(r=Math.imul(_,pe))+Math.imul(F,me)|0))<<13)|0;return u=((n=Math.imul(F,pe))+(r>>>13)|0)+(xe>>>26)|0,xe&=67108863,c[0]=we,c[1]=ge,c[2]=ye,c[3]=be,c[4]=ve,c[5]=Me,c[6]=Se,c[7]=Ie,c[8]=Pe,c[9]=Ee,c[10]=Be,c[11]=Ne,c[12]=Ue,c[13]=Ae,c[14]=Te,c[15]=ke,c[16]=De,c[17]=Ke,c[18]=xe,0!==u&&(c[19]=u,s.length++),s};function m(e,t,s){return(new p).mulp(e,t,s)}function p(e,t){this.x=e,this.y=t}Math.imul||(f=l),n.prototype.mulTo=function(e,t){var s=this.length+e.length;return 10===this.length&&10===e.length?f(this,e,t):s<63?l(this,e,t):s<1024?function(e,t,s){s.negative=t.negative^e.negative,s.length=e.length+t.length;for(var a=0,r=0,n=0;n<s.length-1;n++){var i=r;r=0;for(var o=67108863&a,c=Math.min(n,t.length-1),u=Math.max(0,n-e.length+1);u<=c;u++){var d=n-u,h=(0|e.words[d])*(0|t.words[u]),l=67108863&h;o=67108863&(l=l+o|0),r+=(i=(i=i+(h/67108864|0)|0)+(l>>>26)|0)>>>26,i&=67108863}s.words[n]=o,a=i,i=r}return 0!==a?s.words[n]=a:s.length--,s.strip()}(this,e,t):m(this,e,t)},p.prototype.makeRBT=function(e){for(var t=new Array(e),s=n.prototype._countBits(e)-1,a=0;a<e;a++)t[a]=this.revBin(a,s,e);return t},p.prototype.revBin=function(e,t,s){if(0===e||e===s-1)return e;for(var a=0,r=0;r<t;r++)a|=(1&e)<<t-r-1,e>>=1;return a},p.prototype.permute=function(e,t,s,a,r,n){for(var i=0;i<n;i++)a[i]=t[e[i]],r[i]=s[e[i]]},p.prototype.transform=function(e,t,s,a,r,n){this.permute(n,e,t,s,a,r);for(var i=1;i<r;i<<=1)for(var o=i<<1,c=Math.cos(2*Math.PI/o),u=Math.sin(2*Math.PI/o),d=0;d<r;d+=o)for(var h=c,l=u,f=0;f<i;f++){var m=s[d+f],p=a[d+f],w=s[d+f+i],g=a[d+f+i],y=h*w-l*g;g=h*g+l*w,w=y,s[d+f]=m+w,a[d+f]=p+g,s[d+f+i]=m-w,a[d+f+i]=p-g,f!==o&&(y=c*h-u*l,l=c*l+u*h,h=y)}},p.prototype.guessLen13b=function(e,t){var s=1|Math.max(t,e),a=1&s,r=0;for(s=s/2|0;s;s>>>=1)r++;return 1<<r+1+a},p.prototype.conjugate=function(e,t,s){if(!(s<=1))for(var a=0;a<s/2;a++){var r=e[a];e[a]=e[s-a-1],e[s-a-1]=r,r=t[a],t[a]=-t[s-a-1],t[s-a-1]=-r}},p.prototype.normalize13b=function(e,t){for(var s=0,a=0;a<t/2;a++){var r=8192*Math.round(e[2*a+1]/t)+Math.round(e[2*a]/t)+s;e[a]=67108863&r,s=r<67108864?0:r/67108864|0}return e},p.prototype.convert13b=function(e,t,s,r){for(var n=0,i=0;i<t;i++)n+=0|e[i],s[2*i]=8191&n,n>>>=13,s[2*i+1]=8191&n,n>>>=13;for(i=2*t;i<r;++i)s[i]=0;a(0===n),a(0==(-8192&n))},p.prototype.stub=function(e){for(var t=new Array(e),s=0;s<e;s++)t[s]=0;return t},p.prototype.mulp=function(e,t,s){var a=2*this.guessLen13b(e.length,t.length),r=this.makeRBT(a),n=this.stub(a),i=new Array(a),o=new Array(a),c=new Array(a),u=new Array(a),d=new Array(a),h=new Array(a),l=s.words;l.length=a,this.convert13b(e.words,e.length,i,a),this.convert13b(t.words,t.length,u,a),this.transform(i,n,o,c,a,r),this.transform(u,n,d,h,a,r);for(var f=0;f<a;f++){var m=o[f]*d[f]-c[f]*h[f];c[f]=o[f]*h[f]+c[f]*d[f],o[f]=m}return this.conjugate(o,c,a),this.transform(o,c,l,n,a,r),this.conjugate(l,n,a),this.normalize13b(l,a),s.negative=e.negative^t.negative,s.length=e.length+t.length,s.strip()},n.prototype.mul=function(e){var t=new n(null);return t.words=new Array(this.length+e.length),this.mulTo(e,t)},n.prototype.mulf=function(e){var t=new n(null);return t.words=new Array(this.length+e.length),m(this,e,t)},n.prototype.imul=function(e){return this.clone().mulTo(e,this)},n.prototype.imuln=function(e){a("number"==typeof e),a(e<67108864);for(var t=0,s=0;s<this.length;s++){var r=(0|this.words[s])*e,n=(67108863&r)+(67108863&t);t>>=26,t+=r/67108864|0,t+=n>>>26,this.words[s]=67108863&n}return 0!==t&&(this.words[s]=t,this.length++),this},n.prototype.muln=function(e){return this.clone().imuln(e)},n.prototype.sqr=function(){return this.mul(this)},n.prototype.isqr=function(){return this.imul(this.clone())},n.prototype.pow=function(e){var t=function(e){for(var t=new Array(e.bitLength()),s=0;s<t.length;s++){var a=s/26|0,r=s%26;t[s]=(e.words[a]&1<<r)>>>r}return t}(e);if(0===t.length)return new n(1);for(var s=this,a=0;a<t.length&&0===t[a];a++,s=s.sqr());if(++a<t.length)for(var r=s.sqr();a<t.length;a++,r=r.sqr())0!==t[a]&&(s=s.mul(r));return s},n.prototype.iushln=function(e){a("number"==typeof e&&e>=0);var t,s=e%26,r=(e-s)/26,n=67108863>>>26-s<<26-s;if(0!==s){var i=0;for(t=0;t<this.length;t++){var o=this.words[t]&n,c=(0|this.words[t])-o<<s;this.words[t]=c|i,i=o>>>26-s}i&&(this.words[t]=i,this.length++)}if(0!==r){for(t=this.length-1;t>=0;t--)this.words[t+r]=this.words[t];for(t=0;t<r;t++)this.words[t]=0;this.length+=r}return this.strip()},n.prototype.ishln=function(e){return a(0===this.negative),this.iushln(e)},n.prototype.iushrn=function(e,t,s){var r;a("number"==typeof e&&e>=0),r=t?(t-t%26)/26:0;var n=e%26,i=Math.min((e-n)/26,this.length),o=67108863^67108863>>>n<<n,c=s;if(r-=i,r=Math.max(0,r),c){for(var u=0;u<i;u++)c.words[u]=this.words[u];c.length=i}if(0===i);else if(this.length>i)for(this.length-=i,u=0;u<this.length;u++)this.words[u]=this.words[u+i];else this.words[0]=0,this.length=1;var d=0;for(u=this.length-1;u>=0&&(0!==d||u>=r);u--){var h=0|this.words[u];this.words[u]=d<<26-n|h>>>n,d=h&o}return c&&0!==d&&(c.words[c.length++]=d),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},n.prototype.ishrn=function(e,t,s){return a(0===this.negative),this.iushrn(e,t,s)},n.prototype.shln=function(e){return this.clone().ishln(e)},n.prototype.ushln=function(e){return this.clone().iushln(e)},n.prototype.shrn=function(e){return this.clone().ishrn(e)},n.prototype.ushrn=function(e){return this.clone().iushrn(e)},n.prototype.testn=function(e){a("number"==typeof e&&e>=0);var t=e%26,s=(e-t)/26,r=1<<t;return!(this.length<=s)&&!!(this.words[s]&r)},n.prototype.imaskn=function(e){a("number"==typeof e&&e>=0);var t=e%26,s=(e-t)/26;if(a(0===this.negative,"imaskn works only with positive numbers"),this.length<=s)return this;if(0!==t&&s++,this.length=Math.min(s,this.length),0!==t){var r=67108863^67108863>>>t<<t;this.words[this.length-1]&=r}return this.strip()},n.prototype.maskn=function(e){return this.clone().imaskn(e)},n.prototype.iaddn=function(e){return a("number"==typeof e),a(e<67108864),e<0?this.isubn(-e):0!==this.negative?1===this.length&&(0|this.words[0])<e?(this.words[0]=e-(0|this.words[0]),this.negative=0,this):(this.negative=0,this.isubn(e),this.negative=1,this):this._iaddn(e)},n.prototype._iaddn=function(e){this.words[0]+=e;for(var t=0;t<this.length&&this.words[t]>=67108864;t++)this.words[t]-=67108864,t===this.length-1?this.words[t+1]=1:this.words[t+1]++;return this.length=Math.max(this.length,t+1),this},n.prototype.isubn=function(e){if(a("number"==typeof e),a(e<67108864),e<0)return this.iaddn(-e);if(0!==this.negative)return this.negative=0,this.iaddn(e),this.negative=1,this;if(this.words[0]-=e,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var t=0;t<this.length&&this.words[t]<0;t++)this.words[t]+=67108864,this.words[t+1]-=1;return this.strip()},n.prototype.addn=function(e){return this.clone().iaddn(e)},n.prototype.subn=function(e){return this.clone().isubn(e)},n.prototype.iabs=function(){return this.negative=0,this},n.prototype.abs=function(){return this.clone().iabs()},n.prototype._ishlnsubmul=function(e,t,s){var r,n,i=e.length+s;this._expand(i);var o=0;for(r=0;r<e.length;r++){n=(0|this.words[r+s])+o;var c=(0|e.words[r])*t;o=((n-=67108863&c)>>26)-(c/67108864|0),this.words[r+s]=67108863&n}for(;r<this.length-s;r++)o=(n=(0|this.words[r+s])+o)>>26,this.words[r+s]=67108863&n;if(0===o)return this.strip();for(a(-1===o),o=0,r=0;r<this.length;r++)o=(n=-(0|this.words[r])+o)>>26,this.words[r]=67108863&n;return this.negative=1,this.strip()},n.prototype._wordDiv=function(e,t){var s=(this.length,e.length),a=this.clone(),r=e,i=0|r.words[r.length-1];0!==(s=26-this._countBits(i))&&(r=r.ushln(s),a.iushln(s),i=0|r.words[r.length-1]);var o,c=a.length-r.length;if("mod"!==t){(o=new n(null)).length=c+1,o.words=new Array(o.length);for(var u=0;u<o.length;u++)o.words[u]=0}var d=a.clone()._ishlnsubmul(r,1,c);0===d.negative&&(a=d,o&&(o.words[c]=1));for(var h=c-1;h>=0;h--){var l=67108864*(0|a.words[r.length+h])+(0|a.words[r.length+h-1]);for(l=Math.min(l/i|0,67108863),a._ishlnsubmul(r,l,h);0!==a.negative;)l--,a.negative=0,a._ishlnsubmul(r,1,h),a.isZero()||(a.negative^=1);o&&(o.words[h]=l)}return o&&o.strip(),a.strip(),"div"!==t&&0!==s&&a.iushrn(s),{div:o||null,mod:a}},n.prototype.divmod=function(e,t,s){return a(!e.isZero()),this.isZero()?{div:new n(0),mod:new n(0)}:0!==this.negative&&0===e.negative?(o=this.neg().divmod(e,t),"mod"!==t&&(r=o.div.neg()),"div"!==t&&(i=o.mod.neg(),s&&0!==i.negative&&i.iadd(e)),{div:r,mod:i}):0===this.negative&&0!==e.negative?(o=this.divmod(e.neg(),t),"mod"!==t&&(r=o.div.neg()),{div:r,mod:o.mod}):0!=(this.negative&e.negative)?(o=this.neg().divmod(e.neg(),t),"div"!==t&&(i=o.mod.neg(),s&&0!==i.negative&&i.isub(e)),{div:o.div,mod:i}):e.length>this.length||this.cmp(e)<0?{div:new n(0),mod:this}:1===e.length?"div"===t?{div:this.divn(e.words[0]),mod:null}:"mod"===t?{div:null,mod:new n(this.modn(e.words[0]))}:{div:this.divn(e.words[0]),mod:new n(this.modn(e.words[0]))}:this._wordDiv(e,t);var r,i,o},n.prototype.div=function(e){return this.divmod(e,"div",!1).div},n.prototype.mod=function(e){return this.divmod(e,"mod",!1).mod},n.prototype.umod=function(e){return this.divmod(e,"mod",!0).mod},n.prototype.divRound=function(e){var t=this.divmod(e);if(t.mod.isZero())return t.div;var s=0!==t.div.negative?t.mod.isub(e):t.mod,a=e.ushrn(1),r=e.andln(1),n=s.cmp(a);return n<0||1===r&&0===n?t.div:0!==t.div.negative?t.div.isubn(1):t.div.iaddn(1)},n.prototype.modn=function(e){a(e<=67108863);for(var t=(1<<26)%e,s=0,r=this.length-1;r>=0;r--)s=(t*s+(0|this.words[r]))%e;return s},n.prototype.idivn=function(e){a(e<=67108863);for(var t=0,s=this.length-1;s>=0;s--){var r=(0|this.words[s])+67108864*t;this.words[s]=r/e|0,t=r%e}return this.strip()},n.prototype.divn=function(e){return this.clone().idivn(e)},n.prototype.egcd=function(e){a(0===e.negative),a(!e.isZero());var t=this,s=e.clone();t=0!==t.negative?t.umod(e):t.clone();for(var r=new n(1),i=new n(0),o=new n(0),c=new n(1),u=0;t.isEven()&&s.isEven();)t.iushrn(1),s.iushrn(1),++u;for(var d=s.clone(),h=t.clone();!t.isZero();){for(var l=0,f=1;0==(t.words[0]&f)&&l<26;++l,f<<=1);if(l>0)for(t.iushrn(l);l-- >0;)(r.isOdd()||i.isOdd())&&(r.iadd(d),i.isub(h)),r.iushrn(1),i.iushrn(1);for(var m=0,p=1;0==(s.words[0]&p)&&m<26;++m,p<<=1);if(m>0)for(s.iushrn(m);m-- >0;)(o.isOdd()||c.isOdd())&&(o.iadd(d),c.isub(h)),o.iushrn(1),c.iushrn(1);t.cmp(s)>=0?(t.isub(s),r.isub(o),i.isub(c)):(s.isub(t),o.isub(r),c.isub(i))}return{a:o,b:c,gcd:s.iushln(u)}},n.prototype._invmp=function(e){a(0===e.negative),a(!e.isZero());var t=this,s=e.clone();t=0!==t.negative?t.umod(e):t.clone();for(var r,i=new n(1),o=new n(0),c=s.clone();t.cmpn(1)>0&&s.cmpn(1)>0;){for(var u=0,d=1;0==(t.words[0]&d)&&u<26;++u,d<<=1);if(u>0)for(t.iushrn(u);u-- >0;)i.isOdd()&&i.iadd(c),i.iushrn(1);for(var h=0,l=1;0==(s.words[0]&l)&&h<26;++h,l<<=1);if(h>0)for(s.iushrn(h);h-- >0;)o.isOdd()&&o.iadd(c),o.iushrn(1);t.cmp(s)>=0?(t.isub(s),i.isub(o)):(s.isub(t),o.isub(i))}return(r=0===t.cmpn(1)?i:o).cmpn(0)<0&&r.iadd(e),r},n.prototype.gcd=function(e){if(this.isZero())return e.abs();if(e.isZero())return this.abs();var t=this.clone(),s=e.clone();t.negative=0,s.negative=0;for(var a=0;t.isEven()&&s.isEven();a++)t.iushrn(1),s.iushrn(1);for(;;){for(;t.isEven();)t.iushrn(1);for(;s.isEven();)s.iushrn(1);var r=t.cmp(s);if(r<0){var n=t;t=s,s=n}else if(0===r||0===s.cmpn(1))break;t.isub(s)}return s.iushln(a)},n.prototype.invm=function(e){return this.egcd(e).a.umod(e)},n.prototype.isEven=function(){return 0==(1&this.words[0])},n.prototype.isOdd=function(){return 1==(1&this.words[0])},n.prototype.andln=function(e){return this.words[0]&e},n.prototype.bincn=function(e){a("number"==typeof e);var t=e%26,s=(e-t)/26,r=1<<t;if(this.length<=s)return this._expand(s+1),this.words[s]|=r,this;for(var n=r,i=s;0!==n&&i<this.length;i++){var o=0|this.words[i];n=(o+=n)>>>26,o&=67108863,this.words[i]=o}return 0!==n&&(this.words[i]=n,this.length++),this},n.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},n.prototype.cmpn=function(e){var t,s=e<0;if(0!==this.negative&&!s)return-1;if(0===this.negative&&s)return 1;if(this.strip(),this.length>1)t=1;else{s&&(e=-e),a(e<=67108863,"Number is too big");var r=0|this.words[0];t=r===e?0:r<e?-1:1}return 0!==this.negative?0|-t:t},n.prototype.cmp=function(e){if(0!==this.negative&&0===e.negative)return-1;if(0===this.negative&&0!==e.negative)return 1;var t=this.ucmp(e);return 0!==this.negative?0|-t:t},n.prototype.ucmp=function(e){if(this.length>e.length)return 1;if(this.length<e.length)return-1;for(var t=0,s=this.length-1;s>=0;s--){var a=0|this.words[s],r=0|e.words[s];if(a!==r){a<r?t=-1:a>r&&(t=1);break}}return t},n.prototype.gtn=function(e){return 1===this.cmpn(e)},n.prototype.gt=function(e){return 1===this.cmp(e)},n.prototype.gten=function(e){return this.cmpn(e)>=0},n.prototype.gte=function(e){return this.cmp(e)>=0},n.prototype.ltn=function(e){return-1===this.cmpn(e)},n.prototype.lt=function(e){return-1===this.cmp(e)},n.prototype.lten=function(e){return this.cmpn(e)<=0},n.prototype.lte=function(e){return this.cmp(e)<=0},n.prototype.eqn=function(e){return 0===this.cmpn(e)},n.prototype.eq=function(e){return 0===this.cmp(e)},n.red=function(e){return new S(e)},n.prototype.toRed=function(e){return a(!this.red,"Already a number in reduction context"),a(0===this.negative,"red works only with positives"),e.convertTo(this)._forceRed(e)},n.prototype.fromRed=function(){return a(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},n.prototype._forceRed=function(e){return this.red=e,this},n.prototype.forceRed=function(e){return a(!this.red,"Already a number in reduction context"),this._forceRed(e)},n.prototype.redAdd=function(e){return a(this.red,"redAdd works only with red numbers"),this.red.add(this,e)},n.prototype.redIAdd=function(e){return a(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,e)},n.prototype.redSub=function(e){return a(this.red,"redSub works only with red numbers"),this.red.sub(this,e)},n.prototype.redISub=function(e){return a(this.red,"redISub works only with red numbers"),this.red.isub(this,e)},n.prototype.redShl=function(e){return a(this.red,"redShl works only with red numbers"),this.red.shl(this,e)},n.prototype.redMul=function(e){return a(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.mul(this,e)},n.prototype.redIMul=function(e){return a(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.imul(this,e)},n.prototype.redSqr=function(){return a(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},n.prototype.redISqr=function(){return a(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},n.prototype.redSqrt=function(){return a(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},n.prototype.redInvm=function(){return a(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},n.prototype.redNeg=function(){return a(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},n.prototype.redPow=function(e){return a(this.red&&!e.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,e)};var w={k256:null,p224:null,p192:null,p25519:null};function g(e,t){this.name=e,this.p=new n(t,16),this.n=this.p.bitLength(),this.k=new n(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function y(){g.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function b(){g.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function v(){g.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function M(){g.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function S(e){if("string"==typeof e){var t=n._prime(e);this.m=t.p,this.prime=t}else a(e.gtn(1),"modulus must be greater than 1"),this.m=e,this.prime=null}function I(e){S.call(this,e),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new n(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}g.prototype._tmp=function(){var e=new n(null);return e.words=new Array(Math.ceil(this.n/13)),e},g.prototype.ireduce=function(e){var t,s=e;do{this.split(s,this.tmp),t=(s=(s=this.imulK(s)).iadd(this.tmp)).bitLength()}while(t>this.n);var a=t<this.n?-1:s.ucmp(this.p);return 0===a?(s.words[0]=0,s.length=1):a>0?s.isub(this.p):void 0!==s.strip?s.strip():s._strip(),s},g.prototype.split=function(e,t){e.iushrn(this.n,0,t)},g.prototype.imulK=function(e){return e.imul(this.k)},r(y,g),y.prototype.split=function(e,t){for(var s=Math.min(e.length,9),a=0;a<s;a++)t.words[a]=e.words[a];if(t.length=s,e.length<=9)return e.words[0]=0,void(e.length=1);var r=e.words[9];for(t.words[t.length++]=4194303&r,a=10;a<e.length;a++){var n=0|e.words[a];e.words[a-10]=(4194303&n)<<4|r>>>22,r=n}r>>>=22,e.words[a-10]=r,0===r&&e.length>10?e.length-=10:e.length-=9},y.prototype.imulK=function(e){e.words[e.length]=0,e.words[e.length+1]=0,e.length+=2;for(var t=0,s=0;s<e.length;s++){var a=0|e.words[s];t+=977*a,e.words[s]=67108863&t,t=64*a+(t/67108864|0)}return 0===e.words[e.length-1]&&(e.length--,0===e.words[e.length-1]&&e.length--),e},r(b,g),r(v,g),r(M,g),M.prototype.imulK=function(e){for(var t=0,s=0;s<e.length;s++){var a=19*(0|e.words[s])+t,r=67108863&a;a>>>=26,e.words[s]=r,t=a}return 0!==t&&(e.words[e.length++]=t),e},n._prime=function(e){if(w[e])return w[e];var t;if("k256"===e)t=new y;else if("p224"===e)t=new b;else if("p192"===e)t=new v;else{if("p25519"!==e)throw new Error("Unknown prime "+e);t=new M}return w[e]=t,t},S.prototype._verify1=function(e){a(0===e.negative,"red works only with positives"),a(e.red,"red works only with red numbers")},S.prototype._verify2=function(e,t){a(0==(e.negative|t.negative),"red works only with positives"),a(e.red&&e.red===t.red,"red works only with red numbers")},S.prototype.imod=function(e){return this.prime?this.prime.ireduce(e)._forceRed(this):e.umod(this.m)._forceRed(this)},S.prototype.neg=function(e){return e.isZero()?e.clone():this.m.sub(e)._forceRed(this)},S.prototype.add=function(e,t){this._verify2(e,t);var s=e.add(t);return s.cmp(this.m)>=0&&s.isub(this.m),s._forceRed(this)},S.prototype.iadd=function(e,t){this._verify2(e,t);var s=e.iadd(t);return s.cmp(this.m)>=0&&s.isub(this.m),s},S.prototype.sub=function(e,t){this._verify2(e,t);var s=e.sub(t);return s.cmpn(0)<0&&s.iadd(this.m),s._forceRed(this)},S.prototype.isub=function(e,t){this._verify2(e,t);var s=e.isub(t);return s.cmpn(0)<0&&s.iadd(this.m),s},S.prototype.shl=function(e,t){return this._verify1(e),this.imod(e.ushln(t))},S.prototype.imul=function(e,t){return this._verify2(e,t),this.imod(e.imul(t))},S.prototype.mul=function(e,t){return this._verify2(e,t),this.imod(e.mul(t))},S.prototype.isqr=function(e){return this.imul(e,e.clone())},S.prototype.sqr=function(e){return this.mul(e,e)},S.prototype.sqrt=function(e){if(e.isZero())return e.clone();var t=this.m.andln(3);if(a(t%2==1),3===t){var s=this.m.add(new n(1)).iushrn(2);return this.pow(e,s)}for(var r=this.m.subn(1),i=0;!r.isZero()&&0===r.andln(1);)i++,r.iushrn(1);a(!r.isZero());var o=new n(1).toRed(this),c=o.redNeg(),u=this.m.subn(1).iushrn(1),d=this.m.bitLength();for(d=new n(2*d*d).toRed(this);0!==this.pow(d,u).cmp(c);)d.redIAdd(c);for(var h=this.pow(d,r),l=this.pow(e,r.addn(1).iushrn(1)),f=this.pow(e,r),m=i;0!==f.cmp(o);){for(var p=f,w=0;0!==p.cmp(o);w++)p=p.redSqr();a(w<m);var g=this.pow(h,new n(1).iushln(m-w-1));l=l.redMul(g),h=g.redSqr(),f=f.redMul(h),m=w}return l},S.prototype.invm=function(e){var t=e._invmp(this.m);return 0!==t.negative?(t.negative=0,this.imod(t).redNeg()):this.imod(t)},S.prototype.pow=function(e,t){if(t.isZero())return new n(1).toRed(this);if(0===t.cmpn(1))return e.clone();var s=new Array(16);s[0]=new n(1).toRed(this),s[1]=e;for(var a=2;a<s.length;a++)s[a]=this.mul(s[a-1],e);var r=s[0],i=0,o=0,c=t.bitLength()%26;for(0===c&&(c=26),a=t.length-1;a>=0;a--){for(var u=t.words[a],d=c-1;d>=0;d--){var h=u>>d&1;r!==s[0]&&(r=this.sqr(r)),0!==h||0!==i?(i<<=1,i|=h,(4===++o||0===a&&0===d)&&(r=this.mul(r,s[i]),o=0,i=0)):o=0}c=26}return r},S.prototype.convertTo=function(e){var t=e.umod(this.m);return t===e?t.clone():t},S.prototype.convertFrom=function(e){var t=e.clone();return t.red=null,t},n.mont=function(e){return new I(e)},r(I,S),I.prototype.convertTo=function(e){return this.imod(e.ushln(this.shift))},I.prototype.convertFrom=function(e){var t=this.imod(e.mul(this.rinv));return t.red=null,t},I.prototype.imul=function(e,t){if(e.isZero()||t.isZero())return e.words[0]=0,e.length=1,e;var s=e.imul(t),a=s.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),r=s.isub(a).iushrn(this.shift),n=r;return r.cmp(this.m)>=0?n=r.isub(this.m):r.cmpn(0)<0&&(n=r.iadd(this.m)),n._forceRed(this)},I.prototype.mul=function(e,t){if(e.isZero()||t.isZero())return new n(0)._forceRed(this);var s=e.mul(t),a=s.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),r=s.isub(a).iushrn(this.shift),i=r;return r.cmp(this.m)>=0?i=r.isub(this.m):r.cmpn(0)<0&&(i=r.iadd(this.m)),i._forceRed(this)},I.prototype.invm=function(e){return this.imod(e._invmp(this.m).mul(this.r2))._forceRed(this)}}(e,this)}).call(this,s(19)(e))},function(e,t,s){var a=s(7);e.exports=y,y.simpleSieve=w,y.fermatTest=g;var r=s(5),n=new r(24),i=new(s(9)),o=new r(1),c=new r(2),u=new r(5),d=(new r(16),new r(8),new r(10)),h=new r(3),l=(new r(7),new r(11)),f=new r(4),m=(new r(12),null);function p(){if(null!==m)return m;var e=[];e[0]=2;for(var t=1,s=3;s<1048576;s+=2){for(var a=Math.ceil(Math.sqrt(s)),r=0;r<t&&e[r]<=a&&s%e[r]!=0;r++);t!==r&&e[r]<=a||(e[t++]=s)}return m=e,e}function w(e){for(var t=p(),s=0;s<t.length;s++)if(0===e.modn(t[s]))return 0===e.cmpn(t[s]);return!0}function g(e){var t=r.mont(e);return 0===c.toRed(t).redPow(e.subn(1)).fromRed().cmpn(1)}function y(e,t){if(e<16)return new r(2===t||5===t?[140,123]:[140,39]);var s,m;for(t=new r(t);;){for(s=new r(a(Math.ceil(e/8)));s.bitLength()>e;)s.ishrn(1);if(s.isEven()&&s.iadd(o),s.testn(1)||s.iadd(c),t.cmp(c)){if(!t.cmp(u))for(;s.mod(d).cmp(h);)s.iadd(f)}else for(;s.mod(n).cmp(l);)s.iadd(f);if(w(m=s.shrn(1))&&w(s)&&g(m)&&g(s)&&i.test(m)&&i.test(s))return s}}},function(e,t,s){"use strict";(function(t,a){var r=s(18).Buffer,n=t.crypto||t.msCrypto;n&&n.getRandomValues?e.exports=function(e,t){if(e>4294967295)throw new RangeError("requested too many random bytes");var s=r.allocUnsafe(e);if(e>0)if(e>65536)for(var i=0;i<e;i+=65536)n.getRandomValues(s.slice(i,i+65536));else n.getRandomValues(s);if("function"==typeof t)return a.nextTick((function(){t(null,s)}));return s}:e.exports=function(){throw new Error("Secure random number generation is not supported by this browser.\nUse Chrome, Firefox or Internet Explorer 11")}}).call(this,s(3),s(8))},function(e,t){var s,a,r=e.exports={};function n(){throw new Error("setTimeout has not been defined")}function i(){throw new Error("clearTimeout has not been defined")}function o(e){if(s===setTimeout)return setTimeout(e,0);if((s===n||!s)&&setTimeout)return s=setTimeout,setTimeout(e,0);try{return s(e,0)}catch(t){try{return s.call(null,e,0)}catch(t){return s.call(this,e,0)}}}!function(){try{s="function"==typeof setTimeout?setTimeout:n}catch(e){s=n}try{a="function"==typeof clearTimeout?clearTimeout:i}catch(e){a=i}}();var c,u=[],d=!1,h=-1;function l(){d&&c&&(d=!1,c.length?u=c.concat(u):h=-1,u.length&&f())}function f(){if(!d){var e=o(l);d=!0;for(var t=u.length;t;){for(c=u,u=[];++h<t;)c&&c[h].run();h=-1,t=u.length}c=null,d=!1,function(e){if(a===clearTimeout)return clearTimeout(e);if((a===i||!a)&&clearTimeout)return a=clearTimeout,clearTimeout(e);try{a(e)}catch(t){try{return a.call(null,e)}catch(t){return a.call(this,e)}}}(e)}}function m(e,t){this.fun=e,this.array=t}function p(){}r.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var s=1;s<arguments.length;s++)t[s-1]=arguments[s];u.push(new m(e,t)),1!==u.length||d||o(f)},m.prototype.run=function(){this.fun.apply(null,this.array)},r.title="browser",r.browser=!0,r.env={},r.argv=[],r.version="",r.versions={},r.on=p,r.addListener=p,r.once=p,r.off=p,r.removeListener=p,r.removeAllListeners=p,r.emit=p,r.prependListener=p,r.prependOnceListener=p,r.listeners=function(e){return[]},r.binding=function(e){throw new Error("process.binding is not supported")},r.cwd=function(){return"/"},r.chdir=function(e){throw new Error("process.chdir is not supported")},r.umask=function(){return 0}},function(e,t,s){var a=s(5),r=s(21);function n(e){this.rand=e||new r.Rand}e.exports=n,n.create=function(e){return new n(e)},n.prototype._randbelow=function(e){var t=e.bitLength(),s=Math.ceil(t/8);do{var r=new a(this.rand.generate(s))}while(r.cmp(e)>=0);return r},n.prototype._randrange=function(e,t){var s=t.sub(e);return e.add(this._randbelow(s))},n.prototype.test=function(e,t,s){var r=e.bitLength(),n=a.mont(e),i=new a(1).toRed(n);t||(t=Math.max(1,r/48|0));for(var o=e.subn(1),c=0;!o.testn(c);c++);for(var u=e.shrn(c),d=o.toRed(n);t>0;t--){var h=this._randrange(new a(2),o);s&&s(h);var l=h.toRed(n).redPow(u);if(0!==l.cmp(i)&&0!==l.cmp(d)){for(var f=1;f<c;f++){if(0===(l=l.redSqr()).cmp(i))return!1;if(0===l.cmp(d))break}if(f===c)return!1}}return!0},n.prototype.getDivisor=function(e,t){var s=e.bitLength(),r=a.mont(e),n=new a(1).toRed(r);t||(t=Math.max(1,s/48|0));for(var i=e.subn(1),o=0;!i.testn(o);o++);for(var c=e.shrn(o),u=i.toRed(r);t>0;t--){var d=this._randrange(new a(2),i),h=e.gcd(d);if(0!==h.cmpn(1))return h;var l=d.toRed(r).redPow(c);if(0!==l.cmp(n)&&0!==l.cmp(u)){for(var f=1;f<o;f++){if(0===(l=l.redSqr()).cmp(n))return l.fromRed().subn(1).gcd(e);if(0===l.cmp(u))break}if(f===o)return(l=l.redSqr()).fromRed().subn(1).gcd(e)}}return!1}},function(e,t,s){(function(e){var a=s(6),r=s(23),n=s(24);var i={binary:!0,hex:!0,base64:!0};t.DiffieHellmanGroup=t.createDiffieHellmanGroup=t.getDiffieHellman=function(t){var s=new e(r[t].prime,"hex"),a=new e(r[t].gen,"hex");return new n(s,a)},t.createDiffieHellman=t.DiffieHellman=function t(s,r,o,c){return e.isBuffer(r)||void 0===i[r]?t(s,"binary",r,o):(r=r||"binary",c=c||"binary",o=o||new e([2]),e.isBuffer(o)||(o=new e(o,c)),"number"==typeof s?new n(a(s,o),o,!0):(e.isBuffer(s)||(s=new e(s,r)),new n(s,o,!0)))}}).call(this,s(4).Buffer)},function(e,t,s){"use strict";(function(t){!function(s){function a(e){const t=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]);let s=1779033703,a=3144134277,r=1013904242,n=2773480762,i=1359893119,o=2600822924,c=528734635,u=1541459225;const d=new Uint32Array(64);function h(e){let h=0,l=e.length;for(;l>=64;){let f,m,p,w,g,y=s,b=a,v=r,M=n,S=i,I=o,P=c,E=u;for(m=0;m<16;m++)p=h+4*m,d[m]=(255&e[p])<<24|(255&e[p+1])<<16|(255&e[p+2])<<8|255&e[p+3];for(m=16;m<64;m++)f=d[m-2],w=(f>>>17|f<<15)^(f>>>19|f<<13)^f>>>10,f=d[m-15],g=(f>>>7|f<<25)^(f>>>18|f<<14)^f>>>3,d[m]=(w+d[m-7]|0)+(g+d[m-16]|0)|0;for(m=0;m<64;m++)w=(((S>>>6|S<<26)^(S>>>11|S<<21)^(S>>>25|S<<7))+(S&I^~S&P)|0)+(E+(t[m]+d[m]|0)|0)|0,g=((y>>>2|y<<30)^(y>>>13|y<<19)^(y>>>22|y<<10))+(y&b^y&v^b&v)|0,E=P,P=I,I=S,S=M+w|0,M=v,v=b,b=y,y=w+g|0;s=s+y|0,a=a+b|0,r=r+v|0,n=n+M|0,i=i+S|0,o=o+I|0,c=c+P|0,u=u+E|0,h+=64,l-=64}}h(e);let l,f=e.length%64,m=e.length/536870912|0,p=e.length<<3,w=f<56?56:120,g=e.slice(e.length-f,e.length);for(g.push(128),l=f+1;l<w;l++)g.push(0);return g.push(m>>>24&255),g.push(m>>>16&255),g.push(m>>>8&255),g.push(m>>>0&255),g.push(p>>>24&255),g.push(p>>>16&255),g.push(p>>>8&255),g.push(p>>>0&255),h(g),[s>>>24&255,s>>>16&255,s>>>8&255,s>>>0&255,a>>>24&255,a>>>16&255,a>>>8&255,a>>>0&255,r>>>24&255,r>>>16&255,r>>>8&255,r>>>0&255,n>>>24&255,n>>>16&255,n>>>8&255,n>>>0&255,i>>>24&255,i>>>16&255,i>>>8&255,i>>>0&255,o>>>24&255,o>>>16&255,o>>>8&255,o>>>0&255,c>>>24&255,c>>>16&255,c>>>8&255,c>>>0&255,u>>>24&255,u>>>16&255,u>>>8&255,u>>>0&255]}function r(e,t,s){e=e.length<=64?e:a(e);const r=64+t.length+4,n=new Array(r),i=new Array(64);let o,c=[];for(o=0;o<64;o++)n[o]=54;for(o=0;o<e.length;o++)n[o]^=e[o];for(o=0;o<t.length;o++)n[64+o]=t[o];for(o=r-4;o<r;o++)n[o]=0;for(o=0;o<64;o++)i[o]=92;for(o=0;o<e.length;o++)i[o]^=e[o];function u(){for(let e=r-1;e>=r-4;e--){if(n[e]++,n[e]<=255)return;n[e]=0}}for(;s>=32;)u(),c=c.concat(a(i.concat(a(n)))),s-=32;return s>0&&(u(),c=c.concat(a(i.concat(a(n))).slice(0,s))),c}function n(e,t,s,a,r){let n;for(u(e,16*(2*s-1),r,0,16),n=0;n<2*s;n++)c(e,16*n,r,16),o(r,a),u(r,0,e,t+16*n,16);for(n=0;n<s;n++)u(e,t+2*n*16,e,16*n,16);for(n=0;n<s;n++)u(e,t+16*(2*n+1),e,16*(n+s),16)}function i(e,t){return e<<t|e>>>32-t}function o(e,t){u(e,0,t,0,16);for(let e=8;e>0;e-=2)t[4]^=i(t[0]+t[12],7),t[8]^=i(t[4]+t[0],9),t[12]^=i(t[8]+t[4],13),t[0]^=i(t[12]+t[8],18),t[9]^=i(t[5]+t[1],7),t[13]^=i(t[9]+t[5],9),t[1]^=i(t[13]+t[9],13),t[5]^=i(t[1]+t[13],18),t[14]^=i(t[10]+t[6],7),t[2]^=i(t[14]+t[10],9),t[6]^=i(t[2]+t[14],13),t[10]^=i(t[6]+t[2],18),t[3]^=i(t[15]+t[11],7),t[7]^=i(t[3]+t[15],9),t[11]^=i(t[7]+t[3],13),t[15]^=i(t[11]+t[7],18),t[1]^=i(t[0]+t[3],7),t[2]^=i(t[1]+t[0],9),t[3]^=i(t[2]+t[1],13),t[0]^=i(t[3]+t[2],18),t[6]^=i(t[5]+t[4],7),t[7]^=i(t[6]+t[5],9),t[4]^=i(t[7]+t[6],13),t[5]^=i(t[4]+t[7],18),t[11]^=i(t[10]+t[9],7),t[8]^=i(t[11]+t[10],9),t[9]^=i(t[8]+t[11],13),t[10]^=i(t[9]+t[8],18),t[12]^=i(t[15]+t[14],7),t[13]^=i(t[12]+t[15],9),t[14]^=i(t[13]+t[12],13),t[15]^=i(t[14]+t[13],18);for(let s=0;s<16;++s)e[s]+=t[s]}function c(e,t,s,a){for(let r=0;r<a;r++)s[r]^=e[t+r]}function u(e,t,s,a,r){for(;r--;)s[a++]=e[t++]}function d(e){if(!e||"number"!=typeof e.length)return!1;for(let t=0;t<e.length;t++){const s=e[t];if("number"!=typeof s||s%1||s<0||s>=256)return!1}return!0}function h(e,t){if("number"!=typeof e||e%1)throw new Error("invalid "+t);return e}function l(e,s,a,i,o,l,f){if(a=h(a,"N"),i=h(i,"r"),o=h(o,"p"),l=h(l,"dkLen"),0===a||0!=(a&a-1))throw new Error("N must be power of 2");if(a>2147483647/128/i)throw new Error("N too large");if(i>2147483647/128/o)throw new Error("r too large");if(!d(e))throw new Error("password must be an array or buffer");if(e=Array.prototype.slice.call(e),!d(s))throw new Error("salt must be an array or buffer");s=Array.prototype.slice.call(s);let m=r(e,s,128*o*i);const p=new Uint32Array(32*o*i);for(let e=0;e<p.length;e++){const t=4*e;p[e]=(255&m[t+3])<<24|(255&m[t+2])<<16|(255&m[t+1])<<8|(255&m[t+0])<<0}const w=new Uint32Array(64*i),g=new Uint32Array(32*i*a),y=32*i,b=new Uint32Array(16),v=new Uint32Array(16),M=o*a*2;let S,I,P=0,E=null,B=!1,N=0,U=0;const A=f?parseInt(1e3/i):4294967295,T=void 0!==t?t:setTimeout,k=function(){if(B)return f(new Error("cancelled"),P/M);let t;switch(N){case 0:I=32*U*i,u(p,I,w,0,y),N=1,S=0;case 1:t=a-S,t>A&&(t=A);for(let e=0;e<t;e++)u(w,0,g,(S+e)*y,y),n(w,y,i,b,v);if(S+=t,P+=t,f){const e=parseInt(1e3*P/M);if(e!==E){if(B=f(null,P/M),B)break;E=e}}if(S<a)break;S=0,N=2;case 2:t=a-S,t>A&&(t=A);for(let e=0;e<t;e++){const e=w[16*(2*i-1)]&a-1;c(g,e*y,w,y),n(w,y,i,b,v)}if(S+=t,P+=t,f){const e=parseInt(1e3*P/M);if(e!==E){if(B=f(null,P/M),B)break;E=e}}if(S<a)break;if(u(w,0,p,I,y),U++,U<o){N=0;break}m=[];for(let e=0;e<p.length;e++)m.push(p[e]>>0&255),m.push(p[e]>>8&255),m.push(p[e]>>16&255),m.push(p[e]>>24&255);const s=r(e,m,l);return f&&f(null,1,s),s}f&&T(k)};if(!f)for(;;){const e=k();if(null!=e)return e}k()}const f={scrypt:function(e,t,s,a,r,n,i){return new Promise((function(o,c){let u=0;i&&i(0),l(e,t,s,a,r,n,(function(e,t,s){if(e)c(e);else if(s)i&&1!==u&&i(1),o(new Uint8Array(s));else if(i&&t!==u)return u=t,i(t)}))}))},syncScrypt:function(e,t,s,a,r,n){return new Uint8Array(l(e,t,s,a,r,n))}};e.exports=f}()}).call(this,s(25).setImmediate)},function(e,t,s){var a,r=function(){var e,t,s=((t=(e={constructor:function(e,t){this.array=[],this.compare=t||a;for(var s=e.length,r=0;r<s;)this.insert(e[r++])},insert:function(e){for(var t,s,a=this.array,r=this.compare,n=a.length-1,i=0,o=-1;n>=i;)if((s=r(a[t=(n+i)/2>>>0],e))<0)i=t+1;else{if(!(s>0)){o=t;break}n=t-1}for(-1===o&&(o=n),o++,n=a.length-1;o<n&&0===r(e,a[o]);)o++;for(t=a.length,a.push(e);t>o;)a[t]=a[--t];return a[o]=e,this},search:function(e){for(var t,s,a=this.array,r=this.compare,n=a.length-1,i=0;n>=i;)if((s=r(a[t=(n+i)/2>>>0],e))<0)i=t+1;else{if(!(s>0))return t;n=t-1}return-1},remove:function(e){var t=this.search(e);return t>=0&&this.array.splice(t,1),this}}).constructor).prototype=e,t);return s.comparing=function(e,t){return new s(t,(function(t,s){return a(t[e],s[e])}))},s;function a(e,t){return e<t?-1:e>t?1:0}}();e.exports=r,void 0===(a=function(){return r}.call(t,s,t,e))||(e.exports=a)},function(e,t){var s="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof window.msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto);if(s){var a=new Uint8Array(16);e.exports=function(){return s(a),a}}else{var r=new Array(16);e.exports=function(){for(var e,t=0;t<16;t++)0==(3&t)&&(e=4294967296*Math.random()),r[t]=e>>>((3&t)<<3)&255;return r}}},function(e,t){for(var s=[],a=0;a<256;++a)s[a]=(a+256).toString(16).substr(1);e.exports=function(e,t){var a=t||0,r=s;return[r[e[a++]],r[e[a++]],r[e[a++]],r[e[a++]],"-",r[e[a++]],r[e[a++]],"-",r[e[a++]],r[e[a++]],"-",r[e[a++]],r[e[a++]],"-",r[e[a++]],r[e[a++]],r[e[a++]],r[e[a++]],r[e[a++]],r[e[a++]]].join("")}},function(e,t,s){"use strict";t.byteLength=function(e){var t=u(e),s=t[0],a=t[1];return 3*(s+a)/4-a},t.toByteArray=function(e){var t,s,a=u(e),i=a[0],o=a[1],c=new n(function(e,t,s){return 3*(t+s)/4-s}(0,i,o)),d=0,h=o>0?i-4:i;for(s=0;s<h;s+=4)t=r[e.charCodeAt(s)]<<18|r[e.charCodeAt(s+1)]<<12|r[e.charCodeAt(s+2)]<<6|r[e.charCodeAt(s+3)],c[d++]=t>>16&255,c[d++]=t>>8&255,c[d++]=255&t;2===o&&(t=r[e.charCodeAt(s)]<<2|r[e.charCodeAt(s+1)]>>4,c[d++]=255&t);1===o&&(t=r[e.charCodeAt(s)]<<10|r[e.charCodeAt(s+1)]<<4|r[e.charCodeAt(s+2)]>>2,c[d++]=t>>8&255,c[d++]=255&t);return c},t.fromByteArray=function(e){for(var t,s=e.length,r=s%3,n=[],i=0,o=s-r;i<o;i+=16383)n.push(d(e,i,i+16383>o?o:i+16383));1===r?(t=e[s-1],n.push(a[t>>2]+a[t<<4&63]+"==")):2===r&&(t=(e[s-2]<<8)+e[s-1],n.push(a[t>>10]+a[t>>4&63]+a[t<<2&63]+"="));return n.join("")};for(var a=[],r=[],n="undefined"!=typeof Uint8Array?Uint8Array:Array,i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",o=0,c=i.length;o<c;++o)a[o]=i[o],r[i.charCodeAt(o)]=o;function u(e){var t=e.length;if(t%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var s=e.indexOf("=");return-1===s&&(s=t),[s,s===t?0:4-s%4]}function d(e,t,s){for(var r,n,i=[],o=t;o<s;o+=3)r=(e[o]<<16&16711680)+(e[o+1]<<8&65280)+(255&e[o+2]),i.push(a[(n=r)>>18&63]+a[n>>12&63]+a[n>>6&63]+a[63&n]);return i.join("")}r["-".charCodeAt(0)]=62,r["_".charCodeAt(0)]=63},function(e,t){ +/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */ +t.read=function(e,t,s,a,r){var n,i,o=8*r-a-1,c=(1<<o)-1,u=c>>1,d=-7,h=s?r-1:0,l=s?-1:1,f=e[t+h];for(h+=l,n=f&(1<<-d)-1,f>>=-d,d+=o;d>0;n=256*n+e[t+h],h+=l,d-=8);for(i=n&(1<<-d)-1,n>>=-d,d+=a;d>0;i=256*i+e[t+h],h+=l,d-=8);if(0===n)n=1-u;else{if(n===c)return i?NaN:1/0*(f?-1:1);i+=Math.pow(2,a),n-=u}return(f?-1:1)*i*Math.pow(2,n-a)},t.write=function(e,t,s,a,r,n){var i,o,c,u=8*n-r-1,d=(1<<u)-1,h=d>>1,l=23===r?Math.pow(2,-24)-Math.pow(2,-77):0,f=a?0:n-1,m=a?1:-1,p=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(o=isNaN(t)?1:0,i=d):(i=Math.floor(Math.log(t)/Math.LN2),t*(c=Math.pow(2,-i))<1&&(i--,c*=2),(t+=i+h>=1?l/c:l*Math.pow(2,1-h))*c>=2&&(i++,c/=2),i+h>=d?(o=0,i=d):i+h>=1?(o=(t*c-1)*Math.pow(2,r),i+=h):(o=t*Math.pow(2,h-1)*Math.pow(2,r),i=0));r>=8;e[s+f]=255&o,f+=m,o/=256,r-=8);for(i=i<<r|o,u+=r;u>0;e[s+f]=255&i,f+=m,i/=256,u-=8);e[s+f-m]|=128*p}},function(e,t){var s={}.toString;e.exports=Array.isArray||function(e){return"[object Array]"==s.call(e)}},function(e,t,s){ +/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */ +var a=s(4),r=a.Buffer;function n(e,t){for(var s in e)t[s]=e[s]}function i(e,t,s){return r(e,t,s)}r.from&&r.alloc&&r.allocUnsafe&&r.allocUnsafeSlow?e.exports=a:(n(a,t),t.Buffer=i),i.prototype=Object.create(r.prototype),n(r,i),i.from=function(e,t,s){if("number"==typeof e)throw new TypeError("Argument must not be a number");return r(e,t,s)},i.alloc=function(e,t,s){if("number"!=typeof e)throw new TypeError("Argument must be a number");var a=r(e);return void 0!==t?"string"==typeof s?a.fill(t,s):a.fill(t):a.fill(0),a},i.allocUnsafe=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return r(e)},i.allocUnsafeSlow=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return a.SlowBuffer(e)}},function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},function(e,t){},function(e,t,s){var a;function r(e){this.rand=e}if(e.exports=function(e){return a||(a=new r(null)),a.generate(e)},e.exports.Rand=r,r.prototype.generate=function(e){return this._rand(e)},r.prototype._rand=function(e){if(this.rand.getBytes)return this.rand.getBytes(e);for(var t=new Uint8Array(e),s=0;s<t.length;s++)t[s]=this.rand.getByte();return t},"object"==typeof self)self.crypto&&self.crypto.getRandomValues?r.prototype._rand=function(e){var t=new Uint8Array(e);return self.crypto.getRandomValues(t),t}:self.msCrypto&&self.msCrypto.getRandomValues?r.prototype._rand=function(e){var t=new Uint8Array(e);return self.msCrypto.getRandomValues(t),t}:"object"==typeof window&&(r.prototype._rand=function(){throw new Error("Not implemented yet")});else try{var n=s(22);if("function"!=typeof n.randomBytes)throw new Error("Not supported");r.prototype._rand=function(e){return n.randomBytes(e)}}catch(e){}},function(e,t){},function(e){e.exports=JSON.parse('{"modp1":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff"},"modp2":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff"},"modp5":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff"},"modp14":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff"},"modp15":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff"},"modp16":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff"},"modp17":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff"},"modp18":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff"}}')},function(e,t,s){(function(t){var a=s(5),r=new(s(9)),n=new a(24),i=new a(11),o=new a(10),c=new a(3),u=new a(7),d=s(6),h=s(7);function l(e,s){return s=s||"utf8",t.isBuffer(e)||(e=new t(e,s)),this._pub=new a(e),this}function f(e,s){return s=s||"utf8",t.isBuffer(e)||(e=new t(e,s)),this._priv=new a(e),this}e.exports=p;var m={};function p(e,t,s){this.setGenerator(t),this.__prime=new a(e),this._prime=a.mont(this.__prime),this._primeLen=e.length,this._pub=void 0,this._priv=void 0,this._primeCode=void 0,s?(this.setPublicKey=l,this.setPrivateKey=f):this._primeCode=8}function w(e,s){var a=new t(e.toArray());return s?a.toString(s):a}Object.defineProperty(p.prototype,"verifyError",{enumerable:!0,get:function(){return"number"!=typeof this._primeCode&&(this._primeCode=function(e,t){var s=t.toString("hex"),a=[s,e.toString(16)].join("_");if(a in m)return m[a];var h,l=0;if(e.isEven()||!d.simpleSieve||!d.fermatTest(e)||!r.test(e))return l+=1,l+="02"===s||"05"===s?8:4,m[a]=l,l;switch(r.test(e.shrn(1))||(l+=2),s){case"02":e.mod(n).cmp(i)&&(l+=8);break;case"05":(h=e.mod(o)).cmp(c)&&h.cmp(u)&&(l+=8);break;default:l+=4}return m[a]=l,l}(this.__prime,this.__gen)),this._primeCode}}),p.prototype.generateKeys=function(){return this._priv||(this._priv=new a(h(this._primeLen))),this._pub=this._gen.toRed(this._prime).redPow(this._priv).fromRed(),this.getPublicKey()},p.prototype.computeSecret=function(e){var s=(e=(e=new a(e)).toRed(this._prime)).redPow(this._priv).fromRed(),r=new t(s.toArray()),n=this.getPrime();if(r.length<n.length){var i=new t(n.length-r.length);i.fill(0),r=t.concat([i,r])}return r},p.prototype.getPublicKey=function(e){return w(this._pub,e)},p.prototype.getPrivateKey=function(e){return w(this._priv,e)},p.prototype.getPrime=function(e){return w(this.__prime,e)},p.prototype.getGenerator=function(e){return w(this._gen,e)},p.prototype.setGenerator=function(e,s){return s=s||"utf8",t.isBuffer(e)||(e=new t(e,s)),this.__gen=e,this._gen=new a(e),this}}).call(this,s(4).Buffer)},function(e,t,s){(function(e){var a=void 0!==e&&e||"undefined"!=typeof self&&self||window,r=Function.prototype.apply;function n(e,t){this._id=e,this._clearFn=t}t.setTimeout=function(){return new n(r.call(setTimeout,a,arguments),clearTimeout)},t.setInterval=function(){return new n(r.call(setInterval,a,arguments),clearInterval)},t.clearTimeout=t.clearInterval=function(e){e&&e.close()},n.prototype.unref=n.prototype.ref=function(){},n.prototype.close=function(){this._clearFn.call(a,this._id)},t.enroll=function(e,t){clearTimeout(e._idleTimeoutId),e._idleTimeout=t},t.unenroll=function(e){clearTimeout(e._idleTimeoutId),e._idleTimeout=-1},t._unrefActive=t.active=function(e){clearTimeout(e._idleTimeoutId);var t=e._idleTimeout;t>=0&&(e._idleTimeoutId=setTimeout((function(){e._onTimeout&&e._onTimeout()}),t))},s(26),t.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==e&&e.setImmediate||this&&this.setImmediate,t.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==e&&e.clearImmediate||this&&this.clearImmediate}).call(this,s(3))},function(e,t,s){(function(e,t){!function(e,s){"use strict";if(!e.setImmediate){var a,r,n,i,o,c=1,u={},d=!1,h=e.document,l=Object.getPrototypeOf&&Object.getPrototypeOf(e);l=l&&l.setTimeout?l:e,"[object process]"==={}.toString.call(e.process)?a=function(e){t.nextTick((function(){m(e)}))}:!function(){if(e.postMessage&&!e.importScripts){var t=!0,s=e.onmessage;return e.onmessage=function(){t=!1},e.postMessage("","*"),e.onmessage=s,t}}()?e.MessageChannel?((n=new MessageChannel).port1.onmessage=function(e){m(e.data)},a=function(e){n.port2.postMessage(e)}):h&&"onreadystatechange"in h.createElement("script")?(r=h.documentElement,a=function(e){var t=h.createElement("script");t.onreadystatechange=function(){m(e),t.onreadystatechange=null,r.removeChild(t),t=null},r.appendChild(t)}):a=function(e){setTimeout(m,0,e)}:(i="setImmediate$"+Math.random()+"$",o=function(t){t.source===e&&"string"==typeof t.data&&0===t.data.indexOf(i)&&m(+t.data.slice(i.length))},e.addEventListener?e.addEventListener("message",o,!1):e.attachEvent("onmessage",o),a=function(t){e.postMessage(i+t,"*")}),l.setImmediate=function(e){"function"!=typeof e&&(e=new Function(""+e));for(var t=new Array(arguments.length-1),s=0;s<t.length;s++)t[s]=arguments[s+1];var r={callback:e,args:t};return u[c]=r,a(c),c++},l.clearImmediate=f}function f(e){delete u[e]}function m(e){if(d)setTimeout(m,0,e);else{var t=u[e];if(t){d=!0;try{!function(e){var t=e.callback,s=e.args;switch(s.length){case 0:t();break;case 1:t(s[0]);break;case 2:t(s[0],s[1]);break;case 3:t(s[0],s[1],s[2]);break;default:t.apply(void 0,s)}}(t)}finally{f(e),d=!1}}}}}("undefined"==typeof self?void 0===e?this:e:self)}).call(this,s(3),s(8))},function(e,t,s){"use strict";s.r(t);var a=s(1),r=s.n(a),n=s(0),i=s.n(n),o=200,c=400,u=401,d=402,h=403,l=404,f=409,m=429,p=500,w=503,g=504,y=1012,b=3e3,v=3001;class M extends Error{constructor(...e){super(...e),this.name="UsernameAlreadyExists",this.message="Username already exists.",this.status=f}}class S extends Error{constructor(...e){super(...e),this.name="UsernameMissing",this.message="Username missing.",this.status=c}}class I extends Error{constructor(...e){super(...e),this.name="UsernameCannotBeBlank",this.message="Username cannot be blank.",this.status=c}}class P extends Error{constructor(e,...t){super(e,...t),this.name="UsernameTooLong",this.message="Username too long. Must be a max of ".concat(e," characters."),this.status=c}}class E extends Error{constructor(...e){super(...e),this.name="UsernameMustBeString",this.message="Username must be a string.",this.status=c}}class B extends Error{constructor(...e){super(...e),this.name="PasswordMissing",this.message="Password missing.",this.status=c}}class N extends Error{constructor(...e){super(...e),this.name="PasswordCannotBeBlank",this.message="Password cannot be blank.",this.status=c}}class U extends Error{constructor(e,...t){super(e,...t),this.name="PasswordTooShort",this.message="Password too short. Must be a minimum of ".concat(e," characters."),this.status=c}}class A extends Error{constructor(e,...t){super(e,...t),this.name="PasswordTooLong",this.message="Password too long. Must be a max of ".concat(e," characters."),this.status=c}}class T extends Error{constructor(...e){super(...e),this.name="PasswordMustBeString",this.message="Password must be a string.",this.status=c}}class k extends Error{constructor(e,...t){super(e,...t),this.name="PasswordAttemptLimitExceeded",this.message="Password attempt limit exceeded. Must wait ".concat(e," to attempt to use password again."),this.status=u}}class D extends Error{constructor(...e){super(...e),this.name="UsernameOrPasswordMismatch",this.message="Username or password mismatch.",this.status=u}}class K extends Error{constructor(...e){super(...e),this.name="SessionLengthMustBeNumber",this.message="Session length must be a number.",this.status=c}}class x extends Error{constructor(e,...t){super(e,...t),this.name="SessionLengthTooShort",this.message="Session length cannot be shorter than ".concat(e,"."),this.status=c}}class R extends Error{constructor(e,...t){super(e,...t),this.name="SessionLengthTooLong",this.message="Session length cannot be longer than ".concat(e,"."),this.status=c}}class O extends Error{constructor(...e){super(...e),this.name="AllowServerSideEncryptionMustBeBoolean",this.message="Allow server-side encryption value must be a boolean.",this.status=c}}class C extends Error{constructor(e,...t){super(...t),this.name="UserAlreadySignedIn",this.message="Already signed in.",this.status=c,this.username=e}}class _ extends Error{constructor(...e){super(...e),this.name="UserPendingDeletion",this.message="User is pending deletion.",this.status=h}}class F extends Error{constructor(...e){super(...e),this.name="AppIdNotValid",this.message="App ID not valid.",this.status=u}}class L extends Error{constructor(e,...t){super(e,...t),this.name="DomainNotWhitelisted",this.message="Domain not whitelisted. Whitelist the domain ".concat(e?"'".concat(e,"' "):"","in your admin panel."),this.status=u}}class j extends Error{constructor(...e){super(...e),this.name="UserNotSignedIn",this.message="Not signed in.",this.status=c}}class q extends Error{constructor(e,...t){super(e,...t),e&&(this.username=e),this.name="UserNotFound",this.message="User not found.",this.status=l}}class V extends Error{constructor(...e){super(...e),this.name="UserEmailNotFound",this.message="User does not have an email saved.",this.status=l}}class H extends Error{constructor(...e){super(...e),this.name="UserMustChangePassword",this.message="Must change password first.",this.status=h}}class G extends Error{constructor(...e){super(...e),this.name="EmailNotValid",this.message="Email not valid.",this.status=c}}class J extends Error{constructor(...e){super(...e),this.name="ProfileMustBeObject",this.message="Profile must be a flat JSON object.",this.status=c}}class W extends Error{constructor(...e){super(...e),this.name="ProfileCannotBeEmpty",this.message="Profile cannot be empty.",this.status=c}}class Y extends Error{constructor(e,...t){super(e,...t),this.name="ProfileHasTooManyKeys",this.message="Profile has too many keys. Must have a max of ".concat(e," keys."),this.status=c}}class z extends Error{constructor(e,t,...s){super(e,t,...s),this.name="ProfileKeyTooLong",this.message="Profile key too long. Must be a max of ".concat(e," characters."),this.status=c,this.key=t}}class Z extends Error{constructor(e,t,...s){super(e,t,...s),this.name="ProfileValueMustBeString",this.message="Profile value must be a string.",this.status=c,this.key=e,this.value=t}}class X extends Error{constructor(e,...t){super(e,...t),this.name="ProfileValueCannotBeBlank",this.message="Profile value cannot be blank.",this.status=c,this.key=e}}class Q extends Error{constructor(e,t,s,...a){super(e,t,s,...a),this.name="ProfileValueTooLong",this.message="Profile value too long. Must be a max of ".concat(e," characters."),this.status=c,this.key=t,this.value=s}}class $ extends Error{constructor(e,...t){super(e,...t),this.name="RememberMeValueNotValid",this.message="Remember me value must be one of ".concat(JSON.stringify(Object.keys(e)),"."),this.status=c}}class ee extends Error{constructor(...e){super(...e),this.name="ParamsMissing",this.message="Parameters expected are missing.",this.status=c}}class te extends Error{constructor(...e){super(...e),this.name="TrialExceededLimit",this.message="Trial exceeded limit of users.",this.status=d}}class se extends Error{constructor(...e){super(...e),this.name="CurrentPasswordMissing",this.message="Current password missing.",this.status=c}}class ae extends Error{constructor(...e){super(...e),this.name="CurrentPasswordIncorrect",this.message="Current password is incorrect.",this.status=u}}class re extends Error{constructor(e,...t){super(e,...t),this.name="KeyNotFound",this.message=e,this.status=l}}class ne extends Error{constructor(...e){super(...e),this.name="DeleteEndToEndEncryptedDataMustBeBoolean",this.message="Delete end-to-end encrypted data value must be a boolean.",this.status=c}}var ie={UsernameAlreadyExists:M,UsernameMissing:S,UsernameCannotBeBlank:I,UsernameTooLong:P,UsernameMustBeString:E,PasswordMissing:B,PasswordCannotBeBlank:N,PasswordTooShort:U,PasswordTooLong:A,PasswordMustBeString:T,PasswordAttemptLimitExceeded:k,UsernameOrPasswordMismatch:D,SessionLengthMustBeNumber:K,SessionLengthTooShort:x,SessionLengthTooLong:R,AllowServerSideEncryptionMustBeBoolean:O,UserAlreadySignedIn:C,UserPendingDeletion:_,AppIdNotValid:F,DomainNotWhitelisted:L,UserNotSignedIn:j,UserNotFound:q,UserEmailNotFound:V,UserMustChangePassword:H,EmailNotValid:G,ProfileMustBeObject:J,ProfileCannotBeEmpty:W,ProfileHasTooManyKeys:Y,ProfileKeyTooLong:z,ProfileValueMustBeString:Z,ProfileValueCannotBeBlank:X,ProfileValueTooLong:Q,RememberMeValueNotValid:$,ParamsMissing:ee,TrialExceededLimit:te,CurrentPasswordMissing:se,CurrentPasswordIncorrect:ae,KeyNotFound:re,DeleteEndToEndEncryptedDataMustBeBoolean:ne};class oe extends Error{constructor(...e){super(...e),this.name="DatabaseNameMissing",this.message="Database name missing.",this.status=c}}class ce extends Error{constructor(...e){super(...e),this.name="DatabaseNameCannotBeBlank",this.message="Database name cannot be blank.",this.status=c}}class ue extends Error{constructor(...e){super(...e),this.name="DatabaseNameMustBeString",this.message="Database name must be a string.",this.status=c}}class de extends Error{constructor(e,...t){super(e,...t),this.name="DatabaseNameTooLong",this.message="Database name cannot be more than ".concat(e," characters."),this.status=c}}class he extends Error{constructor(e,...t){super(e,...t),this.name="DatabaseNameRestricted",this.message="Database name '".concat(e,"' is restricted. It is used internally by userbase-js."),this.status=h}}class le extends Error{constructor(...e){super(...e),this.name="DatabaseAlreadyOpening",this.message="Already attempting to open database.",this.status=c}}class fe extends Error{constructor(...e){super(...e),this.name="ChangeHandlerMissing",this.message="Change handler missing.",this.status=c}}class me extends Error{constructor(...e){super(...e),this.name="ChangeHandlerMustBeFunction",this.message="Change handler must be a function.",this.status=c}}class pe extends Error{constructor(e,...t){super(e,...t),this.name="EncryptionModeNotValid",this.message="Encryption mode must be one of ".concat(JSON.stringify(Object.keys(e)),"."),this.status=c}}class we extends Error{constructor(...e){super(...e),this.name="ServerSideEncryptionNotEnabledInClient",this.message="Server-side encryption must be enabled in the client to use it. To enable it, set allowServerSideEncryption to true in init().",this.status=h}}class ge extends Error{constructor(...e){super(...e),this.name="DatabaseNotOpen",this.message="Database is not open.",this.status=c}}class ye extends Error{constructor(...e){super(...e),this.name="DatabaseNotFound",this.message="Database not found. Find available databases using getDatabases().",this.status=l}}class be extends Error{constructor(...e){super(...e),this.name="DatabaseIsReadOnly",this.message="Database is read only. Must have permission to write to database.",this.status=h}}class ve extends Error{constructor(...e){super(...e),this.name="DatabaseIdMustBeString",this.message="Database id must be a string.",this.status=c}}class Me extends Error{constructor(...e){super(...e),this.name="DatabaseIdCannotBeBlank",this.message="Database id cannot be blank.",this.status=c}}class Se extends Error{constructor(...e){super(...e),this.name="DatabaseIdNotAllowed",this.message="Database id not allowed. Cannot provide both databaseName and databaseId, can only provide one.",this.status=c}}class Ie extends Error{constructor(...e){super(...e),this.name="DatabaseIdNotAllowedForOwnDatabase",this.message="Tried to open the user's own database using its databaseId rather than its databaseName. The databaseId should only be used to open databases shared from other users.",this.status=h}}class Pe extends Error{constructor(e,...t){super(e,...t),this.name="DatabaseIdInvalidLength",this.message="Database id invalid length. Must be ".concat(e," characters."),this.status=c}}class Ee extends Error{constructor(...e){super(...e),this.name="ShareTokenInvalid",this.message="Share token invalid.",this.status=c}}class Be extends Error{constructor(...e){super(...e),this.name="ShareTokenNotFound",this.message="Share token not found. Perhaps the database owner has generated a new share token.",this.status=l}}class Ne extends Error{constructor(e,...t){super(e,...t),this.name="ShareTokenNotAllowed",this.message="Share token not allowed.",this.status=c}}class Ue extends Error{constructor(...e){super(...e),this.name="ShareTokenNotAllowedForOwnDatabase",this.message="Tried to open the user's own database using its shareToken rather than its databaseName. The shareToken should only be used to open databases shared from other users.",this.status=h}}class Ae extends Error{constructor(...e){super(...e),this.name="ReadOnlyMustBeBoolean",this.message="Read only value must be a boolean.",this.status=c}}class Te extends Error{constructor(...e){super(...e),this.name="ReadOnlyParamNotAllowed",this.message="Read only parameter not allowed when revoking access to a database.",this.status=c}}class ke extends Error{constructor(e,...t){super(e,...t),this.name="ResharingAllowedParamNotAllowed",this.message="Resharing allowed parameter not allowed ".concat(e,"."),this.status=c}}class De extends Error{constructor(...e){super(...e),this.name="ResharingAllowedMustBeBoolean",this.message="Resharing allowed value must be a boolean.",this.status=c}}class Ke extends Error{constructor(e,...t){super(e,...t),this.name="ResharingNotAllowed",this.message="Resharing not allowed. ".concat(e,"."),this.status=h}}class xe extends Error{constructor(...e){super(...e),this.name="ResharingWithWriteAccessNotAllowed",this.message="Resharing with write access not allowed. Must have permission to write to the database to reshare the database with write access another user.",this.status=h}}class Re extends Error{constructor(...e){super(...e),this.name="SharingWithSelfNotAllowed",this.message="Sharing database with self is not allowed. Must share database with another user.",this.status=c}}class Oe extends Error{constructor(...e){super(...e),this.name="ModifyingOwnPermissionsNotAllowed",this.message="Modifying own database permissions not allowed. Must modify another user's permissions.",this.status=c}}class Ce extends Error{constructor(...e){super(...e),this.name="ModifyingOwnerPermissionsNotAllowed",this.message="Modifying the owner of a database's permissions is not allowed.",this.status=h}}class _e extends Error{constructor(...e){super(...e),this.name="ModifyingPermissionsNotAllowed",this.message="Modifying another user's permissions is not allowed. Must have permission to reshare the database with another user.",this.status=h}}class Fe extends Error{constructor(...e){super(...e),this.name="GrantingWriteAccessNotAllowed",this.message="Granting write access not allowed. Must have permission to write to the database to grant write access to another user.",this.status=h}}class Le extends Error{constructor(...e){super(...e),this.name="RequireVerifiedMustBeBoolean",this.message="Require verified value must be a boolean.",this.status=c}}class je extends Error{constructor(...e){super(...e),this.name="RequireVerifiedParamNotNecessary",this.message="Require verified parameter not necessary when sharing database without a username.",this.status=c}}class qe extends Error{constructor(...e){super(...e),this.name="RevokeMustBeBoolean",this.message="Revoke value must be a boolean.",this.status=c}}class Ve extends Error{constructor(...e){super(...e),this.name="ItemMissing",this.message="Item missing.",this.status=c}}class He extends Error{constructor(...e){super(...e),this.name="ItemInvalid",this.message="Item must be serializable to JSON.",this.status=c}}class Ge extends Error{constructor(e,...t){super(e,...t),this.name="ItemTooLarge",this.message="Item must be less than ".concat(e," KB."),this.status=c}}class Je extends Error{constructor(...e){super(...e),this.name="ItemIdMustBeString",this.message="Item id must be a string.",this.status=c}}class We extends Error{constructor(e,...t){super(e,...t),this.name="ItemIdTooLong",this.message="Item id cannot be more than ".concat(e," characters."),this.status=c}}class Ye extends Error{constructor(...e){super(...e),this.name="ItemIdMissing",this.message="Item id missing.",this.status=c}}class ze extends Error{constructor(...e){super(...e),this.name="ItemIdCannotBeBlank",this.message="Item id cannot be blank.",this.status=c}}class Ze extends Error{constructor(...e){super(...e),this.name="ItemAlreadyExists",this.message="Item with the same id already exists.",this.status=f}}class Xe extends Error{constructor(...e){super(...e),this.name="ItemDoesNotExist",this.message="Item with the provided id does not exist.",this.status=l}}class Qe extends Error{constructor(...e){super(...e),this.name="ItemUpdateConflict",this.message="Item update conflict.",this.status=f}}class $e extends Error{constructor(...e){super(...e),this.name="FileMissing",this.message="File missing.",this.status=c}}class et extends Error{constructor(...e){super(...e),this.name="FileMustBeFile",this.message="File must be a file.",this.status=c}}class tt extends Error{constructor(...e){super(...e),this.name="FileCannotBeEmpty",this.message="File cannot be empty.",this.status=c}}class st extends Error{constructor(...e){super(...e),this.name="FileUploadConflict",this.message="File upload conflict.",this.status=f}}class at extends Error{constructor(...e){super(...e),this.name="FileNotFound",this.message="File not found.",this.status=l}}class rt extends Error{constructor(...e){super(...e),this.name="FileIdMissing",this.message="File id missing.",this.status=c}}class nt extends Error{constructor(...e){super(...e),this.name="FileIdMustBeString",this.message="File id must be a string.",this.status=c}}class it extends Error{constructor(...e){super(...e),this.name="FileIdCannotBeBlank",this.message="File id cannot be blank.",this.status=c}}class ot extends Error{constructor(e,...t){super(e,...t),this.name="FileIdTooLong",this.message="File id cannot be more than ".concat(e," characters."),this.status=c}}class ct extends Error{constructor(...e){super(...e),this.name="RangeMustBeObject",this.message="Range param provided must be object.",this.status=c}}class ut extends Error{constructor(...e){super(...e),this.name="RangeMissingStart",this.message="Range param missing start.",this.status=c}}class dt extends Error{constructor(...e){super(...e),this.name="RangeMissingEnd",this.message="Range param missing end.",this.status=c}}class ht extends Error{constructor(...e){super(...e),this.name="RangeStartMustBeNumber",this.message="Range start provided must be a number.",this.status=c}}class lt extends Error{constructor(...e){super(...e),this.name="RangeEndMustBeNumber",this.message="Range end provided must be a number.",this.status=c}}class ft extends Error{constructor(...e){super(...e),this.name="RangeStartMustBeGreaterThanZero",this.message="Range start provided must be greater than 0.",this.status=c}}class mt extends Error{constructor(...e){super(...e),this.name="RangeEndMustBeGreaterThanRangeStart",this.message="Range end provided must be greater than range start.",this.status=c}}class pt extends Error{constructor(...e){super(...e),this.name="RangeEndMustBeLessThanFileSize",this.message="Range end provided must be less than file size.",this.status=c}}class wt extends Error{constructor(...e){super(...e),this.name="OperationsMissing",this.message="Operations missing.",this.status=c}}class gt extends Error{constructor(...e){super(...e),this.name="OperationsMustBeArray",this.message="Operations provided must be an array.",this.status=c}}class yt extends Error{constructor(e,...t){super(e,...t),this.name="CommandNotRecognized",this.message="Command '".concat(e,"' not recognized."),this.status=c}}class bt extends Error{constructor(...e){super(...e),this.name="OperationsConflict",this.message="Operations conflict. Only allowed 1 operation per item.",this.status=f}}class vt extends Error{constructor(e,...t){super(e,...t),this.name="OperationsExceedLimit",this.message="Operations exceed limit. Only allowed ".concat(e," operations."),this.status=c}}class Mt extends Error{constructor(...e){super(...e),this.name="UserNotVerified",this.message="User not verified. Either verify user before sharing database, or set requireVerified to false.",this.status=h}}class St extends Error{constructor(...e){super(...e),this.name="UserMustBeReverified",this.message="User must be reverified.",this.status=h}}class It extends Error{constructor(...e){super(...e),this.name="UserUnableToReceiveDatabase",this.message="User unable to receive database. User must sign in with an updated userbase-js client to be able to receive database.",this.status=h}}class Pt extends Error{constructor(...e){super(...e),this.name="VerificationMessageMissing",this.message="Verification message missing.",this.status=c}}class Et extends Error{constructor(...e){super(...e),this.name="VerificationMessageCannotBeBlank",this.message="Verification message cannot be blank.",this.status=c}}class Bt extends Error{constructor(...e){super(...e),this.name="VerificationMessageMustBeString",this.message="Verification message must be a string.",this.status=c}}class Nt extends Error{constructor(e,...t){super(e,...t),this.name="VerificationMessageInvalid",this.message="Verification message invalid.",this.status=c}}class Ut extends Error{constructor(e,...t){super(e,...t),this.name="VerifyingSelfNotAllowed",this.message="Verifying self not allowed. Can only verify other users.",this.status=c}}class At extends Error{constructor(...e){super(...e),this.name="ProgressHandlerMustBeFunction",this.message="Progress handler must be a function.",this.status=c}}class Tt extends Error{constructor(e,...t){super(e,...t),this.name="TransactionUnauthorized",this.message="Calling '".concat(e,"' on this item is unauthorized."),this.status=h}}class kt extends Error{constructor(e,...t){super(e,...t),this.name="WriteAccessParamNotAllowed",this.message="Write access parameter not allowed. Only the item creator or database owner can change an item's write access settings.",this.status=h}}var Dt={DatabaseNameMissing:oe,DatabaseNameCannotBeBlank:ce,DatabaseNameMustBeString:ue,DatabaseNameTooLong:de,DatabaseNameRestricted:he,DatabaseNotFound:ye,DatabaseIsReadOnly:be,DatabaseAlreadyOpening:le,DatabaseIdMustBeString:ve,DatabaseIdCannotBeBlank:Me,DatabaseIdNotAllowed:Se,DatabaseIdNotAllowedForOwnDatabase:Ie,DatabaseIdInvalidLength:Pe,ShareTokenInvalid:Ee,ShareTokenNotFound:Be,ShareTokenNotAllowed:Ne,ShareTokenNotAllowedForOwnDatabase:Ue,ReadOnlyMustBeBoolean:Ae,ReadOnlyParamNotAllowed:Te,ResharingAllowedMustBeBoolean:De,ResharingNotAllowed:Ke,ResharingWithWriteAccessNotAllowed:xe,ResharingAllowedParamNotAllowed:ke,SharingWithSelfNotAllowed:Re,ModifyingOwnPermissionsNotAllowed:Oe,ModifyingOwnerPermissionsNotAllowed:Ce,ModifyingPermissionsNotAllowed:_e,GrantingWriteAccessNotAllowed:Fe,RequireVerifiedMustBeBoolean:Le,RequireVerifiedParamNotNecessary:je,RevokeMustBeBoolean:qe,ChangeHandlerMissing:fe,ChangeHandlerMustBeFunction:me,EncryptionModeNotValid:pe,ServerSideEncryptionNotEnabledInClient:we,DatabaseNotOpen:ge,ItemMissing:Ve,ItemInvalid:He,ItemTooLarge:Ge,ItemIdMustBeString:Je,ItemIdTooLong:We,ItemIdMissing:Ye,ItemIdCannotBeBlank:ze,ItemAlreadyExists:Ze,ItemDoesNotExist:Xe,ItemUpdateConflict:Qe,FileMissing:$e,FileMustBeFile:et,FileCannotBeEmpty:tt,FileUploadConflict:st,FileNotFound:at,FileIdMissing:rt,FileIdMustBeString:nt,FileIdCannotBeBlank:it,FileIdTooLong:ot,RangeMustBeObject:ct,RangeMissingStart:ut,RangeMissingEnd:dt,RangeStartMustBeNumber:ht,RangeEndMustBeNumber:lt,RangeStartMustBeGreaterThanZero:ft,RangeEndMustBeGreaterThanRangeStart:mt,RangeEndMustBeLessThanFileSize:pt,OperationsMissing:wt,OperationsMustBeArray:gt,OperationsConflict:bt,OperationsExceedLimit:vt,CommandNotRecognized:yt,UserNotVerified:Mt,UserMustBeReverified:St,UserUnableToReceiveDatabase:It,VerificationMessageMissing:Pt,VerificationMessageMustBeString:Bt,VerificationMessageCannotBeBlank:Et,VerificationMessageInvalid:Nt,VerifyingSelfNotAllowed:Ut,ProgressHandlerMustBeFunction:At,TransactionUnauthorized:Tt,WriteAccessParamNotAllowed:kt};class Kt extends Error{constructor(e,...t){super(e,...t),this.name="AppIdAlreadySet",this.message="Application ID already set.",this.status=f,this.appId=e}}class xt extends Error{constructor(...e){super(...e),this.name="AppIdMustBeString",this.message="Application ID must be a string.",this.status=c}}class Rt extends Error{constructor(...e){super(...e),this.name="AppIdMissing",this.message="Application ID missing.",this.status=c}}class Ot extends Error{constructor(...e){super(...e),this.name="AppIdCannotBeBlank",this.message="Application ID cannot be blank.",this.status=c}}class Ct extends Error{constructor(...e){super(...e),this.name="WebCryptoUnavailable",this.message="The WebCrypto API is unavailable. Please make sure your website uses https.",this.status=c}}class _t extends Error{constructor(...e){super(...e),this.name="UpdateUserHandlerMustBeFunction",this.message="Update user handler must be a function.",this.status=c}}var Ft={AppIdAlreadySet:Kt,AppIdMustBeString:xt,AppIdMissing:Rt,AppIdCannotBeBlank:Ot,WebCryptoUnavailable:Ct,UpdateUserHandlerMustBeFunction:_t};class Lt extends Error{constructor(...e){super(...e),this.name="SuccessUrlMissing",this.message="Success url missing to let Stripe know where to redirect users on successful payment.",this.status=c}}class jt extends Error{constructor(...e){super(...e),this.name="SuccessUrlMustBeString",this.message="Success url must be a string.",this.status=c}}class qt extends Error{constructor(e,...t){super(e,...t),this.name="SuccessUrlInvalid",this.message=e?"Success url must start with http or https.":"Success url invalid.",this.status=c}}class Vt extends Error{constructor(...e){super(...e),this.name="CancelUrlMissing",this.message="Cancel url missing to let Stripe know where to redirect users on canceled payment.",this.status=c}}class Ht extends Error{constructor(...e){super(...e),this.name="CancelUrlMustBeString",this.message="Cancel url must be a string.",this.status=c}}class Gt extends Error{constructor(e,...t){super(e,...t),this.name="CancelUrlInvalid",this.message=e?"Cancel url must start with http or https.":"Cancel url invalid.",this.status=c}}class Jt extends Error{constructor(...e){super(...e),this.name="StripeLibraryMissing",this.message="Stripe.js library missing. Be sure to include the script in your html file (https://stripe.com/docs/stripe-js#setup).",this.status=c}}class Wt extends Error{constructor(...e){super(...e),this.name="PaymentsDisabled",this.message="Payments on this app are disabled. Enable payments in the admin panel.",this.status=h}}class Yt extends Error{constructor(...e){super(...e),this.name="PriceIdOrPlanIdAllowed",this.message="Only one of priceId or planId allowed.",this.status=c}}class zt extends Error{constructor(...e){super(...e),this.name="PriceIdOrPlanIdMissing",this.message="Please provide a priceId or planId. You can create a product in the Stripe dashboard and find its priceId there.",this.status=c}}class Zt extends Error{constructor(...e){super(...e),this.name="SubscriptionPlanAlreadyPurchased",this.message="Subscription plan already purchased. Cancel subscription to purchase another.",this.status=f}}class Xt extends Error{constructor(...e){super(...e),this.name="StripeAccountNotConnected",this.message="Stripe account not connected. Connect a Stripe account in the admin panel.",this.status=h}}class Qt extends Error{constructor(...e){super(...e),this.name="SubscriptionNotFound",this.message="Subscription not found. User must purchase a subscription.",this.status=d}}class $t extends Error{constructor(e,...t){super(...t),this.name="SubscriptionInactive",this.message="The user's subscription is inactive.",this.subscriptionStatus=e,this.status=d}}class es extends Error{constructor(...e){super(...e),this.name="SubscriptionNotPurchased",this.message="Subscription not purchased. User must purchase a subscription.",this.status=d}}class ts extends Error{constructor(...e){super(...e),this.name="SubscriptionAlreadyCanceled",this.message="Subscription already canceled. User must purchase a new subscription.",this.status=c}}class ss extends Error{constructor(...e){super(...e),this.name="TrialExpired",this.message="Trial expired. User must purchase a subscription.",this.status=d}}class as extends Error{constructor(e,...t){super(e,...t);const{status:s,type:a,message:r}=e;this.name="StripeError",this.message=r,this.type=a,this.status=s}}var rs={SuccessUrlMissing:Lt,SuccessUrlMustBeString:jt,SuccessUrlInvalid:qt,CancelUrlMissing:Vt,CancelUrlMustBeString:Ht,CancelUrlInvalid:Gt,StripeJsLibraryMissing:Jt,PaymentsDisabled:Wt,PriceIdOrPlanIdAllowed:Yt,PriceIdOrPlanIdMissing:zt,SubscriptionPlanAlreadyPurchased:Zt,StripeAccountNotConnected:Xt,SubscriptionNotFound:Qt,SubscriptionInactive:$t,SubscriptionNotPurchased:es,SubscriptionAlreadyCanceled:ts,TrialExpired:ss,StripeError:as};function ns(e,t){var s=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),s.push.apply(s,a)}return s}function is(e){for(var t=1;t<arguments.length;t++){var s=null!=arguments[t]?arguments[t]:{};t%2?ns(Object(s),!0).forEach((function(t){r()(e,t,s[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(s)):ns(Object(s)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(s,t))}))}return e}class os extends Error{constructor(...e){super(...e),this.name="AppIdNotSet",this.message="App ID not set yet. Make sure to configure app ID.",this.status=c}}class cs extends Error{constructor(...e){super(...e),this.name="ServiceUnavailable",this.message="Service unavailable.",this.status=w}}class us extends Error{constructor(...e){super(...e),this.name="ParamsMustBeObject",this.message="Parameters passed to function must be placed inside an object.",this.status=c}}class ds extends Error{constructor(e,...t){super(e,...t);const s=Math.floor(e/1e3);this.name="TooManyRequests",this.message="Too many requests in a row. Please try again in ".concat(s," second").concat(1!==s?"s":"","."),this.status=m}}var hs=is(is(is(is(is({},ie),Dt),Ft),rs),{},{AppIdNotSet:os,InternalServerError:class extends cs{constructor(...e){super(...e),this.status=p}},ServiceUnavailable:cs,Timeout:class extends cs{constructor(...e){super(...e),this.status=g}},Reconnecting:class extends cs{constructor(...e){super(...e),this.message="Reconnecting."}},UnknownServiceUnavailable:class extends cs{constructor(e,...t){super(e,...t),console.error("Userbase error. Please report this to support@userbase.com.\n\n",e)}},ParamsMustBeObject:us,TooManyRequests:ds});let ls=null,fs=null,ms=!1;var ps="2.8.0",ws=()=>{if(!ls)throw new hs.AppIdNotSet;return ls},gs=()=>fs,ys=()=>window._userbaseEndpoint||"https://v1.userbase.com/v1",bs=({appId:e,updateUserHandler:t,allowServerSideEncryption:s})=>{if(ls&&ls!==e)throw new hs.AppIdAlreadySet(ls);ls=e,fs=t,ms=s},vs=e=>e?window._USERBASE_STRIPE_PRODUCTION_PUBLISHABLE_KEY||"pk_live_jI6lbsAIQlu2u4uTkDXFrSEW":window._USERBASE_STRIPE_TEST_PUBLISHABLE_KEY||"pk_test_rYANrLdNfdJXJ2d808wW4pqY",Ms=()=>ms;class Ss extends Error{constructor(e,t,s,...a){super(e,t,s,...a),this.response={data:e,status:t,statusText:s},this.message="Request failed with status code "+t}}class Is extends Error{constructor(e,...t){super(e,...t),this.message="timeout of ".concat(e,"ms exceeded")}}const Ps=(e,t,s,a=1e4)=>{e.timeout=a,e.onload=()=>((e,t,s)=>{let a;try{a=JSON.parse(e.response)}catch(t){a=e.response}e.status>=200&&e.status<300?t(a):s(new Ss(a,e.status,e.statusText))})(e,t,s),e.onerror=()=>s(new hs.ServiceUnavailable),e.ontimeout=()=>s(new Is(a))};var Es=(e,t,s,a,r,n,i,o,c)=>new Promise((u,d)=>{const h=new XMLHttpRequest,l="".concat(ys(),"/api/auth/sign-up?appId=").concat(ws(),"&userbaseJsVersion=").concat(ps),f=JSON.stringify({username:e,passwordToken:t,ecKeyData:s,passwordSalts:a,keySalts:r,email:n,profile:i,passwordBasedBackup:o,sessionLength:c});h.open("POST",l),h.setRequestHeader("Content-Type","application/json"),h.send(f),Ps(h,u,d)}),Bs=e=>new Promise((t,s)=>{const a=new XMLHttpRequest,r="".concat(ys(),"/api/auth/get-password-salts?appId=").concat(ws(),"&username=").concat(encodeURIComponent(e),"&userbaseJsVersion=").concat(ps);a.open("GET",r),a.send(),Ps(a,t,s)}),Ns=async(e,t,s)=>new Promise((a,r)=>{const n=new XMLHttpRequest,i="".concat(ys(),"/api/auth/sign-in?appId=").concat(ws(),"&userbaseJsVersion=").concat(ps),o=JSON.stringify({username:e,passwordToken:t,sessionLength:s});n.open("POST",i),n.setRequestHeader("Content-Type","application/json"),n.send(o),Ps(n,a,r)}),Us=(e,t)=>new Promise((s,a)=>{const r=new XMLHttpRequest,n="".concat(ys(),"/api/auth/sign-in-with-session?appId=").concat(ws(),"&sessionId=").concat(e,"&userbaseJsVersion=").concat(ps),i=JSON.stringify({sessionLength:t});r.open("POST",n),r.setRequestHeader("Content-Type","application/json"),r.send(i),Ps(r,s,a)}),As=async()=>new Promise((e,t)=>{const s=new XMLHttpRequest,a="".concat(ys(),"/api/auth/server-public-key?&userbaseJsVersion=").concat(ps);s.open("GET",a),s.responseType="arraybuffer",s.send(),Ps(s,e,t)}),Ts=e=>new Promise((t,s)=>{const a=new XMLHttpRequest,r="".concat(ys(),"/api/public-key?appId=").concat(ws(),"&username=").concat(encodeURIComponent(e),"&userbaseJsVersion=").concat(ps);a.open("GET",r),a.send(),Ps(a,t,s)}),ks=s(2),Ds=s.n(ks);function Ks(e,t){var s=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),s.push.apply(s,a)}return s}function xs(e){for(var t=1;t<arguments.length;t++){var s=null!=arguments[t]?arguments[t]:{};t%2?Ks(Object(s),!0).forEach((function(t){r()(e,t,s[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(s)):Ks(Object(s)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(s,t))}))}return e}const Rs=e=>(...t)=>{try{return e(...t)}catch(e){console.warn("Error accessing browser storage. Defaulting to memory.\n\n",e)}},Os=(e,t)=>"userbaseSeed.".concat(e,".").concat(t),Cs=Rs((e,t,s,a,r,n)=>{const i={username:t,signedIn:s,sessionId:a,creationDate:r,expirationDate:n},o=JSON.stringify(i);"local"===e?localStorage.setItem("userbaseCurrentSession",o):"session"===e&&sessionStorage.setItem("userbaseCurrentSession",o)});var _s={signInSession:(e,t,s,a,r)=>{Cs(e,t,!0,s,a,r)},signOutSession:(e,t)=>{Cs(e,t,!1)},getCurrentSession:Rs(()=>{const e=sessionStorage.getItem("userbaseCurrentSession");if(e){if(!JSON.parse(e).signedIn){const e=localStorage.getItem("userbaseCurrentSession");if(e){const t=JSON.parse(e);if(t.signedIn)return xs(xs({},t),{},{rememberMe:"local"})}}return xs(xs({},JSON.parse(e)),{},{rememberMe:"session"})}const t=localStorage.getItem("userbaseCurrentSession");return t&&xs(xs({},JSON.parse(t)),{},{rememberMe:"local"})}),saveSeedString:Rs((e,t,s,a)=>{"local"===e?localStorage.setItem(Os(t,s),a):"session"===e&&sessionStorage.setItem(Os(t,s),a)}),removeSeedString:Rs((e,t)=>{const s=Os(e,t);sessionStorage.removeItem(s),localStorage.removeItem(s)}),getSeedString:Rs((e,t)=>{const s=Os(e,t);return sessionStorage.getItem(s)||localStorage.getItem(s)}),removeCurrentSession:Rs(()=>{sessionStorage.removeItem("userbaseCurrentSession"),localStorage.removeItem("userbaseCurrentSession")})};const Fs=(e,t)=>{const s=t?new Uint8Array(e):new Uint16Array(e),a=s.length;let r="",n=10240;for(var i=0;i<a;i+=n){i+n>a&&(n=a-i);const e=s.subarray(i,i+n);r+=String.fromCharCode.apply(null,e)}return r},Ls=(e,t=!1)=>{let s=new ArrayBuffer(e.length*(t?1:2)),a=t?new Uint8Array(s):new Uint16Array(s);for(let t=0,s=e.length;t<s;t++)a[t]=e.charCodeAt(t);return s},js=(e,t)=>{const s=new Uint8Array(e.byteLength+t.byteLength);return s.set(new Uint8Array(e),0),s.set(new Uint8Array(t),e.byteLength),s.buffer},qs=async e=>await window.crypto.subtle.digest({name:"SHA-256"},e);var Vs={BYTE_SIZE:32,HASH_ALGORITHM_NAME:"SHA-256",hash:qs,hashBase64String:async e=>{const t=i.a.decode(e),s=await qs(t);return i.a.encode(s)},hashString:async e=>{const t=Ls(e),s=await qs(t);return i.a.encode(s)}};const Hs=["deriveKey","deriveBits"],Gs=async e=>await window.crypto.subtle.importKey("raw",e,{name:"HKDF"},!1,Hs),Js=Vs.BYTE_SIZE,Ws=(e,t)=>({name:"HKDF",info:Ls(e),hash:Vs.HASH_ALGORITHM_NAME,salt:t});var Ys={importHkdfKeyFromString:async e=>{const t=Ls(e);return await Gs(t)},importHkdfKey:Gs,generateSalt:()=>window.crypto.getRandomValues(new Uint8Array(Js)),getParams:Ws,getPasswordToken:async(e,t)=>{const s=await window.crypto.subtle.deriveBits(Ws("password-token",t),e,256);return i.a.encode(s)}};const zs=["encrypt","decrypt"],Zs=()=>"undefined"!=typeof window?window:self,Xs=()=>({name:"AES-GCM",length:256}),Qs=e=>({name:"AES-GCM",tagLength:128,iv:e}),$s=()=>window.crypto.getRandomValues(new Uint8Array(12)),ea=e=>{const t=e.byteLength-12;return{ciphertextArrayBuffer:e.slice(0,t),iv:e.slice(t)}},ta=async()=>await window.crypto.subtle.generateKey({name:"AES-GCM",length:256},!0,zs),sa=async e=>await Zs().crypto.subtle.importKey("raw",e,{name:"AES-GCM"},!0,zs),aa=async e=>await Zs().crypto.subtle.exportKey("raw",e),ra=async(e,t)=>{const s=$s(),a=await Zs().crypto.subtle.encrypt(Qs(s),e,t);return js(a,s)},na=async(e,t)=>{const s=Ls(t),a=await ra(e,s);return i.a.encode(a)},ia=async(e,t)=>{const{ciphertextArrayBuffer:s,iv:a}=ea(t);return await Zs().crypto.subtle.decrypt(Qs(a),e,s)},oa=async(e,t)=>{const s=i.a.decode(t),a=await ia(e,s);return Fs(a)};var ca={getEncryptionKeyParams:Xs,getCiphertextParams:Qs,generateIv:$s,sliceEncryptedArrayBuffer:ea,importKeyFromMaster:async(e,t,s="encryption")=>await window.crypto.subtle.deriveKey(Ys.getParams(s,t),e,{name:"AES-GCM",length:256},!0,zs),generateKey:ta,getKeyStringFromKey:async e=>{const t=await window.crypto.subtle.exportKey("raw",e);return i.a.encode(t)},getKeyFromKeyString:async e=>{const t=i.a.decode(e);return await sa(t)},getRawKeyFromKey:aa,getKeyFromRawKey:sa,encrypt:ra,encryptJson:async(e,t)=>{const s=JSON.stringify(t);return await na(e,s)},encryptString:na,decrypt:ia,decryptJson:async(e,t)=>{const s=await oa(e,t);return JSON.parse(s)},decryptString:oa,getPasswordBasedEncryptionKey:async(e,t)=>await window.crypto.subtle.deriveKey(Ys.getParams("password-based-encryption",t),e,{name:"AES-GCM",length:256},!1,zs),generateAndEncryptKeyEncryptionKey:async e=>{const t=await ta(),s=await aa(t);return[t,await ra(e,s)]},RAW_KEY_TYPE:"raw",KEY_WILL_BE_USED_TO:zs},ua=s(10),da=s.n(ua);const ha=["encrypt"],la=(e=>{if(e.length%2!=0)throw new Error("Hex string must be even length");const t=e.length/2,s=[];for(let a=0;a<t;a++){const t=2*a,r=e.substring(t,t+2),n=parseInt(r,16);s.push(n)}return new Uint8Array(s)})("ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff"),fa=[2];let ma=null;const pa=e=>((e,t)=>(e.setPrivateKey(t),e.generateKeys(),e))(da.a.createDiffieHellman(la,fa),e),wa=async(e,t)=>{const s=pa(e).computeSecret(t),a=await Vs.hash(s);return await ca.getKeyFromRawKey(a)};var ga={getPublicKey:e=>pa(e).getPublicKey(),getSharedKey:wa,getSharedKeyWithServer:async e=>await wa(e,new Uint8Array(await(async()=>ma||(ma=await As(),ma))())),importKeyFromMaster:async(e,t)=>{const s=await window.crypto.subtle.deriveKey(Ys.getParams("diffie-hellman",t),e,ca.getEncryptionKeyParams(),!0,ha);return await ca.getRawKeyFromKey(s)}};const ya=["sign","verify"],ba=["sign"],va=["verify"],Ma={name:"ECDSA",namedCurve:"P-256"},Sa={name:"ECDSA",hash:{name:Vs.HASH_ALGORITHM_NAME}},Ia=async e=>await window.crypto.subtle.exportKey("spki",e),Pa=async e=>{const t=await Ia(e);return i.a.encode(t)},Ea=async(e,t)=>await ca.importKeyFromMaster(e,t,"ecdsa-key-encryption-key"),Ba=async(e,t)=>await window.crypto.subtle.sign(Sa,e,t),Na=async(e,t,s)=>await window.crypto.subtle.verify(Sa,e,t,s);var Ua={generateEcdsaKeyData:async e=>{const t=await(async()=>await window.crypto.subtle.generateKey(Ma,!0,ya))(),s=Ys.generateSalt(),a=await Ea(e,s),r=await(async e=>{const t=await window.crypto.subtle.exportKey("jwk",e);return Ls(JSON.stringify(t))})(t.privateKey),n=await ca.encrypt(a,r);return{ecdsaPrivateKey:t.privateKey,ecdsaPublicKey:await Pa(t.publicKey),encryptedEcdsaPrivateKey:i.a.encode(n),ecdsaKeyEncryptionKeySalt:i.a.encode(s)}},importEcdsaKeyEncryptionKeyFromMaster:Ea,getPrivateKeyFromRawPrivateKey:async e=>{const t=JSON.parse(Fs(e));return await window.crypto.subtle.importKey("jwk",t,Ma,!0,ba)},getPublicKeyFromRawPublicKey:async e=>await window.crypto.subtle.importKey("spki",e,Ma,!0,va),getRawPublicKeyFromPublicKey:Ia,getPublicKeyStringFromPublicKey:Pa,getPublicKeyFromPrivateKey:async e=>{const t=await window.crypto.subtle.exportKey("jwk",e);delete t.d,t.key_ops=va;return await window.crypto.subtle.importKey("jwk",t,Ma,!0,va)},sign:Ba,signString:async(e,t)=>{const s=Ls(t),a=await Ba(e,s);return i.a.encode(a)},verify:Na,verifyString:async(e,t,s)=>{const a=Ls(s),r=i.a.decode(t);return await Na(e,r,a)}};const Aa=["deriveKey","deriveBits"],Ta={name:"ECDH",namedCurve:"P-256"},ka=async()=>await window.crypto.subtle.generateKey(Ta,!0,Aa),Da=async e=>await window.crypto.subtle.exportKey("spki",e),Ka=async(e,t)=>await ca.importKeyFromMaster(e,t,"ecdh-key-encryption-key");var xa={generateKeyPair:ka,generateEcdhKeyData:async(e,t)=>{const s=await ka(),a=Ys.generateSalt(),r=await Ka(e,a),n=await(async e=>{const t=await window.crypto.subtle.exportKey("jwk",e);return Ls(JSON.stringify(t))})(s.privateKey),o=await ca.encrypt(r,n),c=await Da(s.publicKey),u=await Ua.sign(t,c);return{ecdhPrivateKey:s.privateKey,ecdhPublicKey:i.a.encode(c),encryptedEcdhPrivateKey:i.a.encode(o),signedEcdhPublicKey:i.a.encode(u),ecdhKeyEncryptionKeySalt:i.a.encode(a)}},importEcdhKeyEncryptionKeyFromMaster:Ka,getPrivateKeyFromRawPrivateKey:async e=>{const t=JSON.parse(Fs(e));return await window.crypto.subtle.importKey("jwk",t,Ta,!0,Aa)},getRawPublicKeyFromPublicKey:Da,getPublicKeyFromRawPublicKey:async e=>await window.crypto.subtle.importKey("spki",e,Ta,!0,[]),computeSharedKeyEncryptionKey:async(e,t)=>await window.crypto.subtle.deriveKey({name:"ECDH",namedCurve:"P-256",public:e},t,ca.getEncryptionKeyParams(),!1,ca.KEY_WILL_BE_USED_TO)};const Ra=["sign"],Oa=["sign","verify"],Ca=async(e,t)=>await window.crypto.subtle.sign({name:"HMAC"},e,t);var _a={importKeyFromMaster:async(e,t)=>await window.crypto.subtle.deriveKey(Ys.getParams("authentication",t),e,{name:"HMAC",hash:{name:Vs.HASH_ALGORITHM_NAME},length:512},!1,Ra),importKeyFromRawBits:async e=>await window.crypto.subtle.importKey("raw",e,{name:"HMAC",hash:{name:Vs.HASH_ALGORITHM_NAME},length:256},!1,Oa),sign:Ca,signString:async(e,t)=>{const s=await Ca(e,Ls(t));return i.a.encode(s)}},Fa=s(11),La=s.n(Fa);var ja={generateSeed:()=>window.crypto.getRandomValues(new Uint8Array(32)),aesGcm:ca,diffieHellman:ga,ecdsa:Ua,ecdh:xa,sha256:Vs,hmac:_a,hkdf:Ys,scrypt:{generateSalt:()=>window.crypto.getRandomValues(new Uint8Array(16)),hash:async(e,t,s=La.a.scrypt)=>{const a=new Uint8Array(Ls(e)),r=await s(a,t,16384,8,1,32);return i.a.encode(r)}}};const qa=e=>e.split(":")[0],Va=e=>{const t=(e=>"http://"===e.substring(0,"http://".length)?e.substring("http://".length):"https://"===e.substring(0,"https://".length)?e.substring("https://".length):e)(e);return("https"===qa(e)?"wss://":"ws://")+t},Ha=e=>2*e.length,Ga=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);function Ja(){let e=[],t=0;this.getLength=()=>e.length-t,this.isEmpty=()=>0===e.length,this.enqueue=t=>(e.push(t),this.getLength()),this.dequeue=()=>{const s=e[t];return t+=1,2*t>e.length&&(e=e.slice(t),t=0),s},this.peek=()=>e[t]}const Wa=()=>{const e=URL.createObjectURL(new Blob(["(",function(){self.onmessage=function(e){const{compress:t,decompress:s,data:a}=e.data,r=function(){function e(e,t){if(!r[e]){r[e]={};for(var s=0;s<e.length;s++)r[e][e.charAt(s)]=s}return r[e][t]}var t=String.fromCharCode,s="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$",r={},n={compressToBase64:function(e){if(null==e)return"";var t=n._compress(e,6,(function(e){return s.charAt(e)}));switch(t.length%4){default:case 0:return t;case 1:return t+"===";case 2:return t+"==";case 3:return t+"="}},decompressFromBase64:function(t){return null==t?"":""==t?null:n._decompress(t.length,32,(function(a){return e(s,t.charAt(a))}))},compressToUTF16:function(e){return null==e?"":n._compress(e,15,(function(e){return t(e+32)}))+" "},decompressFromUTF16:function(e){return null==e?"":""==e?null:n._decompress(e.length,16384,(function(t){return e.charCodeAt(t)-32}))},compressToUint8Array:function(e){for(var t=n.compress(e),s=new Uint8Array(2*t.length),a=0,r=t.length;r>a;a++){var i=t.charCodeAt(a);s[2*a]=i>>>8,s[2*a+1]=i%256}return s},decompressFromUint8Array:function(e){if(null==e)return n.decompress(e);for(var s=new Array(e.length/2),a=0,r=s.length;r>a;a++)s[a]=256*e[2*a]+e[2*a+1];var i=[];return s.forEach((function(e){i.push(t(e))})),n.decompress(i.join(""))},compressToEncodedURIComponent:function(e){return null==e?"":n._compress(e,6,(function(e){return a.charAt(e)}))},decompressFromEncodedURIComponent:function(t){return null==t?"":""==t?null:(t=t.replace(/ /g,"+"),n._decompress(t.length,32,(function(s){return e(a,t.charAt(s))})))},compress:function(e){return n._compress(e,16,(function(e){return t(e)}))},_compress:function(e,t,s){if(null==e)return"";var a,r,n,i={},o={},c="",u="",d="",h=2,l=3,f=2,m=[],p=0,w=0;for(n=0;n<e.length;n+=1)if(c=e.charAt(n),Object.prototype.hasOwnProperty.call(i,c)||(i[c]=l++,o[c]=!0),u=d+c,Object.prototype.hasOwnProperty.call(i,u))d=u;else{if(Object.prototype.hasOwnProperty.call(o,d)){if(d.charCodeAt(0)<256){for(a=0;f>a;a++)p<<=1,w==t-1?(w=0,m.push(s(p)),p=0):w++;for(r=d.charCodeAt(0),a=0;8>a;a++)p=p<<1|1&r,w==t-1?(w=0,m.push(s(p)),p=0):w++,r>>=1}else{for(r=1,a=0;f>a;a++)p=p<<1|r,w==t-1?(w=0,m.push(s(p)),p=0):w++,r=0;for(r=d.charCodeAt(0),a=0;16>a;a++)p=p<<1|1&r,w==t-1?(w=0,m.push(s(p)),p=0):w++,r>>=1}0==--h&&(h=Math.pow(2,f),f++),delete o[d]}else for(r=i[d],a=0;f>a;a++)p=p<<1|1&r,w==t-1?(w=0,m.push(s(p)),p=0):w++,r>>=1;0==--h&&(h=Math.pow(2,f),f++),i[u]=l++,d=String(c)}if(""!==d){if(Object.prototype.hasOwnProperty.call(o,d)){if(d.charCodeAt(0)<256){for(a=0;f>a;a++)p<<=1,w==t-1?(w=0,m.push(s(p)),p=0):w++;for(r=d.charCodeAt(0),a=0;8>a;a++)p=p<<1|1&r,w==t-1?(w=0,m.push(s(p)),p=0):w++,r>>=1}else{for(r=1,a=0;f>a;a++)p=p<<1|r,w==t-1?(w=0,m.push(s(p)),p=0):w++,r=0;for(r=d.charCodeAt(0),a=0;16>a;a++)p=p<<1|1&r,w==t-1?(w=0,m.push(s(p)),p=0):w++,r>>=1}0==--h&&(h=Math.pow(2,f),f++),delete o[d]}else for(r=i[d],a=0;f>a;a++)p=p<<1|1&r,w==t-1?(w=0,m.push(s(p)),p=0):w++,r>>=1;0==--h&&(h=Math.pow(2,f),f++)}for(r=2,a=0;f>a;a++)p=p<<1|1&r,w==t-1?(w=0,m.push(s(p)),p=0):w++,r>>=1;for(;;){if(p<<=1,w==t-1){m.push(s(p));break}w++}return m.join("")},decompress:function(e){return null==e?"":""==e?null:n._decompress(e.length,32768,(function(t){return e.charCodeAt(t)}))},_decompress:function(e,s,a){var r,n,i,o,c,u,d,h=[],l=4,f=4,m=3,p="",w=[],g={val:a(0),position:s,index:1};for(r=0;3>r;r+=1)h[r]=r;for(i=0,c=Math.pow(2,2),u=1;u!=c;)o=g.val&g.position,g.position>>=1,0==g.position&&(g.position=s,g.val=a(g.index++)),i|=(o>0?1:0)*u,u<<=1;switch(i){case 0:for(i=0,c=Math.pow(2,8),u=1;u!=c;)o=g.val&g.position,g.position>>=1,0==g.position&&(g.position=s,g.val=a(g.index++)),i|=(o>0?1:0)*u,u<<=1;d=t(i);break;case 1:for(i=0,c=Math.pow(2,16),u=1;u!=c;)o=g.val&g.position,g.position>>=1,0==g.position&&(g.position=s,g.val=a(g.index++)),i|=(o>0?1:0)*u,u<<=1;d=t(i);break;case 2:return""}for(h[3]=d,n=d,w.push(d);;){if(g.index>e)return"";for(i=0,c=Math.pow(2,m),u=1;u!=c;)o=g.val&g.position,g.position>>=1,0==g.position&&(g.position=s,g.val=a(g.index++)),i|=(o>0?1:0)*u,u<<=1;switch(d=i){case 0:for(i=0,c=Math.pow(2,8),u=1;u!=c;)o=g.val&g.position,g.position>>=1,0==g.position&&(g.position=s,g.val=a(g.index++)),i|=(o>0?1:0)*u,u<<=1;h[f++]=t(i),d=f-1,l--;break;case 1:for(i=0,c=Math.pow(2,16),u=1;u!=c;)o=g.val&g.position,g.position>>=1,0==g.position&&(g.position=s,g.val=a(g.index++)),i|=(o>0?1:0)*u,u<<=1;h[f++]=t(i),d=f-1,l--;break;case 2:return w.join("")}if(0==l&&(l=Math.pow(2,m),m++),h[d])p=h[d];else{if(d!==f)return null;p=n+n.charAt(0)}w.push(p),h[f++]=n+p.charAt(0),n=p,0==--l&&(l=Math.pow(2,m),m++)}}};return n}();t?postMessage(r.compress(a)):s&&postMessage(r.decompress(a))}}.toString(),")()"],{type:"application/javascript"})),t=new Worker(e);return URL.revokeObjectURL(e),t},Ya=async e=>{const t=Wa();return new Promise(s=>{t.onmessage=e=>{s(e.data),t.terminate()},t.postMessage({compress:!0,data:e})})},za=async e=>{const t=Wa();return new Promise(s=>{t.onmessage=e=>{s(e.data),t.terminate()},t.postMessage({decompress:!0,data:e})})},Za=async(e,t,s,a,r,n)=>new Promise((i,o)=>{const c=new XMLHttpRequest,u="".concat(ys(),"/api/bundle-chunk?userbaseJsVersion=").concat(ps,"&")+"userId=".concat(e,"&")+"databaseId=".concat(t,"&")+"seqNo=".concat(s,"&")+"bundleId=".concat(a,"&")+"chunkNumber=".concat(r);c.open("POST",u),c.send(new Uint8Array(n)),Ps(c,i,o,3e4)});function Xa(e,t){var s=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),s.push.apply(s,a)}return s}function Qa(e){for(var t=1;t<arguments.length;t++){var s=null!=arguments[t]?arguments[t]:{};t%2?Xa(Object(s),!0).forEach((function(t){r()(e,t,s[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(s)):Xa(Object(s)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(s,t))}))}return e}const $a=Ds()();class er extends Error{constructor(e,t,...s){super(...s),this.name="RequestFailed: ".concat(e),this.message=t.message,this.status=t.status||"timeout"===t.message&&g,this.response=t.status&&t}}class tr extends Error{constructor(e,t,s,...a){super(...a),this.name="WebSocket error",this.message=e,this.username=t,this.e=s}}var sr=new class{constructor(){this.init()}init(e,t,s,a,r,n,i,o){this.pingTimeout&&clearTimeout(this.pingTimeout);for(const e of Object.keys(this))delete this[e];this.ws=null,this.connected=!1,this.resolveConnection=e,this.rejectConnection=t,this.connectionResolved=!1,this.session={username:s&&s.username,sessionId:s&&s.sessionId,creationDate:s&&s.creationDate,expirationDate:s&&s.expirationDate,userId:s&&s.userId,authToken:s&&s.authToken},this.seedString=a,this.changePassword=n,this.keys={init:!1,salts:{}},this.userData={stripeData:{}},this.rememberMe=r,this.requests={},this.state=i||{dbNameToHash:{},databases:{},databasesByDbId:{},shareTokenIdToDbId:{}},this.encryptionMode=o}connect(e,t=null,s,a,r,n){if(this.connected)throw new tr("Web Socket already connected",this.session.username);return new Promise((i,c)=>{let u=!1;const d=setTimeout(()=>{this.connected||this.reconnecting||(u=!0,c(new tr("timeout")))},1e4),h="".concat(Va(ys()),"/api?appId=").concat(ws(),"&sessionId=").concat(e.sessionId,"&clientId=").concat($a,"&userbaseJsVersion=").concat(ps),l=new WebSocket(h);l.onopen=async()=>{u||clearTimeout(d)},l.onmessage=async r=>{if(!u)try{const u=JSON.parse(r.data);switch(u.route){case"Ping":{this.heartbeat();const e="Pong";this.ws.send(JSON.stringify({action:e}));break}case"Connection":{const{encryptionMode:o}=u;if(this.init(i,c,e,t,s,a,n,o),this.ws=l,this.heartbeat(),this.connected=!0,t){const{keySalts:e,validationMessage:t,ecKeyData:s,encryptedValidationMessage:a}=u;this.keys.salts=e,this.validationMessage=t,this.ecKeyData=s,a&&(this.encryptedValidationMessage=new Uint8Array(a.data));try{await this.setKeys(this.seedString);const e=await this.validateKey();this.userData=e}catch(r){throw r&&"OperationError"===r.name||r instanceof DOMException?new Error("Invalid seed"):r}this.keys.init=!0}this.resolveConnection(),this.connectionResolved=!0;break}case"ApplyTransactions":{const e=u.dbId,t=u.dbNameHash,s=u.isOwner?this.state.databases[t]:this.state.databasesByDbId[e];if(!s)throw new Error("Missing database");s.applyTransactionsQueue.isEmpty()?s.applyTransactionsQueue.enqueue(null):await new Promise(e=>{const t=e;s.applyTransactionsQueue.enqueue(t)});if((u.dbNameHash&&(u.dbKey||u.plaintextDbKey)||u.shareTokenEncryptedDbKey)&&(!s.dbKeyString||!s.dbKey)){const e=u.plaintextDbKey||(u.dbKey?await ja.aesGcm.decryptString(this.keys.encryptionKey,u.dbKey):await s.decryptShareTokenEncryptedDbKey(u.shareTokenEncryptedDbKey,u.shareTokenEncryptionKeySalt));s.dbKeyString=e,s.dbKey=await ja.aesGcm.getKeyFromKeyString(e)}if(!s.dbKey)throw new Error("Missing db key");if(u.writers){s.attributionEnabled=!0;for(const{userId:e,username:t}of u.writers)s.usernamesByUserId.set(e,t)}if(u.waitForFullBundle){s.finishedWaitingForBundle||await new Promise(e=>s.finishedWaitingForBundle=e);try{const e=await this.rebuildBundle(s,u.bundleSeqNo,u.encryptedBundleEncryptionKey);await s.applyBundle(e,u.bundleSeqNo)}catch(r){throw window.alert("Oops! Something went wrong. Please contact the site administrator with this issue (".concat(e,").\n\n")+r),r}}const a=u.transactionLog;if(await s.applyTransactions(a,u.ownerId,e,t),u.buildBundle&&this.buildBundle(s),s.applyTransactionsQueue.dequeue(),!s.applyTransactionsQueue.isEmpty()){s.applyTransactionsQueue.peek()()}break}case"DownloadBundleChunk":{const{dbId:e,dbNameHash:t,isOwner:s,bundleSeqNo:a,isFirstChunk:r,isLastChunk:n,chunk:i}=u,o=s?this.state.databases[t]:this.state.databasesByDbId[e];if(!o)throw new Error("Missing database");r&&(o.bundleChunks[a]=[]),o.bundleChunks[a].push(i),n&&(o.finishedWaitingForBundle?o.finishedWaitingForBundle():o.finishedWaitingForBundle=!0);break}case"UpdatedUser":this.handleUpdateUser(u.updatedUser);break;case"SignOut":case"UpdateUser":case"DeleteUser":case"CreateDatabase":case"OpenDatabase":case"OpenDatabaseByDatabaseId":case"GetDatabases":case"GetDatabaseUsers":case"Insert":case"Update":case"Delete":case"BatchTransaction":case"InitBundleUpload":case"CompleteBundleUpload":case"GenerateFileId":case"UploadFileChunk":case"CompleteFileUpload":case"GetChunk":case"ValidateKey":case"GetPasswordSalts":case"PurchaseSubscription":case"CancelSubscription":case"ResumeSubscription":case"UpdatePaymentMethod":case"ShareDatabase":case"ShareDatabaseToken":case"AuthenticateShareToken":case"SaveDatabase":case"ModifyDatabasePermissions":case"VerifyUser":{const e=u.requestId;if(!e)return console.warn("Missing request id");const t=this.requests[e];if(!t)return console.warn("Request ".concat(e," no longer exists!"));if(!t.promiseResolve||!t.promiseReject)return;const s=u.response;return s&&s.status===o?t.promiseResolve(s):t.promiseReject(s)}default:console.log("Received unknown message from backend:"+JSON.stringify(u))}}catch(r){this.connectionResolved?console.warn("Error handling message: ",r):(this.close(),c(new tr(r.message,e.username,r)))}},l.onclose=async o=>{if(u)return;const d=o.code===y,h=o.code===b;if(d||h||!o.wasClean){const o=d&&!r?0:r?r+1e3:1e3;this.reconnecting=!0,await this.reconnect(i,c,e,this.seedString||t,s,a,o,!this.reconnected&&n)}else o.code===v?c(new tr("Web Socket already connected",e.username,o)):this.init()},l.onerror=()=>{}})}async reconnect(e,t,s,a,r,n,i,o){try{const t=Math.min(i,3e4);console.log("Connection to server lost. Attempting to reconnect in ".concat(t/1e3," second").concat(1e3!==t?"s":"","..."));const c=[],u=[];e(await new Promise((e,d)=>setTimeout(async()=>{try{const t=o||{dbNameToHash:Qa({},this.state.dbNameToHash),databases:Qa({},this.state.databases),databasesByDbId:Qa({},this.state.databasesByDbId),shareTokenIdToDbId:Qa({},this.state.shareTokenIdToDbId)};for(const e in t.databases)t.databases[e].init=!1,t.databases[e].finishedWaitingForBundle=!1,c.push(e);for(const e in t.databasesByDbId)t.databasesByDbId[e].init=!1,t.databasesByDbId[e].finishedWaitingForBundle=!1,u.push(e);this.init(),this.reconnecting=!0;const d=await this.connect(s,a,r,n,i,t);this.reconnected=!0,o||(await this.reopenDatabases(c,u,1e3),console.log("Reconnected!")),e(d)}catch(e){d(e)}},t)))}catch(e){t(e)}}async reopenDatabases(e,t,s){try{const s=[];for(const t of e){const e=this.state.databases[t];if(!e.init){const a="OpenDatabase",r={dbNameHash:t,reopenAtSeqNo:e.lastSeqNo};s.push(this.request(a,r))}}for(const e of t){const t=this.state.databasesByDbId[e];if(!t.init){const a=t.shareTokenHkdfKey,r=a?await this.authenticateShareToken(t.shareTokenId,a):{},n="OpenDatabaseByDatabaseId",i=Qa({databaseId:e,reopenAtSeqNo:t.lastSeqNo},r);s.push(this.request(n,i))}}await Promise.all(s)}catch(a){await new Promise(a=>setTimeout(async()=>{await this.reopenDatabases(e,t,s+1e3),a()},Math.min(s,3e4)))}}heartbeat(){clearTimeout(this.pingTimeout);this.pingTimeout=setTimeout(()=>{this.ws&&this.ws.close(b)},33e3)}close(e){this.ws?this.ws.close(e):this.init()}async signOut(){const e=this.session.username,t=this.connectionResolved,s=this.rejectConnection;try{_s.signOutSession(this.rememberMe,e);const a=this.session.sessionId;if(this.reconnecting)throw new hs.Reconnecting;const r="SignOut",n={sessionId:a};await this.request(r,n),this.close(),!t&&s&&s(new tr("Canceled",e))}catch(a){throw!t&&s&&s(new tr("Canceled",e)),a}}async setKeys(e){if(this.keys.init)return;if(!e)throw new tr("Missing seed",this.session.username);if(!this.keys.salts)throw new tr("Missing salts",this.session.username);this.seedString||(this.seedString=e);const t=i.a.decode(e),s=await ja.hkdf.importHkdfKey(t),a=this.keys.salts;if(this.keys.encryptionKey=await ja.aesGcm.importKeyFromMaster(s,i.a.decode(a.encryptionKeySalt)),this.keys.hmacKey=await ja.hmac.importKeyFromMaster(s,i.a.decode(a.hmacKeySalt)),a.ecdsaKeyEncryptionKeySalt){const e=await ja.ecdsa.importEcdsaKeyEncryptionKeyFromMaster(s,i.a.decode(a.ecdsaKeyEncryptionKeySalt)),t=i.a.decode(this.ecKeyData.encryptedEcdsaPrivateKey),r=await ja.aesGcm.decrypt(e,t);this.keys.ecdsaPrivateKey=await ja.ecdsa.getPrivateKeyFromRawPrivateKey(r);const n=await ja.ecdh.importEcdhKeyEncryptionKeyFromMaster(s,i.a.decode(a.ecdhKeyEncryptionKeySalt)),o=i.a.decode(this.ecKeyData.encryptedEcdhPrivateKey),c=await ja.aesGcm.decrypt(n,o);this.keys.ecdhPrivateKey=await ja.ecdh.getPrivateKeyFromRawPrivateKey(c)}else a.dhKeySalt&&(this.keys.dhPrivateKey=await ja.diffieHellman.importKeyFromMaster(s,i.a.decode(a.dhKeySalt)));if(a.dhKeySalt||a.ecdsaKeyWrapperSalt){const e=await ja.ecdsa.generateEcdsaKeyData(s),t=await ja.ecdh.generateEcdhKeyData(s,e.ecdsaPrivateKey);this.keys.ecdsaPrivateKey=e.ecdsaPrivateKey,this.keys.ecdhPrivateKey=t.ecdhPrivateKey,delete e.ecdsaPrivateKey,delete t.ecdhPrivateKey,this.newEcKeyData={ecdsaKeyData:e,ecdhKeyData:t}}}async validateKey(){let e;if(this.keys.ecdsaPrivateKey&&!this.keys.dhPrivateKey)e=await ja.ecdsa.sign(this.keys.ecdsaPrivateKey,i.a.decode(this.validationMessage));else if(this.keys.dhPrivateKey){const t=await ja.diffieHellman.getSharedKeyWithServer(this.keys.dhPrivateKey);e=await ja.aesGcm.decrypt(t,this.encryptedValidationMessage),delete this.keys.dhPrivateKey}const t={validationMessage:i.a.encode(e),ecKeyData:this.newEcKeyData};return(await this.request("ValidateKey",t)).data}async request(e,t){const s=Ds()();this.requests[s]={};const a=this.watch(s);this.ws.send(JSON.stringify({requestId:s,action:e,params:t}));try{return await a}catch(t){throw t.status===m?new hs.TooManyRequests(t.data.retryDelay):new er(e,t)}}async watch(e){const t=await new Promise((t,s)=>{this.requests[e].promiseResolve=t,this.requests[e].promiseReject=s,setTimeout(()=>{s(new Error("timeout"))},3e4)});return delete this.requests[e],t}async rebuildBundle(e,t,s){const a=[];for(let s=0;s<e.bundleChunks[t].length;s++){const r=e.bundleChunks[t][s],n=Ls(r);a.push(n)}const r=(e=>{const t=e.map(e=>e.byteLength),s=t.reduce((e,t)=>e+t),a=new Uint8Array(s);let r=0;for(let s=0;s<e.length;s++)a.set(new Uint8Array(e[s]),r),r+=t[s];return{buffer:a.buffer,byteLengths:t}})(a).buffer,{encrypted:n,plaintextMetadata:o}=JSON.parse(Fs(r)),c=await ja.aesGcm.decrypt(e.dbKey,i.a.decode(s)),u=await ja.aesGcm.getKeyFromRawKey(c),d=await ja.aesGcm.decrypt(u,Ls(n)),h=Fs(d),[l,f]=await Promise.all([za(h),za(o)]),m=Qa(Qa({},JSON.parse(l)),JSON.parse(f));return delete e.bundleChunks[t],m}async uploadBundle(e,t,s,a,r){let n=0,i=0,o=[];for(;n<r.byteLength;){const c=r.slice(n,n+524288);if(o.push(Za(e,t,s,a,i,c)),10===o.length){try{await Promise.all(o)}catch(e){return 0}o=[]}i+=1,n+=524288}try{await Promise.all(o)}catch(e){return 0}return i}async initBundleUpload(e,t,s){const a={dbId:e,seqNo:t};let r;try{r=await this.request("InitBundleUpload",a)}catch(e){return{}}const{bundleId:n}=r.data,[o,c]=await ja.aesGcm.generateAndEncryptKeyEncryptionKey(s);return{bundleId:n,bundleEncryptionKey:o,encryptedBundleEncryptionKey:i.a.encode(c)}}orderedItems(e,t){const s=[];for(let a=0;a<t.array.length;a++){const r=t.array[a].itemId;s.push(e[r])}return s}prepareBundle(e){const{items:t,itemsIndex:s,itemsPlaintextMetadata:a}=e;return{encrypted:JSON.stringify({items:this.orderedItems(t,s),itemsIndex:s.array}),plaintextMetadata:JSON.stringify({itemsPlaintextMetadata:this.orderedItems(a,s)})}}async buildBundle(e){const t=e.dbId,s=e.lastSeqNo,a=e.dbKey,r=this.session.userId;if(e.bundledAtSeqNo&&e.bundledAtSeqNo>=s)return;e.bundledAtSeqNo=s;const n=this.prepareBundle(e),i=e.attributionEnabled?[...e.usernamesByUserId.keys()].join(","):void 0,{bundleId:o,bundleEncryptionKey:c,encryptedBundleEncryptionKey:u}=await this.initBundleUpload(t,s,a);if(!o)return;const[d,h]=await Promise.all([Ya(n.encrypted),Ya(n.plaintextMetadata)]),l=Ls(d),f=await ja.aesGcm.encrypt(c,l);n.encrypted=Fs(f),n.plaintextMetadata=h;const m=Ls(JSON.stringify(n)),p=await this.uploadBundle(r,t,s,o,m);if(!p)return;const w={dbId:t,seqNo:s,bundleId:o,writers:i,numChunks:p,encryptedBundleEncryptionKey:u};try{await this.request("CompleteBundleUpload",w)}catch(e){return}}buildUserResult({username:e,userId:t,authToken:s,email:a,profile:r,protectedProfile:n,usedTempPassword:i,changePassword:o,passwordChanged:c,userData:u}){const d={username:e,userId:t,authToken:s};if(a&&(d.email=a),r&&(d.profile=r),n&&(d.protectedProfile=n),i&&(d.usedTempPassword=i),o&&(d.changePassword=o),c&&(d.passwordChanged=c),u){const{creationDate:e,stripeData:t}=u;if(e&&(d.creationDate=e),t){const{paymentsMode:e,subscriptionStatus:s,cancelSubscriptionAt:a,subscriptionPlanId:r,trialExpirationDate:n}=t;e&&(d.paymentsMode=e),s&&(d.subscriptionStatus=s),a&&(d.cancelSubscriptionAt=a),r&&(d.subscriptionPlanId=r),n&&(d.trialExpirationDate=n)}}return d}handleUpdateUser(e){if(this.session&&this.session.userId===e.userId){this.session.username=e.username,this.userData=e.userData;const t=gs();t&&t({user:this.buildUserResult(Qa({authToken:this.session.authToken},e))})}}async rotateKeys(e,t){const{keySalts:s,ecKeyData:a}=t,{ecdsaKeyData:r,ecdhKeyData:n}=a;s.ecdsaKeyEncryptionKeySalt=r.ecdsaKeyEncryptionKeySalt,s.ecdhKeyEncryptionKeySalt=n.ecdhKeyEncryptionKeySalt,this.keys.salts=s,this.ecKeyData=Qa(Qa({},r),n),await this.setKeys(e),this.keys.init=!0}async authenticateShareToken(e,t){const s={shareTokenId:e};let a;try{a=await this.request("AuthenticateShareToken",s)}catch(e){if(e.response&&"ShareTokenNotFound"===e.response.data)throw new hs.ShareTokenNotFound;throw e}const{databaseId:r,shareTokenAuthKeyData:n,validationMessage:o}=a.data;let c;try{const e=i.a.decode(n.shareTokenEcdsaKeyEncryptionKeySalt),s=await ja.ecdsa.importEcdsaKeyEncryptionKeyFromMaster(t,e),a=i.a.decode(n.shareTokenEncryptedEcdsaPrivateKey),r=await ja.aesGcm.decrypt(s,a);c=await ja.ecdsa.getPrivateKeyFromRawPrivateKey(r)}catch(e){throw new hs.ShareTokenInvalid}const u=await ja.ecdsa.sign(c,i.a.decode(o));return{databaseId:r,validationMessage:o,signedValidationMessage:i.a.encode(u)}}};function ar(e,t){var s=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),s.push.apply(s,a)}return s}function rr(e){for(var t=1;t<arguments.length;t++){var s=null!=arguments[t]?arguments[t]:{};t%2?ar(Object(s),!0).forEach((function(t){r()(e,t,s[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(s)):ar(Object(s)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(s,t))}))}return e}const nr={local:!0,session:!0,none:!0},ir="Device not recognized. This temporary password can only be used to sign in from a device you've signed in from before.",or="Device not recognized. Forgot password only works from a device you've signed in from before.",cr=e=>{if(e.response){if("Domain not whitelisted"===e.response.data)throw new hs.DomainNotWhitelisted(window.location.origin);if("App ID not valid"===e.response.data)throw new hs.AppIdNotValid;if("UserNotFound"===e.response.data)throw new hs.UserNotFound;if(e.response.status===p)throw new hs.InternalServerError;if(e.response.status===g)throw new hs.Timeout}else if(e.message&&-1!==e.message.indexOf("timeout"))throw new hs.Timeout},ur=async(e,t,s,a)=>{try{await sr.connect(e,t,s,a)}catch(e){if(cr(e),"Web Socket already connected"===e.message)throw new hs.UserAlreadySignedIn(e.username);throw e}},dr=e=>{if(e.response&&"UsernameTooLong"===e.response.data.error)throw new hs.UsernameTooLong(e.response.data.maxLen);if(e.response&&"PasswordAttemptLimitExceeded"===e.response.data.error)throw new hs.PasswordAttemptLimitExceeded(e.response.data.delay)},hr=e=>{if(e.response&&e.response.data){const t=e.response.data;switch(t.error){case"SessionLengthTooShort":throw new hs.SessionLengthTooShort(t.minLen);case"SessionLengthTooLong":throw new hs.SessionLengthTooLong(t.maxLen)}}},lr=(e,t)=>{if(cr(e),dr(e),e.response){const s=e.response.data;switch(s){case"UsernameAlreadyExists":throw new hs.UsernameAlreadyExists(t);case"TrialExceededLimit":throw new hs.TrialExceededLimit;case"CurrentPasswordIncorrect":throw new hs.CurrentPasswordIncorrect}switch(s.error){case"EmailNotValid":throw new hs.EmailNotValid;case"ProfileMustBeObject":throw new hs.ProfileMustBeObject;case"ProfileKeyTooLong":throw new hs.ProfileKeyTooLong(s.maxLen,s.key);case"ProfileValueMustBeString":throw new hs.ProfileValueMustBeString(s.key,s.value);case"ProfileValueCannotBeBlank":throw new hs.ProfileValueCannotBeBlank(s.key);case"ProfileValueTooLong":throw new hs.ProfileValueTooLong(s.maxLen,s.key,s.value);case"ProfileHasTooManyKeys":throw new hs.ProfileHasTooManyKeys(s.maxKeys);case"ProfileCannotBeEmpty":throw new hs.ProfileCannotBeEmpty}}throw e},fr=e=>e&&60*e*60*1e3,mr=e=>{if("string"!=typeof e)throw new hs.UsernameMustBeString;if(0===e.length)throw new hs.UsernameCannotBeBlank},pr=e=>{if("string"!=typeof e)throw new hs.PasswordMustBeString;if(0===e.length)throw new hs.PasswordCannotBeBlank;if(e.length<6)throw new hs.PasswordTooShort(6);if(e.length>1e3)throw new hs.PasswordTooLong(1e3)},wr=e=>{if("object"!=typeof e)throw new hs.ParamsMustBeObject;if(!Ga(e,"username"))throw new hs.UsernameMissing;if(!Ga(e,"password"))throw new hs.PasswordMissing;if(mr(e.username),pr(e.password),Ga(e,"rememberMe")&&!nr[e.rememberMe])throw new hs.RememberMeValueNotValid(nr);if(Ga(e,"sessionLength")&&"number"!=typeof e.sessionLength)throw new hs.SessionLengthMustBeNumber},gr=async(e,t,s)=>{const a=ja.scrypt.generateSalt(),r=await ja.scrypt.hash(e,a,s),n=await ja.hkdf.importHkdfKeyFromString(r),o=ja.hkdf.generateSalt(),c=await ja.hkdf.getPasswordToken(n,o),u=ja.hkdf.generateSalt(),d=await ja.aesGcm.getPasswordBasedEncryptionKey(n,u),h=await ja.aesGcm.encrypt(d,t);return{passwordToken:c,passwordSalts:{passwordSalt:i.a.encode(a),passwordTokenSalt:i.a.encode(o)},passwordBasedBackup:{passwordBasedEncryptionKeySalt:i.a.encode(u),passwordEncryptedSeed:i.a.encode(h)}}},yr=async e=>{const t=await ja.hkdf.importHkdfKey(e),s=ja.hkdf.generateSalt(),a=ja.hkdf.generateSalt(),r={encryptionKeySalt:i.a.encode(s),hmacKeySalt:i.a.encode(a)},n=await ja.ecdsa.generateEcdsaKeyData(t),o=await ja.ecdh.generateEcdhKeyData(t,n.ecdsaPrivateKey);delete n.ecdsaPrivateKey,delete o.ecdhPrivateKey;return{ecKeyData:{ecdsaKeyData:n,ecdhKeyData:o},keySalts:r}},br=e=>{if("object"!=typeof e)throw new hs.ProfileMustBeObject;let t=!1;for(const s in e){t=!0;const a=e[s];if("string"!=typeof a)throw new hs.ProfileValueMustBeString(s,a);if(!a)throw new hs.ProfileValueCannotBeBlank(s)}if(!t)throw new hs.ProfileCannotBeEmpty},vr=async()=>{try{const e="GetPasswordSalts";return(await sr.request(e)).data}catch(e){throw cr(e),e}},Mr=async(e,t,s)=>{const{passwordSalt:a,passwordTokenSalt:r}=t,n=await ja.scrypt.hash(e,new Uint8Array(i.a.decode(a)),s),o=await ja.hkdf.importHkdfKeyFromString(n);return{passwordHkdfKey:o,passwordToken:await ja.hkdf.getPasswordToken(o,i.a.decode(r))}},Sr=async(e,t)=>{let s;try{const a=_s.getCurrentSession();if(!a)return{};const{signedIn:r,sessionId:n,creationDate:i,expirationDate:o,rememberMe:c}=a;s=a.username;const u=_s.getSeedString(e,s);if(!r||!u||new Date>new Date(o))return{lastUsedUsername:s};let d;try{d=await Us(n,t)}catch(e){if(cr(e),hr(e),e.response&&"Session invalid"===e.response.data)return{lastUsedUsername:s};throw e}const{userId:h,authToken:l,username:f,email:m,profile:p,protectedProfile:w}=d;if(f!==s&&(_s.saveSeedString(c,e,f,u),_s.removeSeedString(e,s)),_s.signInSession(c,f,n,i,d.expirationDate),sr.connectionResolved){if(sr.session.sessionId===n)return{user:sr.buildUserResult({username:f,userId:h,authToken:sr.session.authToken,email:m,profile:p,protectedProfile:w,userData:sr.userData})};throw new hs.UserAlreadySignedIn(sr.session.username)}const g=rr(rr({},a),{},{username:f,userId:h,authToken:l});return await ur(g,u,c),{user:sr.buildUserResult({username:f,userId:h,authToken:l,email:m,profile:p,protectedProfile:w,userData:sr.userData})}}catch(e){if("Invalid seed"===e.message)return{lastUsedUsername:s};throw cr(e),e}},Ir=async(e,t)=>{const s=_s.getSeedString(e,t);if(!s)throw new hs.KeyNotFound(or);const a=i.a.decode(s);return await ja.hkdf.importHkdfKey(a)};var Pr={signUp:async e=>{try{(e=>{if(wr(e),e.profile&&br(e.profile),e.email&&"string"!=typeof e.email)throw new hs.EmailNotValid})(e);const{password:t,profile:s,passwordHashAlgo:a,rememberMe:r="session"}=e,n=e.username.toLowerCase(),o=e.email&&e.email.toLowerCase(),c=ws(),u=await ja.generateSeed(),d=fr(e.sessionLength),{sessionId:h,creationDate:l,expirationDate:f,userId:m,authToken:p}=await(async(e,t,s,a,r,n,i)=>{const{passwordToken:o,passwordSalts:c,passwordBasedBackup:u}=await gr(t,s,a),{ecKeyData:d,keySalts:h}=await yr(s);try{return await Es(e,o,d,c,h,r,n,u,i)}catch(t){hr(t),lr(t,e)}})(n,t,u,a,o,s,d),w={username:n,userId:m,sessionId:h,creationDate:l,expirationDate:f,authToken:p},g=i.a.encode(u);return _s.saveSeedString(r,c,n,g),_s.signInSession(r,n,h,l,f),await ur(w,g,r),sr.buildUserResult({username:n,userId:m,authToken:p,email:o,profile:s,userData:sr.userData})}catch(e){switch(e.name){case"ParamsMustBeObject":case"UsernameMissing":case"UsernameAlreadyExists":case"UsernameCannotBeBlank":case"UsernameMustBeString":case"UsernameTooLong":case"PasswordMissing":case"PasswordCannotBeBlank":case"PasswordTooShort":case"PasswordTooLong":case"PasswordMustBeString":case"EmailNotValid":case"ProfileMustBeObject":case"ProfileCannotBeEmpty":case"ProfileHasTooManyKeys":case"ProfileKeyTooLong":case"ProfileValueMustBeString":case"ProfileValueCannotBeBlank":case"ProfileValueTooLong":case"RememberMeValueNotValid":case"SessionLengthMustBeNumber":case"SessionLengthTooShort":case"SessionLengthTooLong":case"TrialExceededLimit":case"AppIdNotSet":case"AppIdNotValid":case"DomainNotWhitelisted":case"UserAlreadySignedIn":case"ServiceUnavailable":throw e;default:throw new hs.UnknownServiceUnavailable(e)}}},signOut:async()=>{try{if(!sr.session.username)throw new hs.UserNotSignedIn;try{await sr.signOut()}catch(e){throw cr(e),e}}catch(e){switch(e.name){case"UserNotSignedIn":case"ServiceUnavailable":throw e;default:throw new hs.UnknownServiceUnavailable(e)}}},signIn:async e=>{try{wr(e);const t=e.username.toLowerCase(),{password:s,passwordHashAlgo:a,rememberMe:r="session"}=e,n=ws(),o=await(async e=>{try{return await Bs(e)}catch(e){if(cr(e),dr(e),e.response&&"User not found"===e.response.data)throw new hs.UsernameOrPasswordMismatch;throw e}})(t),{passwordHkdfKey:c,passwordToken:u}=await Mr(s,o,a),d=fr(e.sessionLength),h=await(async(e,t,s)=>{try{return await Ns(e,t,s)}catch(e){if(cr(e),dr(e),hr(e),e.response&&"Invalid password"===e.response.data)throw new hs.UsernameOrPasswordMismatch;if(e.response&&"User pending deletion"===e.response.data)throw new hs.UserPendingDeletion;throw e}})(t,u,d),{userId:l,email:f,profile:m,passwordBasedBackup:p,protectedProfile:w,usedTempPassword:g,changePassword:y}=h,b=rr(rr({},h.session),{},{username:t,userId:l});let v;if(!y){const e=_s.getSeedString(n,t);let s;if(!e&&g)throw new hs.KeyNotFound(ir);g||(s=await(async(e,t)=>{const{passwordBasedEncryptionKeySalt:s,passwordEncryptedSeed:a}=t,r=await ja.aesGcm.getPasswordBasedEncryptionKey(e,i.a.decode(s)),n=await ja.aesGcm.decrypt(r,i.a.decode(a));return i.a.encode(n)})(c,p),_s.saveSeedString(r,n,t,s)),v=s||e}_s.signInSession(r,t,b.sessionId,b.creationDate,b.expirationDate);try{await ur(b,v,r,y)}catch(e){if(g&&"Invalid seed"===e.message)throw new hs.KeyNotFound(ir);throw e}return sr.buildUserResult({username:t,userId:l,authToken:b.authToken,email:f,profile:m,protectedProfile:w,usedTempPassword:g,changePassword:y,userData:sr.userData})}catch(e){switch(e.name){case"ParamsMustBeObject":case"UsernameMissing":case"UsernameOrPasswordMismatch":case"UserPendingDeletion":case"UsernameCannotBeBlank":case"UsernameTooLong":case"UsernameMustBeString":case"PasswordMissing":case"PasswordCannotBeBlank":case"PasswordTooShort":case"PasswordTooLong":case"PasswordMustBeString":case"PasswordAttemptLimitExceeded":case"RememberMeValueNotValid":case"SessionLengthMustBeNumber":case"SessionLengthTooShort":case"SessionLengthTooLong":case"KeyNotFound":case"AppIdNotSet":case"AppIdNotValid":case"DomainNotWhitelisted":case"UserAlreadySignedIn":case"ServiceUnavailable":throw e;default:throw new hs.UnknownServiceUnavailable(e)}}},init:async e=>{try{if(!window.crypto.subtle)throw new hs.WebCryptoUnavailable;if("object"!=typeof e)throw new hs.ParamsMustBeObject;if(!Ga(e,"appId"))throw new hs.AppIdMissing;if("string"!=typeof e.appId)throw new hs.AppIdMustBeString;if(0===e.appId.length)throw new hs.AppIdCannotBeBlank;if(Ga(e,"updateUserHandler")&&"function"!=typeof e.updateUserHandler)throw new hs.UpdateUserHandlerMustBeFunction;if(Ga(e,"sessionLength")&&"number"!=typeof e.sessionLength)throw new hs.SessionLengthMustBeNumber;if(Ga(e,"allowServerSideEncryption")&&"boolean"!=typeof e.allowServerSideEncryption)throw new hs.AllowServerSideEncryptionMustBeBoolean;bs(e);return await Sr(e.appId,fr(e.sessionLength))}catch(e){switch(e.name){case"WebCryptoUnavailable":case"ParamsMustBeObject":case"AppIdMissing":case"AppIdAlreadySet":case"AppIdMustBeString":case"AppIdCannotBeBlank":case"AppIdNotValid":case"DomainNotWhitelisted":case"UpdateUserHandlerMustBeFunction":case"SessionLengthMustBeNumber":case"SessionLengthTooShort":case"SessionLengthTooLong":case"AllowServerSideEncryptionMustBeBoolean":case"UserAlreadySignedIn":case"ServiceUnavailable":throw e;default:throw new hs.UnknownServiceUnavailable(e)}}},updateUser:async e=>{try{if("object"!=typeof e)throw new hs.ParamsMustBeObject;if((e=>{if(!(Ga(e,"username")||Ga(e,"newPassword")||Ga(e,"email")||Ga(e,"profile")))throw new hs.ParamsMissing;const{username:t,currentPassword:s,newPassword:a,email:r,profile:n}=e;if(Ga(e,"username")&&mr(t),Ga(e,"newPassword")){if(!Ga(e,"currentPassword"))throw new hs.CurrentPasswordMissing;pr(s),pr(a)}if(r&&"string"!=typeof r)throw new hs.EmailNotValid;n&&br(n)})(e),sr.reconnecting)throw new hs.Reconnecting;if(!sr.connectionResolved)throw new hs.UserNotSignedIn;const t=sr.session.userId,s=e.newPassword&&!sr.keys.init&&sr.changePassword&&await ja.generateSeed(),a="UpdateUser",r=await(async(e,t)=>{if(e.username&&(e.username=e.username.toLowerCase()),e.newPassword){const[s,a,r]=await Promise.all([vr(),gr(e.newPassword,t||i.a.decode(sr.seedString)),t&&yr(t)]),{passwordToken:n}=await Mr(e.currentPassword,s,e.passwordHashAlgo);e.currentPasswordToken=n,delete e.currentPassword,e.passwordToken=a.passwordToken,e.passwordSalts=a.passwordSalts,e.passwordBasedBackup=a.passwordBasedBackup,delete e.newPassword,r&&(e.newKeyData=r)}return e.email?e.email=e.email.toLowerCase():Ga(e,"email")&&(e.email=!1),!e.profile&&Ga(e,"profile")&&(e.profile=!1),e})(rr({},e),s);if(sr.reconnecting)throw new hs.Reconnecting;if(!sr.connectionResolved)throw new hs.UserNotSignedIn;if(!sr.session||t!==sr.session.userId)throw new hs.ServiceUnavailable;try{r.username&&_s.saveSeedString(sr.rememberMe,ws(),r.username,sr.seedString);const e=(await sr.request(a,r)).data.updatedUser;if(sr.handleUpdateUser(e),s&&sr.session&&t===sr.session.userId){const t=i.a.encode(s);await sr.rotateKeys(t,r.newKeyData),_s.saveSeedString(sr.rememberMe,ws(),e.username,t);const{sessionId:a,creationDate:n,expirationDate:o}=sr.session;_s.signInSession(sr.rememberMe,e.username,a,n,o)}}catch(e){lr(e,r.username)}}catch(e){switch(e.name){case"ParamsMustBeObject":case"ParamsMissing":case"UsernameAlreadyExists":case"UsernameMustBeString":case"UsernameCannotBeBlank":case"UsernameTooLong":case"CurrentPasswordMissing":case"CurrentPasswordIncorrect":case"PasswordAttemptLimitExceeded":case"PasswordMustBeString":case"PasswordCannotBeBlank":case"PasswordTooShort":case"PasswordTooLong":case"EmailNotValid":case"ProfileMustBeObject":case"ProfileCannotBeEmpty":case"ProfileHasTooManyKeys":case"ProfileKeyTooLong":case"ProfileValueMustBeString":case"ProfileValueCannotBeBlank":case"ProfileValueTooLong":case"AppIdNotSet":case"AppIdNotValid":case"UserNotFound":case"UserNotSignedIn":case"TooManyRequests":case"ServiceUnavailable":throw e;default:throw new hs.UnknownServiceUnavailable(e)}}},deleteUser:async()=>{try{(()=>{if(sr.reconnecting)throw new hs.Reconnecting;if(!sr.keys.init&&sr.changePassword)throw new hs.UserMustChangePassword;if(!sr.keys.init)throw new hs.UserNotSignedIn})();const e=sr.session.username;_s.removeSeedString(ws(),e),_s.removeCurrentSession();try{const e="DeleteUser";await sr.request(e)}catch(e){throw cr(e),e}sr.close()}catch(e){switch(e.name){case"UserMustChangePassword":case"UserNotSignedIn":case"UserNotFound":case"TooManyRequests":case"ServiceUnavailable":throw e;default:throw new hs.UnknownServiceUnavailable(e)}}},forgotPassword:async e=>{try{if("object"!=typeof e)throw new hs.ParamsMustBeObject;if(Ga(e,"deleteEndToEndEncryptedData")&&"boolean"!=typeof e.deleteEndToEndEncryptedData)throw new hs.DeleteEndToEndEncryptedDataMustBeBoolean;if(!Ga(e,"username"))throw new hs.UsernameMissing;mr(e.username);const t=e.username.toLowerCase(),s=ws(),a="".concat(Va(ys()),"/api/auth/forgot-password?appId=").concat(s,"&username=").concat(encodeURIComponent(t),"&userbaseJsVersion=").concat(ps),r=new WebSocket(a+(Ga(e,"deleteEndToEndEncryptedData")?"&deleteEndToEndEncryptedData=".concat(e.deleteEndToEndEncryptedData):""));await new Promise((e,a)=>{setTimeout(()=>a(new hs.Timeout),15e3),r.onerror=()=>a(new hs.ServiceUnavailable),r.onmessage=async n=>{try{const o=JSON.parse(n.data);switch(o.route){case"ReceiveEncryptedToken":{const e=await Ir(s,t),a=new Uint8Array(o.encryptedForgotPasswordToken.data),n=await ja.diffieHellman.importKeyFromMaster(e,i.a.decode(o.dhKeySalt)),c=await ja.diffieHellman.getSharedKeyWithServer(n);let u;try{u=i.a.encode(await ja.aesGcm.decrypt(c,a))}catch(e){throw new hs.KeyNotFound(or)}r.send(JSON.stringify({action:"ForgotPassword",params:{forgotPasswordToken:u}}));break}case"ReceiveToken":{const e=await Ir(s,t),{ecdsaKeyEncryptionKeySalt:a,encryptedEcdsaPrivateKey:n,forgotPasswordToken:c}=o,u=await ja.ecdsa.importEcdsaKeyEncryptionKeyFromMaster(e,i.a.decode(a));let d;try{const e=await ja.aesGcm.decrypt(u,i.a.decode(n));d=await ja.ecdsa.getPrivateKeyFromRawPrivateKey(e)}catch(e){throw new hs.KeyNotFound(or)}const h=i.a.encode(await ja.ecdsa.sign(d,i.a.decode(c)));r.send(JSON.stringify({action:"ForgotPassword",params:{signedForgotPasswordToken:h}}));break}case"SuccessfullyForgotPassword":e();break;case"Error":{const e=o.data;switch(e.name){case"UsernameTooLong":throw new hs.UsernameTooLong(e.maxLen);case"AppIdNotValid":throw new hs.AppIdNotValid;case"UserNotFound":throw new hs.UserNotFound;case"UserEmailNotFound":throw new hs.UserEmailNotFound;default:throw o.status===p?new hs.ServiceUnavailable:new hs.UnknownServiceUnavailable(e)}}case"Ping":break;default:a(new Error("Received unknown message from userbase-server: ".concat(n.data)))}}catch(n){a(n)}}}),r.close()}catch(e){switch(e.name){case"ParamsMustBeObject":case"UsernameMissing":case"UsernameMustBeString":case"UsernameCannotBeBlank":case"UsernameTooLong":case"AppIdNotSet":case"AppIdNotValid":case"KeyNotFound":case"UserNotFound":case"UserEmailNotFound":case"ServiceUnavailable":throw e;default:throw new hs.UnknownServiceUnavailable(e)}}}},Er=s(12),Br=s.n(Er);function Nr(e,t){var s=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),s.push.apply(s,a)}return s}function Ur(e){for(var t=1;t<arguments.length;t++){var s=null!=arguments[t]?arguments[t]:{};t%2?Nr(Object(s),!0).forEach((function(t){r()(e,t,s[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(s)):Nr(Object(s)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(s,t))}))}return e}const Ar={"end-to-end":!0,"server-side":!0},Tr=()=>{if(sr.reconnecting)throw new hs.Reconnecting;if(!sr.keys.init&&sr.changePassword)throw new hs.UserMustChangePassword;if(!sr.keys.init||!Ar[sr.encryptionMode])throw new hs.UserNotSignedIn},kr=e=>{if(e.response){if("UserNotFound"===e.response.data)throw new hs.UserNotFound;if(e.response.status===p)throw new hs.InternalServerError;if(e.response.status===g)throw new hs.Timeout}else if(e.message&&-1!==e.message.indexOf("timeout"))throw new hs.Timeout};class Dr{constructor(e){this.startSeqNo=e,this.txSeqNo=null,this.transactions={},this.promiseResolve=null,this.promiseReject=null,this.index=null}getStartSeqNo(){return this.startSeqNo}getIndex(){return this.index}setIndex(e){this.index=e}async getResult(e){this.txSeqNo=e;const t=new Promise((e,t)=>{this.promiseResolve=e,this.promiseReject=t,setTimeout(()=>{t(new Error("timeout"))},3e4)});return this.verifyPromise(),t}verifyPromise(){(this.txSeqNo||0==this.txSeqNo)&&this.promiseResolve&&this.promiseReject&&this.transactions[this.txSeqNo]&&("Success"==this.transactions[this.txSeqNo]?this.promiseResolve():this.promiseReject(this.transactions[this.txSeqNo]))}addTransaction(e,t){this.transactions[e.seqNo]||(this.transactions[e.seqNo]=t,this.verifyPromise())}}class Kr{constructor(e,t,s,a){this.onChange=xr(e),this.items={},this.itemsPlaintextMetadata={},this.fileIds={};this.itemsIndex=new Br.a([],(e,t)=>e.seqNo<t.seqNo||e.seqNo===t.seqNo&&e.operationIndex<t.operationIndex?-1:e.seqNo>t.seqNo||e.seqNo===t.seqNo&&e.operationIndex>t.operationIndex?1:0),this.unverifiedTransactions=[],this.lastSeqNo=0,this.init=!1,this.dbKey=null,this.receivedMessage=t,this.usernamesByUserId=new Map,this.attributionEnabled=!1,this.shareTokenId=s,this.shareTokenHkdfKey=a,this.applyTransactionsQueue=new Ja,this.bundleChunks={}}async applyTransactions(e,t,s,a){for(let s=0;s<e.length;s++){const a=e[s],r=a.seqNo;if(r!==this.lastSeqNo+1){console.warn("Client attempted to apply transaction with seq no ".concat(r," when last seq no is ").concat(this.lastSeqNo));continue}const n=await this.applyTransaction(this.dbKey,a,t);this.lastSeqNo=r;for(let t=0;t<this.unverifiedTransactions.length;t++)!this.unverifiedTransactions[t]||r<this.unverifiedTransactions[t].getStartSeqNo()||this.unverifiedTransactions[t].addTransaction(e[s],n);this.init&&"Success"===n&&this.onChange(this.getItems())}this.init||(this.init=!0,this.dbId=s,this.dbNameHash=a,this.onChange(this.getItems()),this.receivedMessage())}async applyBundle(e,t){if(0===this.lastSeqNo){for(let t=0;t<e.itemsIndex.length;t++){const s=e.itemsIndex[t],a=e.itemsIndex[t].itemId,r=e.items[t],n=e.itemsPlaintextMetadata[t];r.file&&r.file.fileEncryptionKeyString&&(r.file.fileEncryptionKey=await ja.aesGcm.getKeyFromKeyString(r.file.fileEncryptionKeyString),this.fileIds[r.file.fileId]=a),this.items[a]=r,this.itemsPlaintextMetadata[a]=n,this.itemsIndex.insert(s)}this.lastSeqNo=t}else console.warn("Client attempted to apply bundle when last seq no is ".concat(this.lastSeqNo))}async applyTransaction(e,t,s){const a=t.seqNo,r=t.command;switch(r){case"Insert":try{const s=await ja.aesGcm.decryptJson(e,t.record),r=s.id,n=s.item,i=this.attributionFromTransaction(t),o=t.writeAccess;return this.validateInsert(r),this.applyInsert(r,a,n,i,o)}catch(e){return e}case"Update":try{const a=await ja.aesGcm.decryptJson(e,t.record),r=a.id,n=a.item,i=this.attributionFromTransaction(t),o=a.__v,c=t.writeAccess;return this.validateUpdate(r,o,i,s,c,"updateItem"),this.applyUpdate(r,n,o,i,c)}catch(e){return e}case"Delete":try{const a=await ja.aesGcm.decryptJson(e,t.record),r=a.id,n=this.attributionFromTransaction(t),i=a.__v;return this.validateUpdateOrDelete(r,i,n,s,"deleteItem"),this.applyDelete(r)}catch(e){return e}case"BatchTransaction":try{const r=t.operations,n=this.attributionFromTransaction(t),i=[];for(const t of r)i.push(t.record&&ja.aesGcm.decryptJson(e,t.record));const o=await Promise.all(i);return this.validateBatchTransaction(r,o,n,s),this.applyBatchTransaction(a,r,o,n)}catch(e){return e}case"UploadFile":try{const a=await ja.aesGcm.decrypt(e,i.a.decode(t.fileEncryptionKey)),r=await ja.aesGcm.getKeyFromRawKey(a),n=await ja.aesGcm.getKeyStringFromKey(r),o=await ja.aesGcm.decryptJson(r,t.fileMetadata),c=o.itemId,u=o.__v,{fileName:d,fileSize:h,fileType:l}=o,f=t.fileId,m=this.attributionFromTransaction(t);return this.validateUploadFile(c,u,m,s,"uploadFile"),this.applyUploadFile(c,m,u,r,n,d,f,h,l)}catch(e){return e}case"Rollback":return;default:return void console.warn("Unknown command: ".concat(r))}}attributionFromTransaction(e){if(this.attributionEnabled)return{timestamp:e.timestamp,userId:e.userId}}validateInsert(e){if(this.items[e])throw new hs.ItemAlreadyExists}validateUpdate(e,t,s,a,r,n){this.validateUpdateOrDelete(e,t,s,a,n);const{createdBy:i}=this.itemsPlaintextMetadata[e];if(r||!1===r){if(!i)return;const e=i.userId,t=s.userId;if(e!==t&&t!==a)throw new hs.WriteAccessParamNotAllowed}}validateUpdateOrDelete(e,t,s,a,r){if(!this.items[e])throw new hs.ItemDoesNotExist;if(t<=this.getItemVersionNumber(e))throw new hs.ItemUpdateConflict;this.validateAccessPermissions(e,s,a,r)}validateUploadFile(e,t,s,a,r){if(!this.items[e])throw new hs.ItemDoesNotExist;if(t<=this.getFileVersionNumber(e))throw new hs.FileUploadConflict;this.validateAccessPermissions(e,s,a,r)}validateAccessPermissions(e,t,s,a){const{createdBy:r,writeAccess:n}=this.itemsPlaintextMetadata[e];if(r&&t&&n){const e=r.userId,i=t.userId;let o=!1;const{onlyCreator:c,users:u}=n;if(i===s||i===e)o=!0;else if(!c&&u)for(const{userId:e}of u)if(o=i===e,o)break;if(!o)throw new hs.TransactionUnauthorized(a)}}itemExists(e){return Ga(this.items,e)}applyInsert(e,t,s,a,r,n){const i={seqNo:t};if("number"==typeof n&&(i.operationIndex=n),this.items[e]=Ur(Ur({},i),{},{record:s,__v:0}),this.itemsPlaintextMetadata[e]={createdBy:a,writeAccess:r},this.itemsIndex.insert(Ur(Ur({},i),{},{itemId:e})),r&&r.users)for(const{userId:e,username:t}of r.users)this.usernamesByUserId.set(e,t);return"Success"}applyUpdate(e,t,s,a,r){if(this.items[e].record=t,this.items[e].__v=s,this.itemsPlaintextMetadata[e].updatedBy=a,!1===r)delete this.itemsPlaintextMetadata[e].writeAccess;else if(r&&(this.itemsPlaintextMetadata[e].writeAccess=r,r.users))for(const{userId:e,username:t}of r.users)this.usernamesByUserId.set(e,t);return"Success"}applyUploadFile(e,t,s,a,r,n,i,o,c){const u=this.items[e].file;return u&&delete this.fileIds[u.fileId],this.items[e].file={fileName:n,fileId:i,fileSize:o,fileType:c,fileEncryptionKey:a,fileEncryptionKeyString:r,__v:s},this.itemsPlaintextMetadata[e].fileUploadedBy=t,this.fileIds[i]=e,"Success"}applyDelete(e){return this.itemsIndex.remove(this.items[e]),delete this.items[e],delete this.itemsPlaintextMetadata[e],"Success"}validateBatchTransaction(e,t,s,a){const r={};for(let n=0;n<e.length;n++){const i=e[n],{command:o,writeAccess:c}=i,u=t[n].id,d=t[n].__v;if(r[u])throw new hs.OperationsConflict;switch(r[u]=!0,o){case"Insert":this.validateInsert(u);break;case"Update":this.validateUpdate(u,d,s,a,c,o);break;case"Delete":this.validateUpdateOrDelete(u,d,s,a,o)}}}applyBatchTransaction(e,t,s,a){for(let r=0;r<t.length;r++){const n=t[r],i=s[r].id,o=s[r].item,c=s[r].__v,u=n.writeAccess;switch(n.command){case"Insert":this.applyInsert(i,e,o,a,u,r);break;case"Update":this.applyUpdate(i,o,c,a,u);break;case"Delete":this.applyDelete(i,c)}}return"Success"}registerUnverifiedTransaction(){const e=new Dr(this.lastSeqNo),t=this.unverifiedTransactions.push(e);return e.setIndex(t-1),e}unregisterUnverifiedTransaction(e){delete this.unverifiedTransactions[e.getIndex()]}getItems(){const e=[];for(let t=0;t<this.itemsIndex.array.length;t++){const s=this.itemsIndex.array[t].itemId,a={itemId:s,item:this.items[s].record};if(this.items[s].file){const{fileId:e,fileName:t,fileSize:r}=this.items[s].file;a.fileId=e,a.fileName=t,a.fileSize=r}for(const e of["createdBy","updatedBy","fileUploadedBy"])if(this.itemsPlaintextMetadata[s][e]){const{timestamp:t,userId:r}=this.itemsPlaintextMetadata[s][e],n={timestamp:t},i=this.usernamesByUserId.get(r);null==i?n.userDeleted=!0:n.username=i,a[e]=n}if(this.itemsPlaintextMetadata[s].writeAccess){const{onlyCreator:e,users:t}=this.itemsPlaintextMetadata[s].writeAccess,r={};if(e&&(r.onlyCreator=e),t){r.users=[];for(const{userId:e}of t){const t=this.usernamesByUserId.get(e);t&&r.users.push({username:t})}}a.writeAccess=r}e.push(a)}return e}getItemVersionNumber(e){return this.items[e].__v}getFileVersionNumber(e){return this.items[e].file&&this.items[e].file.__v}async decryptShareTokenEncryptedDbKey(e,t){const s=await ja.aesGcm.importKeyFromMaster(this.shareTokenHkdfKey,i.a.decode(t));return await ja.aesGcm.decryptString(s,e)}}const xr=e=>t=>{try{e(t)}catch(e){console.error("There was an error in your changeHandler.\n\n",e)}},Rr=(e,t,s)=>{e.onChange=xr(t);const a=e.receivedMessage;return e.receivedMessage=()=>{a(),s()},!!e.init&&(e.onChange(e.getItems()),e.receivedMessage(),!0)},Or=e=>{const t=e.slice(0,36),s=Fs(t,!0);if(!s||36!==s.length)throw new hs.ShareTokenInvalid;return s},Cr=async(e,t,s)=>{let a,r;try{a=(e=>{const t=i.a.decode(e);return{shareTokenId:Or(t),shareTokenSeed:t.slice(36)}})(e),r=await ja.hkdf.importHkdfKey(a.shareTokenSeed)}catch(e){throw new hs.ShareTokenInvalid}const{shareTokenId:n}=a,{databaseId:o,validationMessage:c,signedValidationMessage:u}=await sr.authenticateShareToken(n,r);sr.state.shareTokenIdToDbId[n]=o,await _r(o,t,s,n,r,c,u)},_r=async(e,t,s,a,r,n,i)=>{const o=sr.state.databasesByDbId[e];if(o){if(Rr(o,t,s))return}else sr.state.databasesByDbId[e]=new Kr(t,s,a,r);const c={databaseId:e,validationMessage:n,signedValidationMessage:i};await sr.request("OpenDatabaseByDatabaseId",c)},Fr=async(e,t)=>{try{let s,a;const r=new Promise((e,t)=>{s=e,a=setTimeout(()=>t(new Error("timeout")),3e4)}),{dbNameHash:n,newDatabaseParams:i,databaseId:o,shareToken:c}=t;try{n?await(async(e,t,s,a)=>{const r=sr.state.databases[e];if(r){if(Rr(r,s,a))return}else sr.state.databases[e]=new Kr(s,a);const n={dbNameHash:e,newDatabaseParams:t};await sr.request("OpenDatabase",n)})(n,i,e,s):o?await _r(o,e,s):c&&await Cr(c,e,s),await r}catch(e){if(clearTimeout(a),e.response&&e.response.data){const t=e.response.data;if("Database already creating"===t)throw new hs.DatabaseAlreadyOpening;if("Database is owned by user"===t){if(o)throw new hs.DatabaseIdNotAllowedForOwnDatabase;if(c)throw new hs.ShareTokenNotAllowedForOwnDatabase}else if("Database key not found"===t||"Database not found"===t)throw new hs.DatabaseNotFound;switch(t.name){case"SubscriptionNotFound":throw new hs.SubscriptionNotFound;case"SubscriptionInactive":throw new hs.SubscriptionInactive(t.subscriptionStatus);case"TrialExpired":throw new hs.TrialExpired}}throw e}}catch(e){throw kr(e),e}},Lr=e=>{if("server-side"===e&&!Ms())throw new hs.ServerSideEncryptionNotEnabledInClient},jr=e=>{if("object"!=typeof e)throw new hs.ParamsMustBeObject;if(Ga(e,"databaseName")){if((e=>{if("string"!=typeof e)throw new hs.DatabaseNameMustBeString;if(0===e.length)throw new hs.DatabaseNameCannotBeBlank;if(e.length>100)throw new hs.DatabaseNameTooLong(100)})(e.databaseName),Ga(e,"databaseId"))throw new hs.DatabaseIdNotAllowed;if(Ga(e,"shareToken"))throw new hs.ShareTokenNotAllowed;if(!e.allowVerifiedUsersDatabase&&"__userbase_verified_users"===e.databaseName)throw new hs.DatabaseNameRestricted("__userbase_verified_users")}else if(Ga(e,"databaseId")){if((e=>{if("string"!=typeof e)throw new hs.DatabaseIdMustBeString;if(0===e.length)throw new hs.DatabaseIdCannotBeBlank;if(36!==e.length)throw new hs.DatabaseIdInvalidLength(36)})(e.databaseId),Ga(e,"shareToken"))throw new hs.ShareTokenNotAllowed}else{if(!Ga(e,"shareToken"))throw new hs.DatabaseNameMissing;if("string"!=typeof e.shareToken)throw new hs.ShareTokenInvalid}if(Ga(e,"encryptionMode")&&!Ar[e.encryptionMode])throw new hs.EncryptionModeNotValid(Ar);Tr()},qr=async e=>{try{if(jr(e),!Ga(e,"changeHandler"))throw new hs.ChangeHandlerMissing;const{databaseName:t,databaseId:s,shareToken:a,changeHandler:r,encryptionMode:n=sr.encryptionMode}=e;if("function"!=typeof r)throw new hs.ChangeHandlerMustBeFunction;if(Lr(n),t){const e="server-side"===n?t:sr.state.dbNameToHash[t]||await ja.hmac.signString(sr.keys.hmacKey,t);"end-to-end"===n&&(sr.state.dbNameToHash[t]=e);const s={dbNameHash:e,newDatabaseParams:await(async(e,t)=>{const s=Ds()(),a=await ja.aesGcm.generateKey(),r=await ja.aesGcm.getKeyStringFromKey(a),[n,i]=await Promise.all([ja.aesGcm.encryptString(sr.keys.encryptionKey,r),ja.aesGcm.encryptString(a,e)]),o={dbId:s,encryptedDbKey:n,encryptedDbName:i,attribution:!0};return"server-side"===t&&(o.plaintextDbKey=r),o.fingerprint=await ln(),o})(t,n)};await Fr(r,s)}else if(s){const e={databaseId:s};await Fr(r,e)}else{const e={shareToken:a};await Fr(r,e)}}catch(e){switch(e.name){case"ParamsMustBeObject":case"DatabaseAlreadyOpening":case"DatabaseNameMustBeString":case"DatabaseNameMissing":case"DatabaseNameCannotBeBlank":case"DatabaseNameTooLong":case"DatabaseNameRestricted":case"DatabaseIdMustBeString":case"DatabaseIdCannotBeBlank":case"DatabaseIdInvalidLength":case"DatabaseIdNotAllowed":case"DatabaseIdNotAllowedForOwnDatabase":case"ShareTokenNotAllowed":case"ShareTokenInvalid":case"ShareTokenNotFound":case"ShareTokenNotAllowedForOwnDatabase":case"DatabaseNotFound":case"ChangeHandlerMissing":case"ChangeHandlerMustBeFunction":case"EncryptionModeNotValid":case"ServerSideEncryptionNotEnabledInClient":case"UserMustChangePassword":case"UserNotSignedIn":case"UserNotFound":case"SubscriptionNotFound":case"SubscriptionInactive":case"TrialExpired":case"TooManyRequests":case"ServiceUnavailable":throw e;default:throw new hs.UnknownServiceUnavailable(e)}}},Vr=(e,t,s,a="end-to-end")=>{Lr(a);const r=s&&Or(i.a.decode(s)),n="server-side"===a?e:sr.state.dbNameToHash[e],o=e?sr.state.databases[n]:sr.state.databasesByDbId[t||sr.state.shareTokenIdToDbId[r]];if(!o||!o.init)throw new hs.DatabaseNotOpen;return o},Hr=async e=>{try{jr(e);const t=Vr(e.databaseName,e.databaseId,e.shareToken,e.encryptionMode||sr.encryptionMode),s="Insert",a=await Gr(t,e);await zr(t,s,a)}catch(e){switch(e.name){case"ParamsMustBeObject":case"DatabaseNotOpen":case"DatabaseNameMissing":case"DatabaseNameMustBeString":case"DatabaseNameCannotBeBlank":case"DatabaseNameTooLong":case"DatabaseNameRestricted":case"DatabaseIdMustBeString":case"DatabaseIdCannotBeBlank":case"DatabaseIdInvalidLength":case"DatabaseIdNotAllowed":case"ShareTokenNotAllowed":case"ShareTokenInvalid":case"DatabaseIsReadOnly":case"EncryptionModeNotValid":case"ServerSideEncryptionNotEnabledInClient":case"ItemIdMustBeString":case"ItemIdCannotBeBlank":case"ItemIdTooLong":case"ItemMissing":case"ItemInvalid":case"ItemTooLarge":case"ItemAlreadyExists":case"UserMustChangePassword":case"UserNotSignedIn":case"UserNotFound":case"TooManyRequests":case"ServiceUnavailable":throw e;default:throw new hs.UnknownServiceUnavailable(e)}}},Gr=async(e,t)=>{if(!Ga(t,"item"))throw new hs.ItemMissing;const{item:s,itemId:a,writeAccess:r}=t;if(Ga(t,"itemId")){if("string"!=typeof a)throw new hs.ItemIdMustBeString;if(0===a.length)throw new hs.ItemIdCannotBeBlank;if(a.length>100)throw new hs.ItemIdTooLong(100)}const n=JSON.stringify(s);if(!n)throw new hs.ItemInvalid;if(Ha(n)>10240)throw new hs.ItemTooLarge(10);const i=a||Ds()(),o={id:i,item:s};return{itemKey:await ja.hmac.signString(sr.keys.hmacKey,i),encryptedItem:await ja.aesGcm.encryptJson(e.dbKey,o),writeAccess:r}},Jr=async e=>{try{jr(e);const t=Vr(e.databaseName,e.databaseId,e.shareToken,e.encryptionMode||sr.encryptionMode),s="Update",a=await Wr(t,e);await zr(t,s,a)}catch(e){switch(e.name){case"ParamsMustBeObject":case"DatabaseNotOpen":case"DatabaseNameMissing":case"DatabaseNameMustBeString":case"DatabaseNameCannotBeBlank":case"DatabaseNameTooLong":case"DatabaseNameRestricted":case"DatabaseIdMustBeString":case"DatabaseIdCannotBeBlank":case"DatabaseIdInvalidLength":case"DatabaseIdNotAllowed":case"ShareTokenNotAllowed":case"ShareTokenInvalid":case"DatabaseIsReadOnly":case"EncryptionModeNotValid":case"ServerSideEncryptionNotEnabledInClient":case"ItemIdMissing":case"ItemIdMustBeString":case"ItemIdCannotBeBlank":case"ItemIdTooLong":case"ItemMissing":case"ItemInvalid":case"ItemTooLarge":case"ItemDoesNotExist":case"ItemUpdateConflict":case"WriteAccessParamNotAllowed":case"TransactionUnauthorized":case"UserMustChangePassword":case"UserNotSignedIn":case"UserNotFound":case"TooManyRequests":case"ServiceUnavailable":throw e;default:throw new hs.UnknownServiceUnavailable(e)}}},Wr=async(e,t)=>{if(!Ga(t,"item"))throw new hs.ItemMissing;if(!Ga(t,"itemId"))throw new hs.ItemIdMissing;!t.writeAccess&&Ga(t,"writeAccess")&&(t.writeAccess=!1);const{item:s,itemId:a,writeAccess:r}=t;if("string"!=typeof a)throw new hs.ItemIdMustBeString;if(0===a.length)throw new hs.ItemIdCannotBeBlank;if(a.length>100)throw new hs.ItemIdTooLong(100);if(!e.itemExists(a))throw new hs.ItemDoesNotExist;const n=JSON.stringify(s);if(!n)throw new hs.ItemInvalid;if(Ha(n)>10240)throw new hs.ItemTooLarge(10);const i={id:a,item:s,__v:e.getItemVersionNumber(a)+1};return{itemKey:await ja.hmac.signString(sr.keys.hmacKey,a),encryptedItem:await ja.aesGcm.encryptJson(e.dbKey,i),writeAccess:r}},Yr=async(e,t)=>{if(!Ga(t,"itemId"))throw new hs.ItemIdMissing;const{itemId:s}=t;if("string"!=typeof s)throw new hs.ItemIdMustBeString;if(0===s.length)throw new hs.ItemIdCannotBeBlank;if(s.length>100)throw new hs.ItemIdTooLong(100);if(!e.itemExists(s))throw new hs.ItemDoesNotExist;const a={id:s,__v:e.getItemVersionNumber(s)+1};return{itemKey:await ja.hmac.signString(sr.keys.hmacKey,s),encryptedItem:await ja.aesGcm.encryptJson(e.dbKey,a)}},zr=async(e,t,s)=>{try{const a=e.registerUnverifiedTransaction(),r=Ur(Ur({},s),{},{dbId:e.dbId,dbNameHash:e.dbNameHash}),n=(await sr.request(t,r)).data.sequenceNo;return await a.getResult(n),e.unregisterUnverifiedTransaction(a),n}catch(e){if(kr(e),e.response){if("DatabaseIsReadOnly"===e.response.data.name)throw new hs.DatabaseIsReadOnly;if("UserNotFound"===e.response.data.message)throw new hs.UserNotFound(e.response.data.username)}throw e}},Zr=async(e,t,s,a,r,n,i,o)=>{const c=await(async e=>{const t=new FileReader;return new Promise((s,a)=>{t.onload=e=>{e.target.error?a(e.target.error):s(e.target.result)},t.readAsArrayBuffer(e)})})(t),[u,d]=await ja.aesGcm.generateAndEncryptKeyEncryptionKey(r),h=await ja.aesGcm.encrypt(u,c),l={dbId:s,chunkNumber:n,fileId:a,chunk:Fs(new Uint8Array(h)),chunkEncryptionKey:Fs(new Uint8Array(d))},f=(async(e,t,s,a)=>{await e,t.bytesTransferred+=a,s&&s(Ur({},t))})(sr.request("UploadFileChunk",l),i,o,t.size);e.push(f),10===e.length&&(await Promise.all(e),e.length=0)},Xr=async(e,t,s,a)=>{try{const r="GetChunk",n={dbId:e,fileId:t,chunkNumber:s},i=(await sr.request(r,n)).data,o=new Uint8Array(new Uint16Array(Ls(i.chunk))).buffer,c=new Uint8Array(new Uint16Array(Ls(i.chunkEncryptionKey))).buffer,u=await ja.aesGcm.decrypt(a,c),d=await ja.aesGcm.getKeyFromRawKey(u);return await ja.aesGcm.decrypt(d,o)}catch(e){throw kr(e),e}},Qr=async(e,t,s)=>{const{username:a,senderUsername:r,verificationValues:n}=s,{sentSignature:o,receivedSignature:c,senderEcdsaPublicKey:u}=n,d=t[a]&&t[a].record.fingerprint,h=i.a.decode(u),l=t[r]&&t[r].record.fingerprint||await hn(h),f=await ja.ecdsa.getPublicKeyFromRawPublicKey(h),m=await rn(e,d),p=await ja.ecdsa.verifyString(f,o,m),w=await ja.ecdsa.getPublicKeyFromRawPublicKey(i.a.decode(n.recipientEcdsaPublicKey)),g=await rn(e,l),y=await ja.ecdsa.verifyString(w,c,g);return p&&y},$r=async(e,t,s,a,r)=>{const{mySentSignature:n,myReceivedSignature:o}=r,c=await rn(e,t),u=await ja.ecdsa.verifyString(a,o,c);if(!u)return u;const d=await rn(e,s),h=await ja.ecdsa.getPublicKeyFromRawPublicKey(i.a.decode(r.mySenderEcdsaPublicKey));return await ja.ecdsa.verifyString(h,n,d)&&u},en=async(e,t,s,a,r)=>{const{sentSignature:n,receivedSignature:o}=r,c=await rn(e,t),u=await ja.ecdsa.verifyString(a,n,c);if(!u)return u;const d=await rn(e,s),h=await ja.ecdsa.getPublicKeyFromRawPublicKey(i.a.decode(r.recipientEcdsaPublicKey)),l=await ja.ecdsa.verifyString(h,o,d);return u&&l},tn=async(e,t,s,a,r)=>{const n=await ja.ecdsa.getPublicKeyFromPrivateKey(sr.keys.ecdsaPrivateKey),i=await ln();for(let o=0;o<t.length;o++){const c=t[o],{username:u,isOwner:d,senderUsername:h,verificationValues:l}=c;try{const a=s[u]&&s[u].record.fingerprint,f=l.isChild,m=r===u;if(a)if(f)t[o].verified=await en(e,a,i,n,l);else if(m){const r=await $r(e,a,i,n,l);if(r&&h){const a=await Qr(e,s,c);t[o].verified=a}else t[o].verified=r}else if(d)t[o].verified=d;else{const a=await Qr(e,s,c);t[o].verified=a}}catch(e){}delete t[o].senderUsername,d||(l&&l.isChild?t[o].receivedFromUsername=a:h&&(t[o].receivedFromUsername=h)),delete t[o].verificationValues}return t},sn=async(e,t,s,a,r)=>{const{databaseId:n,databaseNameHash:o,isOwner:c,readOnly:u,resharingAllowed:d,senderUsername:h}=e;let l,f;if(e.encryptedDbKey||e.plaintextDbKey){const s=e.plaintextDbKey||await ja.aesGcm.decryptString(t,e.encryptedDbKey);if(l=await ja.aesGcm.getKeyFromKeyString(s),f=await ja.aesGcm.decryptString(l,e.databaseName),c&&"__userbase_verified_users"===f)return null}else{if(e.wrappedDbKey)return null;{let a;try{const{ephemeralPublicKey:t,signedEphemeralPublicKey:r,sharedEncryptedDbKey:n}=e;a=i.a.decode(e.senderEcdsaPublicKey);const o=await ja.ecdsa.getPublicKeyFromRawPublicKey(a);if(!await ja.ecdsa.verify(o,i.a.decode(r),i.a.decode(t)))throw new hs.ServiceUnavailable;const c=await ja.ecdh.getPublicKeyFromRawPublicKey(i.a.decode(t)),u=await ja.ecdh.computeSharedKeyEncryptionKey(c,s),d=await ja.aesGcm.decryptString(u,n);l=await ja.aesGcm.getKeyFromKeyString(d),f=await ja.aesGcm.decryptString(l,e.databaseName)}catch(e){return null}const r=await hn(a),n=await nn(l,r),c=await ja.aesGcm.getKeyStringFromKey(l),u="SaveDatabase",d={databaseNameHash:o,encryptedDbKey:await ja.aesGcm.encryptString(t,c),receivedSignature:n};sr.request(u,d)}}const m={databaseName:f,databaseId:n,isOwner:c,readOnly:u,resharingAllowed:d,encryptionMode:e.plaintextDbKey?"server-side":"end-to-end"},p=await(async(e,t,s,a,r,n)=>{const i=[],o={databaseId:e,databaseNameHash:t};let c=await sr.request("GetDatabaseUsers",o);for(i.push(...await tn(s,c.data.users,a,r,n));c.data.nextPageTokenLessThanUserId||c.data.nextPageTokenMoreThanUserId;)o.nextPageTokenLessThanUserId=c.data.nextPageTokenLessThanUserId,o.nextPageTokenMoreThanUserId=c.data.nextPageTokenMoreThanUserId,c=await sr.request("GetDatabaseUsers",o),i.push(...await tn(s,c.data.users,a,r,n));return i})(n,o,l,a,r,h);return c||(e=>{for(let t=0;t<e.length;t++){if(e[t].isOwner)return!0}return!1})(p)?(m.users=p,!c&&h&&(m.receivedFromUsername=h),m):null},an=async(e,t,s="end-to-end")=>{let a;Lr(s);try{a=Vr(e,t,null,s)}catch(r){const n="GetDatabases",i=e?{dbNameHash:"server-side"===s?e:await ja.hmac.signString(sr.keys.hmacKey,e)}:{databaseId:t},o=(await sr.request(n,i)).data.databases;if(!o||!o.length)throw new hs.DatabaseNotFound;a=o[0],a.dbNameHash=a.databaseNameHash,a.dbId=a.databaseId}return a},rn=async(e,t)=>{const s=await ja.aesGcm.getRawKeyFromKey(e),a=await ja.sha256.hash(s),r=await ja.hmac.importKeyFromRawBits(a);return await ja.hmac.signString(r,t)},nn=async(e,t)=>{const s=await rn(e,t);return await ja.ecdsa.signString(sr.keys.ecdsaPrivateKey,s)},on=async e=>{let t;return e.dbKey?t=await ja.aesGcm.getKeyStringFromKey(e.dbKey):(t=e.plaintextDbKey||await ja.aesGcm.decryptString(sr.keys.encryptionKey,e.encryptedDbKey),e.dbKey=await ja.aesGcm.getKeyFromKeyString(t)),t},cn=async(e,t,s,a,r)=>{const{databaseName:n,databaseId:o}=e,c=e.username.toLowerCase();try{const[e,u,d]=await Promise.all([Ts(c),a&&fn(),an(n,o,r)]);if(!e.ecdhPublicKey||!e.ecdsaPublicKey)throw new hs.UserUnableToReceiveDatabase;const h=i.a.decode(e.ecdsaPublicKey),l=await hn(h);a&&await(async(e,t,s)=>{let a,r;const n=Object.keys(s);for(let i=0;i<n.length;i++){const o=n[i],c=s[o].record.fingerprint;if(e===o&&t===c){a=c;break}c===t&&(r=!0)}if(!a&&r)throw new hs.UserMustBeReverified;if(!a)throw new hs.UserNotVerified})(c,l,u);const f=await ja.ecdsa.getPublicKeyFromRawPublicKey(h),{signedEcdhPublicKey:m,ecdhPublicKey:p}=e;if(!await ja.ecdsa.verify(f,i.a.decode(m),i.a.decode(p)))throw new hs.ServiceUnavailable;const w=await ja.ecdh.getPublicKeyFromRawPublicKey(i.a.decode(e.ecdhPublicKey)),g=await ja.ecdh.generateKeyPair(),y=await ja.ecdh.getRawPublicKeyFromPublicKey(g.publicKey),b=await ja.ecdsa.sign(sr.keys.ecdsaPrivateKey,y),v=await ja.ecdh.computeSharedKeyEncryptionKey(w,g.privateKey),M=await on(d),S=await ja.aesGcm.encryptString(v,M),I="ShareDatabase",P={databaseId:d.dbId,databaseNameHash:d.dbNameHash,username:c,readOnly:t,resharingAllowed:s,sharedEncryptedDbKey:S,ephemeralPublicKey:i.a.encode(y),signedEphemeralPublicKey:i.a.encode(b),sentSignature:await nn(d.dbKey,l),recipientEcdsaPublicKey:e.ecdsaPublicKey};await sr.request(I,P)}catch(e){if(kr(e),e.response&&e.response.data)switch(e.response.data.message){case"SharingWithSelfNotAllowed":throw new hs.SharingWithSelfNotAllowed;case"DatabaseNotFound":throw new hs.DatabaseNotFound;case"ResharingNotAllowed":throw new hs.ResharingNotAllowed("Must have permission to reshare the database with another user");case"ResharingWithWriteAccessNotAllowed":throw new hs.ResharingWithWriteAccessNotAllowed;case"UserNotFound":throw new hs.UserNotFound;case"DatabaseAlreadyShared":return}throw e}},un=e=>{if("string"!=typeof e)throw new hs.UsernameMustBeString;if(0===e.length)throw new hs.UsernameCannotBeBlank},dn=e=>{if(Ga(e,"shareToken"))throw new hs.ShareTokenNotAllowed;if(Ga(e,"username")&&un(e.username),Ga(e,"readOnly")&&"boolean"!=typeof e.readOnly)throw new hs.ReadOnlyMustBeBoolean;if(Ga(e,"resharingAllowed")&&"boolean"!=typeof e.resharingAllowed)throw new hs.ResharingAllowedMustBeBoolean;if(Ga(e,"requireVerified")&&"boolean"!=typeof e.requireVerified)throw new hs.RequireVerifiedMustBeBoolean},hn=async e=>{const t=await ja.sha256.hash(e);return i.a.encode(t)},ln=async()=>{const e=await ja.ecdsa.getPublicKeyFromPrivateKey(sr.keys.ecdsaPrivateKey),t=await ja.ecdsa.getRawPublicKeyFromPublicKey(e);return await hn(t)},fn=async()=>{await qr({databaseName:"__userbase_verified_users",changeHandler:()=>{},allowVerifiedUsersDatabase:!0,encryptionMode:"end-to-end"});const e=sr.state.dbNameToHash.__userbase_verified_users;return sr.state.databases[e].items};var mn={openDatabase:qr,getDatabases:async e=>{try{void 0!==e&&jr(e),Tr();const{encryptionKey:t,ecdhPrivateKey:s}=sr.keys,a=sr.session.username;if(e&&Ga(e,"shareToken"))throw new hs.ShareTokenNotAllowed;const r=e&&e.encryptionMode||sr.encryptionMode;Lr(r);try{const n=[],i="GetDatabases",o=e&&{databaseId:e.databaseId,dbNameHash:"server-side"===r?e.databaseName:e.databaseName&&await ja.hmac.signString(sr.keys.hmacKey,e.databaseName)};let[c,u]=await Promise.all([sr.request(i,o),fn()]),d=await Promise.all(c.data.databases.map(e=>sn(e,t,s,u,a)));for(n.push(...d);c.data.nextPageToken;){const e={nextPageToken:c.data.nextPageToken};c=await sr.request(i,e),d=await Promise.all(c.data.databases.map(e=>sn(e,t,s,u,a))),n.push(...d)}return{databases:n.filter(e=>null!==e)}}catch(e){throw kr(e),e}}catch(e){switch(e.name){case"ParamsMustBeObject":case"DatabaseNameMustBeString":case"DatabaseNameCannotBeBlank":case"DatabaseNameTooLong":case"DatabaseNameRestricted":case"DatabaseIdMustBeString":case"DatabaseIdCannotBeBlank":case"DatabaseIdInvalidLength":case"DatabaseIdNotAllowed":case"ShareTokenNotAllowed":case"EncryptionModeNotValid":case"ServerSideEncryptionNotEnabledInClient":case"UserMustChangePassword":case"UserNotSignedIn":case"ServiceUnavailable":throw e;default:throw new hs.UnknownServiceUnavailable(e)}}},insertItem:Hr,updateItem:Jr,deleteItem:async e=>{try{jr(e);const t=Vr(e.databaseName,e.databaseId,e.shareToken,e.encryptionMode||sr.encryptionMode),s="Delete",a=await Yr(t,e);await zr(t,s,a)}catch(e){switch(e.name){case"ParamsMustBeObject":case"DatabaseNotOpen":case"DatabaseNameMissing":case"DatabaseNameMustBeString":case"DatabaseNameCannotBeBlank":case"DatabaseNameTooLong":case"DatabaseNameRestricted":case"DatabaseIdMustBeString":case"DatabaseIdCannotBeBlank":case"DatabaseIdInvalidLength":case"DatabaseIdNotAllowed":case"ShareTokenNotAllowed":case"ShareTokenInvalid":case"DatabaseIsReadOnly":case"EncryptionModeNotValid":case"ServerSideEncryptionNotEnabledInClient":case"ItemIdMissing":case"ItemIdMustBeString":case"ItemIdCannotBeBlank":case"ItemIdTooLong":case"ItemDoesNotExist":case"ItemUpdateConflict":case"TransactionUnauthorized":case"UserMustChangePassword":case"UserNotSignedIn":case"UserNotFound":case"TooManyRequests":case"ServiceUnavailable":throw e;default:throw new hs.UnknownServiceUnavailable(e)}}},putTransaction:async e=>{try{if(jr(e),!Ga(e,"operations"))throw new hs.OperationsMissing;const{databaseName:t,databaseId:s,shareToken:a,operations:r,encryptionMode:n=sr.encryptionMode}=e;if(!Array.isArray(r))throw new hs.OperationsMustBeArray;const i=Vr(t,s,a,n),o="BatchTransaction",c=await Promise.all(r.map(e=>{const t=e.command;switch(t){case"Insert":return Gr(i,e);case"Update":return Wr(i,e);case"Delete":return Yr(i,e);default:throw new hs.CommandNotRecognized(t)}})),u=await Promise.all(c),d={operations:r.map((e,t)=>Ur({command:e.command},u[t]))};try{await zr(i,o,d)}catch(e){if(e.response&&"OperationsExceedLimit"===e.response.data.error)throw new hs.OperationsExceedLimit(e.response.data.limit);throw e}}catch(e){switch(e.name){case"ParamsMustBeObject":case"DatabaseNotOpen":case"DatabaseNameMissing":case"DatabaseNameMustBeString":case"DatabaseNameCannotBeBlank":case"DatabaseNameTooLong":case"DatabaseNameRestricted":case"DatabaseIdMustBeString":case"DatabaseIdCannotBeBlank":case"DatabaseIdInvalidLength":case"DatabaseIdNotAllowed":case"ShareTokenNotAllowed":case"ShareTokenInvalid":case"DatabaseIsReadOnly":case"EncryptionModeNotValid":case"ServerSideEncryptionNotEnabledInClient":case"OperationsMissing":case"OperationsMustBeArray":case"OperationsConflict":case"OperationsExceedLimit":case"CommandNotRecognized":case"ItemIdMissing":case"ItemIdMustBeString":case"ItemIdCannotBeBlank":case"ItemIdTooLong":case"ItemMissing":case"ItemInvalid":case"ItemTooLarge":case"ItemAlreadyExists":case"ItemDoesNotExist":case"ItemUpdateConflict":case"WriteAccessParamNotAllowed":case"TransactionUnauthorized":case"UserMustChangePassword":case"UserNotSignedIn":case"UserNotFound":case"TooManyRequests":case"ServiceUnavailable":throw e;default:throw new hs.UnknownServiceUnavailable(e)}}},uploadFile:async e=>{try{(e=>{if(jr(e),Ga(e,"progressHandler")&&"function"!=typeof e.progressHandler)throw new hs.ProgressHandlerMustBeFunction})(e);const t=Vr(e.databaseName,e.databaseId,e.shareToken,e.encryptionMode||sr.encryptionMode),{dbId:s}=t;try{const{itemKey:a,fileMetadata:r}=await(async(e,t)=>{if(!Ga(e,"itemId"))throw new hs.ItemIdMissing;if(!Ga(e,"file"))throw new hs.FileMissing;const{itemId:s,file:a}=e;if("string"!=typeof s)throw new hs.ItemIdMustBeString;if(0===s.length)throw new hs.ItemIdCannotBeBlank;if(s.length>100)throw new hs.ItemIdTooLong(100);if(!t.itemExists(s))throw new hs.ItemDoesNotExist;if(!(a instanceof File))throw new hs.FileMustBeFile;if(0===a.size)throw new hs.FileCannotBeEmpty;const r=await ja.hmac.signString(sr.keys.hmacKey,s),n=t.getFileVersionNumber(s);return{itemKey:r,fileMetadata:{itemId:s,__v:void 0===n?0:n+1,fileName:a.name,fileSize:a.size,fileType:a.type}}})(e,t),[n,o]=await ja.aesGcm.generateAndEncryptKeyEncryptionKey(t.dbKey),c=await ja.aesGcm.encryptJson(n,r),{data:{fileId:u}}=await sr.request("GenerateFileId",{dbId:t.dbId}),d=e.file;let h=0,l=0,f=[];const m={bytesTransferred:0};for(;h<d.size;){const t=d.slice(h,h+524288);await Zr(f,t,s,u,n,l,m,e.progressHandler),l+=1,h+=524288}await Promise.all(f),await(async(e,t,s,a,r)=>{const n={dbId:e.dbId,fileId:t,itemKey:s,fileMetadata:a,fileEncryptionKey:i.a.encode(r)};await zr(e,"CompleteFileUpload",n)})(t,u,a,c,o)}catch(e){if(kr(e),e.response&&"DatabaseIsReadOnly"===e.response.data)throw new hs.DatabaseIsReadOnly;throw e}}catch(e){switch(e.name){case"ParamsMustBeObject":case"DatabaseNotOpen":case"DatabaseNameMissing":case"DatabaseNameMustBeString":case"DatabaseNameCannotBeBlank":case"DatabaseNameTooLong":case"DatabaseNameRestricted":case"DatabaseIdMustBeString":case"DatabaseIdCannotBeBlank":case"DatabaseIdInvalidLength":case"DatabaseIdNotAllowed":case"ShareTokenNotAllowed":case"ShareTokenInvalid":case"DatabaseIsReadOnly":case"EncryptionModeNotValid":case"ServerSideEncryptionNotEnabledInClient":case"ItemIdMissing":case"ItemIdMustBeString":case"ItemIdCannotBeBlank":case"ItemIdTooLong":case"ItemDoesNotExist":case"TransactionUnauthorized":case"FileMustBeFile":case"FileCannotBeEmpty":case"FileMissing":case"FileUploadConflict":case"ProgressHandlerMustBeFunction":case"UserMustChangePassword":case"UserNotSignedIn":case"TooManyRequests":case"ServiceUnavailable":throw e;default:throw new hs.UnknownServiceUnavailable(e)}}},getFile:async e=>{try{(e=>{if(jr(e),!Ga(e,"fileId"))throw new hs.FileIdMissing;const{fileId:t,range:s}=e;if("string"!=typeof t)throw new hs.FileIdMustBeString;if(0===t.length)throw new hs.FileIdCannotBeBlank;if(t.length>100)throw new hs.FileIdTooLong(100);if(Ga(e,"range")){if("object"!=typeof s)throw new hs.RangeMustBeObject;if(!Ga(s,"start"))throw new hs.RangeMissingStart;if(!Ga(s,"end"))throw new hs.RangeMissingEnd;const{start:e,end:t}=s;if("number"!=typeof e)throw new hs.RangeStartMustBeNumber;if("number"!=typeof t)throw new hs.RangeEndMustBeNumber;if(e<0)throw new hs.RangeStartMustBeGreaterThanZero;if(t<=e)throw new hs.RangeEndMustBeGreaterThanRangeStart}})(e);const t=Vr(e.databaseName,e.databaseId,e.shareToken,e.encryptionMode||sr.encryptionMode),{dbId:s}=t,{fileId:a,range:r}=e,n=t.fileIds[a],i=t.items[n];if(!i||!i.file)throw new hs.FileNotFound;const{file:{fileName:o,fileSize:c,fileType:u,fileEncryptionKey:d}}=i;if(r&&r.end>c)throw new hs.RangeEndMustBeLessThanFileSize;const h=r?await(async(e,t,s,a)=>{const{start:r,end:n}=a,i=[],o=Math.floor(r/524288),c=Math.floor(n/524288)-(n%524288==0?1:0);let u=o;for(;u<=c;){let a=await Xr(e,t,u,s);u===o&&u===c&&n%524288?a=a.slice(r%524288,n%524288):u===o?a=a.slice(r%524288):u===c&&n%524288&&(a=a.slice(0,n%524288)),i.push(a),u+=1}return i})(s,a,d,r):await(async(e,t,s,a)=>{const r=[];let n=0;const i=a<524288?0:Math.floor(a/524288)-(a%524288==0?1:0);for(;n<=i;){const a=await Xr(e,t,n,s);r.push(a),n+=1}return r})(s,a,d,c);return{file:new File(h,o,{type:u})}}catch(e){switch(e.name){case"ParamsMustBeObject":case"DatabaseNotOpen":case"DatabaseNameMissing":case"DatabaseNameMustBeString":case"DatabaseNameCannotBeBlank":case"DatabaseNameTooLong":case"DatabaseNameRestricted":case"DatabaseIdMustBeString":case"DatabaseIdCannotBeBlank":case"DatabaseIdInvalidLength":case"DatabaseIdNotAllowed":case"ShareTokenNotAllowed":case"ShareTokenInvalid":case"DatabaseIsReadOnly":case"EncryptionModeNotValid":case"ServerSideEncryptionNotEnabledInClient":case"FileIdMissing":case"FileIdMustBeString":case"FileIdCannotBeBlank":case"FileIdTooLong":case"FileNotFound":case"RangeMustBeObject":case"RangeMissingStart":case"RangeMissingEnd":case"RangeStartMustBeNumber":case"RangeEndMustBeNumber":case"RangeStartMustBeGreaterThanZero":case"RangeEndMustBeGreaterThanRangeStart":case"RangeEndMustBeLessThanFileSize":case"UserMustChangePassword":case"UserNotSignedIn":case"UserNotFound":case"TooManyRequests":case"ServiceUnavailable":throw e;default:throw new hs.UnknownServiceUnavailable(e)}}},shareDatabase:async e=>{try{jr(e),dn(e);const t=!Ga(e,"readOnly")||e.readOnly,s=!!Ga(e,"resharingAllowed")&&e.resharingAllowed,a=!Ga(e,"requireVerified")||e.requireVerified,r=e.encryptionMode||sr.encryptionMode;Lr(r);let n={};return Ga(e,"username")?await cn(e,t,s,a,r):n.shareToken=await(async(e,t,s)=>{try{const{databaseName:a,databaseId:r}=e;if(Ga(e,"requireVerified"))throw new hs.RequireVerifiedParamNotNecessary;if(Ga(e,"resharingAllowed"))throw new hs.ResharingAllowedParamNotAllowed("when retrieving a share token");const n=ja.generateSeed(),o=await ja.hkdf.importHkdfKey(n),c=ja.hkdf.generateSalt(),u=await ja.aesGcm.importKeyFromMaster(o,c),d=await an(a,r,s),h=await on(d),l=await ja.aesGcm.encryptString(u,h),{ecdsaPublicKey:f,encryptedEcdsaPrivateKey:m,ecdsaKeyEncryptionKeySalt:p}=await ja.ecdsa.generateEcdsaKeyData(o),w="ShareDatabaseToken",g={databaseId:d.dbId,databaseNameHash:d.dbNameHash,readOnly:t,keyData:{shareTokenEncryptedDbKey:l,shareTokenEncryptionKeySalt:i.a.encode(c),shareTokenPublicKey:f,shareTokenEncryptedEcdsaPrivateKey:m,shareTokenEcdsaKeyEncryptionKeySalt:p}},y=await sr.request(w,g),{shareTokenId:b}=y.data,v=Ls(b,!0);return i.a.encode(js(v,n))}catch(e){if(kr(e),e.response&&e.response.data)switch(e.response.data.message){case"DatabaseNotFound":throw new hs.DatabaseNotFound;case"ResharingNotAllowed":throw new hs.ResharingNotAllowed("Only the owner can generate a share token")}throw e}})(e,t,r),n}catch(e){switch(e.name){case"ParamsMustBeObject":case"DatabaseNameMissing":case"DatabaseNameMustBeString":case"DatabaseNameCannotBeBlank":case"DatabaseNameTooLong":case"DatabaseNameRestricted":case"DatabaseIdMustBeString":case"DatabaseIdCannotBeBlank":case"DatabaseIdInvalidLength":case"DatabaseIdNotAllowed":case"ShareTokenNotAllowed":case"DatabaseNotFound":case"EncryptionModeNotValid":case"ServerSideEncryptionNotEnabledInClient":case"UsernameCannotBeBlank":case"UsernameMustBeString":case"ReadOnlyMustBeBoolean":case"ResharingAllowedMustBeBoolean":case"ResharingNotAllowed":case"ResharingWithWriteAccessNotAllowed":case"ResharingAllowedParamNotAllowed":case"RequireVerifiedMustBeBoolean":case"RequireVerifiedParamNotNecessary":case"SharingWithSelfNotAllowed":case"UserMustChangePassword":case"UserNotSignedIn":case"UserUnableToReceiveDatabase":case"UserNotFound":case"UserNotVerified":case"UserMustBeReverified":case"ServiceUnavailable":throw e;default:throw new hs.UnknownServiceUnavailable(e)}}},modifyDatabasePermissions:async e=>{try{if(jr(e),dn(e),!Ga(e,"username"))throw new hs.UsernameMissing;if(Ga(e,"revoke")){if("boolean"!=typeof e.revoke)throw new hs.RevokeMustBeBoolean;if(e.revoke){if(Ga(e,"readOnly"))throw new hs.ReadOnlyParamNotAllowed;if(Ga(e,"resharingAllowed"))throw new hs.ResharingAllowedParamNotAllowed("when revoking access to a database")}}else if(!Ga(e,"readOnly")&&!Ga(e,"resharingAllowed"))throw new hs.ParamsMissing;const{databaseName:t,databaseId:s,readOnly:a,resharingAllowed:r,revoke:n,encryptionMode:i=sr.encryptionMode}=e,o=e.username.toLowerCase();try{const e=await an(t,s,i),c="ModifyDatabasePermissions",u={databaseId:e.dbId,databaseNameHash:e.dbNameHash,username:o,readOnly:a,resharingAllowed:r,revoke:n};await sr.request(c,u)}catch(e){if(kr(e),e.response&&e.response.data)switch(e.response.data.message){case"SharingWithSelfNotAllowed":throw new hs.ModifyingOwnPermissionsNotAllowed;case"ModifyingOwnerPermissionsNotAllowed":throw new hs.ModifyingOwnerPermissionsNotAllowed;case"ResharingNotAllowed":throw new hs.ModifyingPermissionsNotAllowed;case"ResharingWithWriteAccessNotAllowed":throw new hs.GrantingWriteAccessNotAllowed;case"DatabaseNotFound":throw new hs.DatabaseNotFound;case"UserNotFound":throw new hs.UserNotFound}throw e}}catch(e){switch(e.name){case"ParamsMustBeObject":case"ParamsMissing":case"DatabaseNameMissing":case"DatabaseNameMustBeString":case"DatabaseNameCannotBeBlank":case"DatabaseNameTooLong":case"DatabaseNameRestricted":case"DatabaseIdMustBeString":case"DatabaseIdCannotBeBlank":case"DatabaseIdInvalidLength":case"DatabaseIdNotAllowed":case"ShareTokenNotAllowed":case"DatabaseNotFound":case"EncryptionModeNotValid":case"ServerSideEncryptionNotEnabledInClient":case"UsernameMissing":case"UsernameCannotBeBlank":case"UsernameMustBeString":case"ReadOnlyMustBeBoolean":case"ReadOnlyParamNotAllowed":case"ResharingAllowedMustBeBoolean":case"ResharingAllowedParamNotAllowed":case"RevokeMustBeBoolean":case"ModifyingOwnPermissionsNotAllowed":case"ModifyingOwnerPermissionsNotAllowed":case"ModifyingPermissionsNotAllowed":case"GrantingWriteAccessNotAllowed":case"UserMustChangePassword":case"UserNotSignedIn":case"UserNotFound":case"ServiceUnavailable":throw e;default:throw new hs.UnknownServiceUnavailable(e)}}},getVerificationMessage:async()=>{try{Tr();const e=sr.session.username,t=await ln();return{verificationMessage:((e,t)=>btoa(JSON.stringify({username:e,fingerprint:t})))(e,t)}}catch(e){switch(e.name){case"UserMustChangePassword":case"UserNotSignedIn":case"ServiceUnavailable":throw e;default:throw new hs.UnknownServiceUnavailable(e)}}},verifyUser:async e=>{try{if("object"!=typeof e)throw new hs.ParamsMustBeObject;if(Tr(),!Ga(e,"verificationMessage"))throw new hs.VerificationMessageMissing;const{verificationMessage:t}=e;if("string"!=typeof t)throw new hs.VerificationMessageMustBeString;if(0===t.length)throw new hs.VerificationMessageCannotBeBlank;const{username:s,fingerprint:a}=(e=>{try{const{username:t,fingerprint:s}=JSON.parse(atob(e));if(un(t),!s)throw new hs.VerificationMessageInvalid;return{username:t,fingerprint:s}}catch(e){throw new hs.VerificationMessageInvalid}})(t);if(s===sr.session.username||a===await ln())throw new hs.VerifyingSelfNotAllowed;await fn();const r="__userbase_verified_users",n=!0,i=s,o={fingerprint:a};try{await Hr({databaseName:r,itemId:i,item:o,allowVerifiedUsersDatabase:n})}catch(e){if("ItemAlreadyExists"!==e.name)throw e;await Jr({databaseName:r,itemId:i,item:o,allowVerifiedUsersDatabase:n})}}catch(e){switch(e.name){case"ParamsMustBeObject":case"VerificationMessageMissing":case"VerificationMessageMustBeString":case"VerificationMessageCannotBeBlank":case"VerificationMessageInvalid":case"VerifyingSelfNotAllowed":case"UserMustChangePassword":case"UserNotSignedIn":case"ServiceUnavailable":throw e;default:throw new hs.UnknownServiceUnavailable(e)}}}};const pn=()=>{if(sr.reconnecting)throw new hs.Reconnecting;if(!sr.keys.init&&sr.changePassword)throw new hs.UserMustChangePassword;if(!sr.keys.init)throw new hs.UserNotSignedIn},wn=e=>{if(e.response){if(e.response.status===p)throw new hs.InternalServerError;if(e.response.status===g)throw new hs.Timeout}else if(e.message&&-1!==e.message.indexOf("timeout"))throw new hs.Timeout},gn=e=>{pn();const t=sr.userData.stripeData;if(!t.stripeAccountId)throw new hs.StripeAccountNotConnected;if("disabled"===t.paymentsMode)throw new hs.PaymentsDisabled;if(!Ga(window,"Stripe"))throw new hs.StripeJsLibraryMissing;if("object"!=typeof e)throw new hs.ParamsMustBeObject;if(!Ga(e,"successUrl"))throw new hs.SuccessUrlMissing;if("string"!=typeof e.successUrl)throw new hs.SuccessUrlMustBeString;const s=qa(e.successUrl);if("http"!==s&&"https"!==s){const e=!0;throw new hs.SuccessUrlInvalid(e)}if(!Ga(e,"cancelUrl"))throw new hs.CancelUrlMissing;if("string"!=typeof e.cancelUrl)throw new hs.CancelUrlMustBeString;const a=qa(e.cancelUrl);if("http"!==a&&"https"!==a){const e=!0;throw new hs.CancelUrlInvalid(e)}},yn=()=>{pn();const e=sr.userData.stripeData;if(!e.stripeAccountId)throw new hs.StripeAccountNotConnected;if("disabled"===e.paymentsMode)throw new hs.PaymentsDisabled;if("canceled"===e.subscriptionStatus)throw new hs.SubscriptionAlreadyCanceled};var bn={purchaseSubscription:async e=>{try{const t=sr.userData.stripeData;if(!t.cancelSubscriptionAt&&t.subscriptionStatus&&"canceled"!==t.subscriptionStatus)throw new hs.SubscriptionPlanAlreadyPurchased;gn(e);try{const s="PurchaseSubscription",a=(await sr.request(s,e)).data,r=vs("prod"===t.paymentsMode),n=await window.Stripe(r,{stripeAccount:t.stripeAccountId}).redirectToCheckout({sessionId:a});if(n.error)throw n.error}catch(e){if(wn(e),e.response)switch(e.response.data){case"PriceIdOrPlanIdAllowed":throw new hs.PriceIdOrPlanIdAllowed;case"PriceIdOrPlanIdMissing":throw new hs.PriceIdOrPlanIdMissing;case"SubscriptionPlanAlreadyPurchased":throw new hs.SubscriptionPlanAlreadyPurchased;case"SuccessUrlInvalid":throw new hs.SuccessUrlInvalid;case"CancelUrlInvalid":throw new hs.CancelUrlInvalid;default:if(e.response.data&&"StripeError"===e.response.data.name)throw new hs.StripeError(e.response.data)}throw e}}catch(e){switch(e.name){case"ParamsMustBeObject":case"SuccessUrlMissing":case"SuccessUrlMustBeString":case"SuccessUrlInvalid":case"CancelUrlMissing":case"CancelUrlMustBeString":case"CancelUrlInvalid":case"StripeError":case"StripeJsLibraryMissing":case"PriceIdOrPlanIdAllowed":case"PriceIdOrPlanIdMissing":case"SubscriptionPlanAlreadyPurchased":case"StripeAccountNotConnected":case"PaymentsDisabled":case"UserMustChangePassword":case"UserNotSignedIn":case"TooManyRequests":case"ServiceUnavailable":throw e;default:throw new hs.UnknownServiceUnavailable(e)}}},cancelSubscription:async()=>{try{yn();try{const e="CancelSubscription",t=(await sr.request(e)).data;return sr.userData.stripeData.cancelSubscriptionAt=t,{cancelSubscriptionAt:t}}catch(e){if(wn(e),e.response&&"SubscriptionNotFound"===e.response.data)throw new hs.SubscriptionNotFound;throw e}}catch(e){switch(e.name){case"SubscriptionNotFound":case"StripeAccountNotConnected":case"PaymentsDisabled":case"SubscriptionAlreadyCanceled":case"UserMustChangePassword":case"UserNotSignedIn":case"TooManyRequests":case"ServiceUnavailable":throw e;default:throw new hs.UnknownServiceUnavailable(e)}}},resumeSubscription:async()=>{try{yn();try{const e="ResumeSubscription";await sr.request(e),delete sr.userData.stripeData.cancelSubscriptionAt}catch(e){if(wn(e),e.response&&"SubscriptionNotFound"===e.response.data)throw new hs.SubscriptionNotFound;throw e}}catch(e){switch(e.name){case"SubscriptionNotFound":case"StripeAccountNotConnected":case"PaymentsDisabled":case"SubscriptionAlreadyCanceled":case"UserMustChangePassword":case"UserNotSignedIn":case"TooManyRequests":case"ServiceUnavailable":throw e;default:throw new hs.UnknownServiceUnavailable(e)}}},updatePaymentMethod:async e=>{try{gn(e);const t=sr.userData.stripeData;if(!t.subscriptionStatus)throw new hs.SubscriptionNotPurchased;try{const s="UpdatePaymentMethod",a=(await sr.request(s,e)).data,r=vs("prod"===t.paymentsMode),n=await window.Stripe(r,{stripeAccount:t.stripeAccountId}).redirectToCheckout({sessionId:a});if(n.error)throw n.error}catch(e){if(wn(e),e.response){if("SuccessUrlInvalid"===e.response.data)throw new hs.SuccessUrlInvalid;if("CancelUrlInvalid"===e.response.data)throw new hs.CancelUrlInvalid}throw e}}catch(e){switch(e.name){case"ParamsMustBeObject":case"SuccessUrlMissing":case"SuccessUrlMustBeString":case"SuccessUrlInvalid":case"CancelUrlMissing":case"CancelUrlMustBeString":case"CancelUrlInvalid":case"StripeJsLibraryMissing":case"SubscriptionNotPurchased":case"StripeAccountNotConnected":case"PaymentsDisabled":case"UserMustChangePassword":case"UserNotSignedIn":case"TooManyRequests":case"ServiceUnavailable":throw e;default:throw new hs.UnknownServiceUnavailable(e)}}}};t.default={init:Pr.init,signUp:Pr.signUp,signIn:Pr.signIn,signOut:Pr.signOut,updateUser:Pr.updateUser,deleteUser:Pr.deleteUser,forgotPassword:Pr.forgotPassword,openDatabase:mn.openDatabase,insertItem:mn.insertItem,updateItem:mn.updateItem,deleteItem:mn.deleteItem,putTransaction:mn.putTransaction,uploadFile:mn.uploadFile,getFile:mn.getFile,getDatabases:mn.getDatabases,shareDatabase:mn.shareDatabase,modifyDatabasePermissions:mn.modifyDatabasePermissions,getVerificationMessage:mn.getVerificationMessage,verifyUser:mn.verifyUser,purchaseSubscription:bn.purchaseSubscription,cancelSubscription:bn.cancelSubscription,resumeSubscription:bn.resumeSubscription,updatePaymentMethod:bn.updatePaymentMethod}}]).default; +//# sourceMappingURL=userbase.js.map diff --git a/public/js/userbase.js.map b/public/js/userbase.js.map new file mode 100644 index 0000000..84fe57a --- /dev/null +++ b/public/js/userbase.js.map @@ -0,0 +1,2022 @@ +{ + "version": 3, + "sources": [ + "webpack://userbase/webpack/bootstrap", + "webpack://userbase/./node_modules/base64-arraybuffer/lib/base64-arraybuffer.js", + "webpack://userbase/./node_modules/@babel/runtime/helpers/defineProperty.js", + "webpack://userbase/./node_modules/uuid/v4.js", + "webpack://userbase/(webpack)/buildin/global.js", + "webpack://userbase/./node_modules/node-libs-browser/node_modules/buffer/index.js", + "webpack://userbase/./node_modules/bn.js/lib/bn.js", + "webpack://userbase/./node_modules/diffie-hellman/lib/generatePrime.js", + "webpack://userbase/./node_modules/randombytes/browser.js", + "webpack://userbase/./node_modules/process/browser.js", + "webpack://userbase/./node_modules/miller-rabin/lib/mr.js", + "webpack://userbase/./node_modules/diffie-hellman/browser.js", + "webpack://userbase/./node_modules/scrypt-js/scrypt.js", + "webpack://userbase/./node_modules/sorted-array/sorted-array.js", + "webpack://userbase/./node_modules/uuid/lib/rng-browser.js", + "webpack://userbase/./node_modules/uuid/lib/bytesToUuid.js", + "webpack://userbase/./node_modules/base64-js/index.js", + "webpack://userbase/./node_modules/ieee754/index.js", + "webpack://userbase/./node_modules/isarray/index.js", + "webpack://userbase/./node_modules/safe-buffer/index.js", + "webpack://userbase/(webpack)/buildin/module.js", + "webpack://userbase/./node_modules/brorand/index.js", + "webpack://userbase/./node_modules/diffie-hellman/lib/dh.js", + "webpack://userbase/./node_modules/timers-browserify/main.js", + "webpack://userbase/./node_modules/setimmediate/setImmediate.js", + "webpack://userbase/./src/statusCodes.js", + "webpack://userbase/./src/errors/auth.js", + "webpack://userbase/./src/errors/db.js", + "webpack://userbase/./src/errors/config.js", + "webpack://userbase/./src/errors/payments.js", + "webpack://userbase/./src/errors/index.js", + "webpack://userbase/./src/config.js", + "webpack://userbase/./src/api/utils.js", + "webpack://userbase/./src/api/auth.js", + "webpack://userbase/./src/localData.js", + "webpack://userbase/./src/Crypto/utils.js", + "webpack://userbase/./src/Crypto/sha-256.js", + "webpack://userbase/./src/Crypto/hkdf.js", + "webpack://userbase/./src/Crypto/aes-gcm.js", + "webpack://userbase/./src/Crypto/diffie-hellman.js", + "webpack://userbase/./src/Crypto/ecdsa.js", + "webpack://userbase/./src/Crypto/ecdh.js", + "webpack://userbase/./src/Crypto/hmac.js", + "webpack://userbase/./src/Crypto/index.js", + "webpack://userbase/./src/Crypto/scrypt.js", + "webpack://userbase/./src/utils.js", + "webpack://userbase/./src/worker.js", + "webpack://userbase/./src/api/db.js", + "webpack://userbase/./src/ws.js", + "webpack://userbase/./src/auth.js", + "webpack://userbase/./src/db.js", + "webpack://userbase/./src/payments.js", + "webpack://userbase/./src/index.js" + ], + "names": [ + "installedModules", + "__webpack_require__", + "moduleId", + "exports", + "module", + "i", + "l", + "modules", + "call", + "m", + "c", + "d", + "name", + "getter", + "o", + "Object", + "defineProperty", + "enumerable", + "get", + "r", + "Symbol", + "toStringTag", + "value", + "t", + "mode", + "__esModule", + "ns", + "create", + "key", + "bind", + "n", + "object", + "property", + "prototype", + "hasOwnProperty", + "p", + "s", + "chars", + "lookup", + "Uint8Array", + "length", + "charCodeAt", + "encode", + "arraybuffer", + "bytes", + "len", + "base64", + "substring", + "decode", + "encoded1", + "encoded2", + "encoded3", + "encoded4", + "bufferLength", + "ArrayBuffer", + "obj", + "configurable", + "writable", + "rng", + "bytesToUuid", + "options", + "buf", + "offset", + "Array", + "rnds", + "random", + "ii", + "g", + "this", + "Function", + "e", + "window", + "ieee754", + "isArray", + "kMaxLength", + "Buffer", + "TYPED_ARRAY_SUPPORT", + "createBuffer", + "that", + "RangeError", + "__proto__", + "arg", + "encodingOrOffset", + "Error", + "allocUnsafe", + "from", + "TypeError", + "array", + "byteOffset", + "byteLength", + "undefined", + "fromArrayLike", + "fromArrayBuffer", + "string", + "encoding", + "isEncoding", + "actual", + "write", + "slice", + "fromString", + "isBuffer", + "checked", + "copy", + "buffer", + "val", + "type", + "data", + "fromObject", + "assertSize", + "size", + "toString", + "isView", + "loweredCase", + "utf8ToBytes", + "base64ToBytes", + "toLowerCase", + "slowToString", + "start", + "end", + "hexSlice", + "utf8Slice", + "asciiSlice", + "latin1Slice", + "base64Slice", + "utf16leSlice", + "swap", + "b", + "bidirectionalIndexOf", + "dir", + "isNaN", + "arrayIndexOf", + "indexOf", + "lastIndexOf", + "arr", + "indexSize", + "arrLength", + "valLength", + "String", + "read", + "readUInt16BE", + "foundIndex", + "found", + "j", + "hexWrite", + "Number", + "remaining", + "strLen", + "parsed", + "parseInt", + "substr", + "utf8Write", + "blitBuffer", + "asciiWrite", + "str", + "byteArray", + "push", + "asciiToBytes", + "latin1Write", + "base64Write", + "ucs2Write", + "units", + "hi", + "lo", + "utf16leToBytes", + "fromByteArray", + "Math", + "min", + "res", + "secondByte", + "thirdByte", + "fourthByte", + "tempCodePoint", + "firstByte", + "codePoint", + "bytesPerSequence", + "codePoints", + "fromCharCode", + "apply", + "decodeCodePointsArray", + "SlowBuffer", + "alloc", + "INSPECT_MAX_BYTES", + "global", + "foo", + "subarray", + "typedArraySupport", + "poolSize", + "_augment", + "species", + "fill", + "allocUnsafeSlow", + "_isBuffer", + "compare", + "a", + "x", + "y", + "concat", + "list", + "pos", + "swap16", + "swap32", + "swap64", + "arguments", + "equals", + "inspect", + "max", + "match", + "join", + "target", + "thisStart", + "thisEnd", + "thisCopy", + "targetCopy", + "includes", + "isFinite", + "toJSON", + "_arr", + "ret", + "out", + "toHex", + "checkOffset", + "ext", + "checkInt", + "objectWriteUInt16", + "littleEndian", + "objectWriteUInt32", + "checkIEEE754", + "writeFloat", + "noAssert", + "writeDouble", + "newBuf", + "sliceLen", + "readUIntLE", + "mul", + "readUIntBE", + "readUInt8", + "readUInt16LE", + "readUInt32LE", + "readUInt32BE", + "readIntLE", + "pow", + "readIntBE", + "readInt8", + "readInt16LE", + "readInt16BE", + "readInt32LE", + "readInt32BE", + "readFloatLE", + "readFloatBE", + "readDoubleLE", + "readDoubleBE", + "writeUIntLE", + "writeUIntBE", + "writeUInt8", + "floor", + "writeUInt16LE", + "writeUInt16BE", + "writeUInt32LE", + "writeUInt32BE", + "writeIntLE", + "limit", + "sub", + "writeIntBE", + "writeInt8", + "writeInt16LE", + "writeInt16BE", + "writeInt32LE", + "writeInt32BE", + "writeFloatLE", + "writeFloatBE", + "writeDoubleLE", + "writeDoubleBE", + "targetStart", + "set", + "code", + "INVALID_BASE64_RE", + "Infinity", + "leadSurrogate", + "toByteArray", + "trim", + "replace", + "stringtrim", + "base64clean", + "src", + "dst", + "assert", + "msg", + "inherits", + "ctor", + "superCtor", + "super_", + "TempCtor", + "constructor", + "BN", + "number", + "base", + "endian", + "isBN", + "negative", + "words", + "red", + "_init", + "wordSize", + "parseHex", + "parseBase", + "num", + "left", + "right", + "cmp", + "_initNumber", + "_initArray", + "_parseHex", + "_parseBase", + "strip", + "toArray", + "ceil", + "w", + "off", + "limbLen", + "limbPow", + "total", + "mod", + "word", + "imuln", + "_iaddn", + "dest", + "clone", + "_expand", + "_normSign", + "zeros", + "groupSizes", + "groupBases", + "smallMulTo", + "self", + "carry", + "k", + "ncarry", + "rword", + "maxJ", + "padding", + "groupSize", + "groupBase", + "isZero", + "modn", + "idivn", + "toNumber", + "toBuffer", + "toArrayLike", + "ArrayType", + "reqLength", + "q", + "andln", + "iushrn", + "clz32", + "_countBits", + "_zeroBits", + "bitLength", + "zeroBits", + "toTwos", + "width", + "abs", + "inotn", + "iaddn", + "fromTwos", + "testn", + "notn", + "ineg", + "isNeg", + "neg", + "iuor", + "ior", + "or", + "uor", + "iuand", + "iand", + "and", + "uand", + "iuxor", + "ixor", + "xor", + "uxor", + "bytesNeeded", + "bitsLeft", + "setn", + "bit", + "wbit", + "iadd", + "isub", + "add", + "comb10MulTo", + "mid", + "a0", + "al0", + "ah0", + "a1", + "al1", + "ah1", + "a2", + "al2", + "ah2", + "a3", + "al3", + "ah3", + "a4", + "al4", + "ah4", + "a5", + "al5", + "ah5", + "a6", + "al6", + "ah6", + "a7", + "al7", + "ah7", + "a8", + "al8", + "ah8", + "a9", + "al9", + "ah9", + "b0", + "bl0", + "bh0", + "b1", + "bl1", + "bh1", + "b2", + "bl2", + "bh2", + "b3", + "bl3", + "bh3", + "b4", + "bl4", + "bh4", + "b5", + "bl5", + "bh5", + "b6", + "bl6", + "bh6", + "b7", + "bl7", + "bh7", + "b8", + "bl8", + "bh8", + "b9", + "bl9", + "bh9", + "w0", + "imul", + "w1", + "w2", + "w3", + "w4", + "w5", + "w6", + "w7", + "w8", + "w9", + "w10", + "w11", + "w12", + "w13", + "w14", + "w15", + "w16", + "w17", + "w18", + "jumboMulTo", + "FFTM", + "mulp", + "mulTo", + "hncarry", + "bigMulTo", + "makeRBT", + "N", + "revBin", + "rb", + "permute", + "rbt", + "rws", + "iws", + "rtws", + "itws", + "transform", + "rtwdf", + "cos", + "PI", + "itwdf", + "sin", + "rtwdf_", + "itwdf_", + "re", + "ie", + "ro", + "io", + "rx", + "guessLen13b", + "odd", + "conjugate", + "normalize13b", + "ws", + "round", + "convert13b", + "stub", + "ph", + "_", + "rwst", + "iwst", + "nrws", + "nrwst", + "niwst", + "rmws", + "mulf", + "muln", + "sqr", + "isqr", + "toBitArray", + "iushln", + "bits", + "carryMask", + "newCarry", + "ishln", + "hint", + "extended", + "h", + "mask", + "maskedWords", + "ishrn", + "shln", + "ushln", + "shrn", + "ushrn", + "imaskn", + "maskn", + "isubn", + "addn", + "subn", + "iabs", + "_ishlnsubmul", + "shift", + "_wordDiv", + "bhi", + "diff", + "qj", + "div", + "divmod", + "positive", + "divn", + "umod", + "divRound", + "dm", + "half", + "r2", + "acc", + "egcd", + "A", + "B", + "C", + "D", + "isEven", + "yp", + "xp", + "im", + "isOdd", + "jm", + "gcd", + "_invmp", + "x1", + "x2", + "delta", + "cmpn", + "invm", + "bincn", + "ucmp", + "gtn", + "gt", + "gten", + "gte", + "ltn", + "lt", + "lten", + "lte", + "eqn", + "eq", + "Red", + "toRed", + "ctx", + "convertTo", + "_forceRed", + "fromRed", + "convertFrom", + "forceRed", + "redAdd", + "redIAdd", + "redSub", + "redISub", + "redShl", + "shl", + "redMul", + "_verify2", + "redIMul", + "redSqr", + "_verify1", + "redISqr", + "redSqrt", + "sqrt", + "redInvm", + "redNeg", + "redPow", + "primes", + "k256", + "p224", + "p192", + "p25519", + "MPrime", + "tmp", + "_tmp", + "K256", + "P224", + "P192", + "P25519", + "prime", + "_prime", + "Mont", + "imod", + "rinv", + "minv", + "ireduce", + "rlen", + "split", + "imulK", + "_strip", + "input", + "output", + "outLen", + "prev", + "next", + "mod3", + "one", + "nOne", + "lpow", + "z", + "inv", + "wnd", + "current", + "currentLen", + "mont", + "u", + "randomBytes", + "findPrime", + "simpleSieve", + "fermatTest", + "TWENTYFOUR", + "millerRabin", + "ONE", + "TWO", + "FIVE", + "TEN", + "THREE", + "ELEVEN", + "FOUR", + "_getPrimes", + "gen", + "n2", + "test", + "crypto", + "msCrypto", + "getRandomValues", + "cb", + "generated", + "process", + "nextTick", + "cachedSetTimeout", + "cachedClearTimeout", + "defaultSetTimout", + "defaultClearTimeout", + "runTimeout", + "fun", + "setTimeout", + "clearTimeout", + "currentQueue", + "queue", + "draining", + "queueIndex", + "cleanUpNextTick", + "drainQueue", + "timeout", + "run", + "marker", + "runClearTimeout", + "Item", + "noop", + "args", + "title", + "browser", + "env", + "argv", + "version", + "versions", + "on", + "addListener", + "once", + "removeListener", + "removeAllListeners", + "emit", + "prependListener", + "prependOnceListener", + "listeners", + "binding", + "cwd", + "chdir", + "umask", + "bn", + "brorand", + "MillerRabin", + "rand", + "Rand", + "_randbelow", + "min_bytes", + "generate", + "_randrange", + "stop", + "rone", + "n1", + "rn1", + "getDivisor", + "DH", + "ENCODINGS", + "DiffieHellmanGroup", + "createDiffieHellmanGroup", + "getDiffieHellman", + "createDiffieHellman", + "DiffieHellman", + "enc", + "generator", + "genc", + "generatePrime", + "root", + "SHA256", + "K", + "Uint32Array", + "h0", + "h1", + "h2", + "h3", + "h4", + "h5", + "h6", + "h7", + "blocks", + "t1", + "t2", + "f", + "bytesLeft", + "bitLenHi", + "bitLenLo", + "numZeros", + "PBKDF2_HMAC_SHA256_OneIter", + "password", + "salt", + "dkLen", + "innerLen", + "inner", + "outerKey", + "dk", + "incrementCounter", + "blockmix_salsa8", + "BY", + "Yi", + "_X", + "arraycopy", + "blockxor", + "salsa20_8", + "R", + "S", + "Si", + "srcPos", + "destPos", + "checkBufferish", + "v", + "ensureInteger", + "_scrypt", + "callback", + "XY", + "V", + "totalOps", + "i1", + "Bi", + "currentOp", + "lastPercent10", + "state", + "i0", + "setImmediate", + "incrementalSMix", + "steps", + "percent10", + "derivedKey", + "lib", + "scrypt", + "progressCallback", + "Promise", + "resolve", + "reject", + "lastProgress", + "error", + "progress", + "syncScrypt", + "SortedArray", + "compareDefault", + "index", + "insert", + "element", + "ordering", + "high", + "low", + "search", + "remove", + "splice", + "comparing", + "rnds8", + "byteToHex", + "bth", + "b64", + "lens", + "getLens", + "validLen", + "placeHoldersLen", + "Arr", + "_byteLength", + "curByte", + "revLookup", + "uint8", + "extraBytes", + "parts", + "len2", + "encodeChunk", + "isLE", + "mLen", + "nBytes", + "eLen", + "eMax", + "eBias", + "nBits", + "NaN", + "rt", + "log", + "LN2", + "copyProps", + "SafeBuffer", + "webpackPolyfill", + "deprecate", + "paths", + "children", + "_rand", + "getBytes", + "getByte", + "SEVEN", + "setPublicKey", + "pub", + "_pub", + "setPrivateKey", + "priv", + "_priv", + "primeCache", + "malleable", + "setGenerator", + "__prime", + "_primeLen", + "_primeCode", + "formatReturnValue", + "hex", + "rem", + "checkPrime", + "__gen", + "generateKeys", + "_gen", + "getPublicKey", + "computeSecret", + "other", + "secret", + "getPrime", + "front", + "getPrivateKey", + "getGenerator", + "Timeout", + "id", + "clearFn", + "_id", + "_clearFn", + "scope", + "setInterval", + "clearInterval", + "close", + "unref", + "ref", + "enroll", + "item", + "msecs", + "_idleTimeoutId", + "_idleTimeout", + "unenroll", + "_unrefActive", + "active", + "_onTimeout", + "clearImmediate", + "registerImmediate", + "html", + "channel", + "messagePrefix", + "onGlobalMessage", + "nextHandle", + "tasksByHandle", + "currentlyRunningATask", + "doc", + "document", + "attachTo", + "getPrototypeOf", + "handle", + "runIfPresent", + "postMessage", + "importScripts", + "postMessageIsAsynchronous", + "oldOnMessage", + "onmessage", + "canUsePostMessage", + "MessageChannel", + "port1", + "event", + "port2", + "createElement", + "documentElement", + "script", + "onreadystatechange", + "removeChild", + "appendChild", + "source", + "addEventListener", + "attachEvent", + "task", + "UsernameAlreadyExists", + "params", + "super", + "message", + "status", + "statusCodes", + "UsernameMissing", + "UsernameCannotBeBlank", + "UsernameTooLong", + "maxLen", + "UsernameMustBeString", + "PasswordMissing", + "PasswordCannotBeBlank", + "PasswordTooShort", + "minLen", + "PasswordTooLong", + "PasswordMustBeString", + "PasswordAttemptLimitExceeded", + "delay", + "UsernameOrPasswordMismatch", + "SessionLengthMustBeNumber", + "SessionLengthTooShort", + "SessionLengthTooLong", + "AllowServerSideEncryptionMustBeBoolean", + "UserAlreadySignedIn", + "username", + "UserPendingDeletion", + "AppIdNotValid", + "DomainNotWhitelisted", + "domain", + "UserNotSignedIn", + "UserNotFound", + "UserEmailNotFound", + "UserMustChangePassword", + "EmailNotValid", + "ProfileMustBeObject", + "ProfileCannotBeEmpty", + "ProfileHasTooManyKeys", + "maxKeys", + "ProfileKeyTooLong", + "ProfileValueMustBeString", + "ProfileValueCannotBeBlank", + "ProfileValueTooLong", + "RememberMeValueNotValid", + "JSON", + "stringify", + "keys", + "ParamsMissing", + "TrialExceededLimit", + "CurrentPasswordMissing", + "CurrentPasswordIncorrect", + "KeyNotFound", + "DeleteEndToEndEncryptedDataMustBeBoolean", + "DatabaseNameMissing", + "DatabaseNameCannotBeBlank", + "DatabaseNameMustBeString", + "DatabaseNameTooLong", + "maxLength", + "DatabaseNameRestricted", + "databaseName", + "DatabaseAlreadyOpening", + "ChangeHandlerMissing", + "ChangeHandlerMustBeFunction", + "EncryptionModeNotValid", + "ServerSideEncryptionNotEnabledInClient", + "DatabaseNotOpen", + "DatabaseNotFound", + "DatabaseIsReadOnly", + "DatabaseIdMustBeString", + "DatabaseIdCannotBeBlank", + "DatabaseIdNotAllowed", + "DatabaseIdNotAllowedForOwnDatabase", + "DatabaseIdInvalidLength", + "ShareTokenInvalid", + "ShareTokenNotFound", + "ShareTokenNotAllowed", + "reason", + "ShareTokenNotAllowedForOwnDatabase", + "ReadOnlyMustBeBoolean", + "ReadOnlyParamNotAllowed", + "ResharingAllowedParamNotAllowed", + "ResharingAllowedMustBeBoolean", + "ResharingNotAllowed", + "ResharingWithWriteAccessNotAllowed", + "SharingWithSelfNotAllowed", + "ModifyingOwnPermissionsNotAllowed", + "ModifyingOwnerPermissionsNotAllowed", + "ModifyingPermissionsNotAllowed", + "GrantingWriteAccessNotAllowed", + "RequireVerifiedMustBeBoolean", + "RequireVerifiedParamNotNecessary", + "RevokeMustBeBoolean", + "ItemMissing", + "ItemInvalid", + "ItemTooLarge", + "maxKb", + "ItemIdMustBeString", + "ItemIdTooLong", + "ItemIdMissing", + "ItemIdCannotBeBlank", + "ItemAlreadyExists", + "ItemDoesNotExist", + "ItemUpdateConflict", + "FileMissing", + "FileMustBeFile", + "FileCannotBeEmpty", + "FileUploadConflict", + "FileNotFound", + "FileIdMissing", + "FileIdMustBeString", + "FileIdCannotBeBlank", + "FileIdTooLong", + "RangeMustBeObject", + "RangeMissingStart", + "RangeMissingEnd", + "RangeStartMustBeNumber", + "RangeEndMustBeNumber", + "RangeStartMustBeGreaterThanZero", + "RangeEndMustBeGreaterThanRangeStart", + "RangeEndMustBeLessThanFileSize", + "OperationsMissing", + "OperationsMustBeArray", + "CommandNotRecognized", + "command", + "OperationsConflict", + "OperationsExceedLimit", + "UserNotVerified", + "UserMustBeReverified", + "UserUnableToReceiveDatabase", + "VerificationMessageMissing", + "VerificationMessageCannotBeBlank", + "VerificationMessageMustBeString", + "VerificationMessageInvalid", + "VerifyingSelfNotAllowed", + "ProgressHandlerMustBeFunction", + "TransactionUnauthorized", + "WriteAccessParamNotAllowed", + "AppIdAlreadySet", + "appId", + "AppIdMustBeString", + "AppIdMissing", + "AppIdCannotBeBlank", + "WebCryptoUnavailable", + "UpdateUserHandlerMustBeFunction", + "SuccessUrlMissing", + "SuccessUrlMustBeString", + "SuccessUrlInvalid", + "invalidProtocol", + "CancelUrlMissing", + "CancelUrlMustBeString", + "CancelUrlInvalid", + "StripeJsLibraryMissing", + "PaymentsDisabled", + "PriceIdOrPlanIdAllowed", + "PriceIdOrPlanIdMissing", + "SubscriptionPlanAlreadyPurchased", + "StripeAccountNotConnected", + "SubscriptionNotFound", + "SubscriptionInactive", + "subscriptionStatus", + "SubscriptionNotPurchased", + "SubscriptionAlreadyCanceled", + "TrialExpired", + "StripeError", + "AppIdNotSet", + "ServiceUnavailable", + "ParamsMustBeObject", + "TooManyRequests", + "retryDelay", + "retryDelaySeconds", + "auth", + "db", + "config", + "payments", + "InternalServerError", + "Reconnecting", + "UnknownServiceUnavailable", + "console", + "userbaseAppId", + "userbaseUpdateUserHandler", + "userbaseAllowServerSideEncryptionMode", + "errors", + "_userbaseEndpoint", + "updateUserHandler", + "allowServerSideEncryption", + "isProduction", + "_USERBASE_STRIPE_PRODUCTION_PUBLISHABLE_KEY", + "_USERBASE_STRIPE_TEST_PUBLISHABLE_KEY", + "RequestError", + "statusText", + "response", + "TimeoutError", + "processXhr", + "xhr", + "onload", + "parse", + "handleResponse", + "onerror", + "ontimeout", + "passwordToken", + "ecKeyData", + "passwordSalts", + "keySalts", + "email", + "profile", + "passwordBasedBackup", + "sessionLength", + "XMLHttpRequest", + "url", + "open", + "setRequestHeader", + "send", + "encodeURIComponent", + "async", + "sessionId", + "responseType", + "tryCatchWrapper", + "func", + "warn", + "_getSeedName", + "setCurrentSession", + "rememberMe", + "signedIn", + "creationDate", + "expirationDate", + "session", + "sessionString", + "localStorage", + "setItem", + "sessionStorage", + "signInSession", + "signOutSession", + "getCurrentSession", + "sessionStorageCurrentSessionString", + "getItem", + "localCurrentSessionString", + "localCurrentSession", + "localSessionString", + "saveSeedString", + "seedString", + "removeSeedString", + "seedName", + "removeItem", + "getSeedString", + "removeCurrentSession", + "arrayBufferToString", + "minified", + "bufView", + "Uint16Array", + "result", + "chunkSize", + "chunk", + "stringToArrayBuffer", + "appendBuffer", + "buffer1", + "buffer2", + "hash", + "subtle", + "digest", + "BYTE_SIZE", + "HASH_ALGORITHM_NAME", + "hashBase64String", + "dataString", + "hashString", + "KEY_WILL_BE_USED_TO", + "importHkdfKey", + "importKey", + "seed", + "SALT_BYTE_SIZE", + "sha256", + "getParams", + "keyName", + "info", + "importHkdfKeyFromString", + "generateSalt", + "getPasswordToken", + "hkdfKey", + "passwordTokenBits", + "deriveBits", + "windowOrSelfObject", + "getEncryptionKeyParams", + "getCiphertextParams", + "iv", + "tagLength", + "generateIv", + "sliceEncryptedArrayBuffer", + "encryptedArrayBuffer", + "ivStartIndex", + "ciphertextArrayBuffer", + "generateKey", + "getKeyFromRawKey", + "rawKey", + "getRawKeyFromKey", + "exportKey", + "encrypt", + "plaintext", + "encryptString", + "plaintextString", + "plaintextArrayBuffer", + "encrypted", + "decrypt", + "decryptString", + "encryptedString", + "importKeyFromMaster", + "masterKey", + "encryptionKeyName", + "deriveKey", + "hkdf", + "getKeyStringFromKey", + "getKeyFromKeyString", + "keyString", + "encryptJson", + "plaintextJson", + "decryptJson", + "encryptedJsonString", + "getPasswordBasedEncryptionKey", + "generateAndEncryptKeyEncryptionKey", + "keyEncryptionKey", + "keyEncryptionKeyRaw", + "RAW_KEY_TYPE", + "PRIME", + "hexString", + "halfHexStringLen", + "byteStartIndex", + "byte", + "byteAsInt", + "hexStringToArrayBuffer", + "GENERATOR", + "serverPublicKey", + "privateKey", + "diffieHellman", + "setPrivateKeyAndGenerateKeys", + "getSharedKey", + "otherPublicKey", + "sharedSecret", + "sharedRawKey", + "aesGcm", + "getSharedKeyWithServer", + "authApi", + "getServerPublicKey", + "KEY_PAIR_WILL_BE_USED_TO", + "PRIVATE_KEY_WILL_BE_USED_TO", + "PUBLIC_KEY_WILL_BE_USED_TO", + "ECDSA_PARAMS", + "namedCurve", + "ECDSA_SIGNING_PARAMS", + "getRawPublicKeyFromPublicKey", + "publicKey", + "getPublicKeyStringFromPublicKey", + "rawPublicKey", + "importEcdsaKeyEncryptionKeyFromMaster", + "sign", + "verify", + "signature", + "generateEcdsaKeyData", + "ecdsaKeyPair", + "generateKeyPair", + "ecdsaKeyEncryptionKeySalt", + "ecdsaKeyEncryptionKey", + "ecdsaRawPrivateKey", + "jwkPrivateKey", + "getRawPrivateKeyFromPrivateKey", + "encryptedEcdsaPrivateKey", + "ecdsaPrivateKey", + "ecdsaPublicKey", + "getPrivateKeyFromRawPrivateKey", + "rawPrivateKey", + "getPublicKeyFromRawPublicKey", + "getPublicKeyFromPrivateKey", + "key_ops", + "signString", + "verifyString", + "signatureString", + "ECDH_PARAMS", + "importEcdhKeyEncryptionKeyFromMaster", + "generateEcdhKeyData", + "ecdhKeyPair", + "ecdhKeyEncryptionKeySalt", + "ecdhKeyEncryptionKey", + "ecdhRawPrivateKey", + "encryptedEcdhPrivateKey", + "ecdhPublicKey", + "signedEcdhPublicKey", + "ecdsa", + "ecdhPrivateKey", + "computeSharedKeyEncryptionKey", + "otherEcdhPublicKey", + "public", + "KEY_WILL_BE_USED_TO_SIGN", + "KEY_WILL_BE_USED_TO_SIGN_AND_VERIFY", + "importKeyFromRawBits", + "rawBits", + "generateSeed", + "ecdh", + "hmac", + "passwordString", + "passwordHashAlgo", + "scryptJs", + "passwordArrayBuffer", + "passwordHash", + "getProtocolFromEndpoint", + "endpoint", + "getWsUrl", + "host", + "removeProtocolFromEndpoint", + "byteSizeOfString", + "objectHasOwnProperty", + "Queue", + "getLength", + "isEmpty", + "enqueue", + "dequeue", + "peek", + "newWorker", + "blobURL", + "URL", + "createObjectURL", + "Blob", + "compress", + "decompress", + "LZString", + "charAt", + "compressToBase64", + "_compress", + "decompressFromBase64", + "_decompress", + "compressToUTF16", + "decompressFromUTF16", + "compressToUint8Array", + "decompressFromUint8Array", + "forEach", + "compressToEncodedURIComponent", + "decompressFromEncodedURIComponent", + "position", + "worker", + "Worker", + "revokeObjectURL", + "terminate", + "uploadBundleChunk", + "userId", + "databaseId", + "seqNo", + "bundleId", + "chunkNo", + "clientId", + "uuidv4", + "RequestFailed", + "action", + "WebSocketError", + "init", + "resolveConnection", + "rejectConnection", + "changePassword", + "encryptionMode", + "pingTimeout", + "connected", + "connectionResolved", + "authToken", + "salts", + "userData", + "stripeData", + "requests", + "dbNameToHash", + "databases", + "databasesByDbId", + "shareTokenIdToDbId", + "connect", + "reconnectDelay", + "timeoutToOpenWebSocket", + "reconnecting", + "WebSocket", + "onopen", + "route", + "heartbeat", + "validationMessage", + "encryptedValidationMessage", + "setKeys", + "validateKey", + "DOMException", + "dbId", + "dbNameHash", + "database", + "isOwner", + "applyTransactionsQueue", + "startApplyingThisBatchOfTransactions", + "dbKey", + "plaintextDbKey", + "shareTokenEncryptedDbKey", + "dbKeyString", + "encryptionKey", + "decryptShareTokenEncryptedDbKey", + "shareTokenEncryptionKeySalt", + "writers", + "attributionEnabled", + "usernamesByUserId", + "waitForFullBundle", + "finishedWaitingForBundle", + "bundle", + "rebuildBundle", + "bundleSeqNo", + "encryptedBundleEncryptionKey", + "applyBundle", + "alert", + "newTransactions", + "transactionLog", + "applyTransactions", + "ownerId", + "buildBundle", + "startApplyingNextBatchInQueue", + "isFirstChunk", + "isLastChunk", + "bundleChunks", + "handleUpdateUser", + "updatedUser", + "requestId", + "request", + "promiseResolve", + "promiseReject", + "onclose", + "serviceRestart", + "clientDisconnected", + "wasClean", + "reconnect", + "reconnected", + "currentState", + "dbsToReopen", + "dbsToReopenById", + "reopenDatabases", + "openDatabasePromises", + "reopenAtSeqNo", + "lastSeqNo", + "shareTokenHkdfKey", + "shareTokenAuthData", + "authenticateShareToken", + "shareTokenId", + "all", + "localData", + "encryptionKeySalt", + "hmacKey", + "hmacKeySalt", + "rawEcdsaPrivateKey", + "rawEcdhPrivateKey", + "dhKeySalt", + "dhPrivateKey", + "ecdsaKeyWrapperSalt", + "ecdsaKeyData", + "ecdhKeyData", + "newEcKeyData", + "sharedKey", + "responseWatcher", + "watch", + "chunkArrayBuffer", + "bundleArrayBuffer", + "buffers", + "bufferByteLengths", + "map", + "totalByteLength", + "reduce", + "byteLengthSum", + "bufferByteLength", + "currentByteLength", + "byteLengths", + "appendBuffers", + "plaintextMetadata", + "bundleEncryptionKeyRaw", + "bundleEncryptionKey", + "decrypted", + "decryptedString", + "decompressedEncrypted", + "decompressedPlaintextMetdata", + "chunkNumber", + "batch", + "initResponse", + "orderedItems", + "items", + "itemsIndex", + "orderedItemsArray", + "itemId", + "prepareBundle", + "itemsPlaintextMetadata", + "bundledAtSeqNo", + "initBundleUpload", + "compressedBeforeEncryption", + "compressedPlaintextMetadataString", + "compressedArrayBufferBeforeEncryption", + "encryptedItems", + "numChunks", + "uploadBundle", + "buildUserResult", + "protectedProfile", + "usedTempPassword", + "passwordChanged", + "paymentsMode", + "cancelSubscriptionAt", + "subscriptionPlanId", + "trialExpirationDate", + "user", + "newSeedString", + "newKeyData", + "shareTokenAuthKeyData", + "shareTokenEcdsaPrivateKey", + "shareTokenEcdsaKeyEncryptionKeySalt", + "shareTokenEcdsaKeyEncryptionKey", + "shareTokenEncryptedEcdsaPrivateKey", + "shareTokenEcdsaPrivateKeyRaw", + "signedValidationMessage", + "REMEMBER_ME_OPTIONS", + "local", + "none", + "KEY_NOT_FOUND_ON_SIGN_IN", + "KEY_NOT_FOUND_ON_FORGOT_PASSWORD", + "_parseGenericErrors", + "location", + "origin", + "_connectWebSocket", + "_parseGenericUsernamePasswordError", + "_parseSessionLengthError", + "_parseUserResponseError", + "_calculateSessionLengthMs", + "_validateUsername", + "_validatePassword", + "_validateSignUpOrSignInInput", + "_generatePasswordToken", + "passwordSalt", + "passwordHkdfKey", + "passwordTokenSalt", + "passwordBasedEncryptionKeySalt", + "passwordBasedEncryptionKey", + "passwordEncryptedSeed", + "_generateKeys", + "_validateProfile", + "keyExists", + "_getPasswordSaltsOverWebSocket", + "_rebuildPasswordToken", + "signInWithSession", + "lastUsedUsername", + "currentSession", + "savedSeedString", + "Date", + "apiSignInWithSessionResult", + "_getMasterKeyAndKeyNotFoundMessage", + "signUp", + "_validateSignUpInput", + "_generateKeysAndSignUp", + "signOut", + "signIn", + "_getPasswordSaltsOverRestEndpoint", + "apiSignInResult", + "_signInWrapper", + "seedStringFromBackup", + "seedFromBackup", + "_getSeedStringFromPasswordBasedBackup", + "updateUser", + "currentPassword", + "newPassword", + "_validateUpdatedUserInput", + "startingUserId", + "newSeed", + "finalParams", + "currentPasswordSalts", + "newPasswordPromise", + "currentPasswordToken", + "_buildUpdateUserParams", + "rotateKeys", + "deleteUser", + "_checkSignedInState", + "forgotPassword", + "deleteEndToEndEncryptedData", + "forgotPasswordWs", + "encryptedForgotPasswordToken", + "forgotPasswordToken", + "signedForgotPasswordToken", + "ENCRYPTION_MODE_OPTIONS", + "UnverifiedTransaction", + "startSeqNo", + "txSeqNo", + "transactions", + "getStartSeqNo", + "getIndex", + "setIndex", + "promise", + "verifyPromise", + "addTransaction", + "transaction", + "Database", + "changeHandler", + "receivedMessage", + "onChange", + "_setChangeHandler", + "fileIds", + "operationIndex", + "unverifiedTransactions", + "Map", + "transactionCode", + "applyTransaction", + "getItems", + "itemIndex", + "file", + "fileEncryptionKeyString", + "fileEncryptionKey", + "fileId", + "record", + "createdBy", + "attributionFromTransaction", + "writeAccess", + "validateInsert", + "applyInsert", + "updatedBy", + "__v", + "validateUpdate", + "applyUpdate", + "deletedBy", + "validateUpdateOrDelete", + "applyDelete", + "operations", + "attribution", + "recordPromises", + "operation", + "records", + "validateBatchTransaction", + "applyBatchTransaction", + "fileEncryptionKeyRaw", + "fileMetadata", + "fileVersion", + "fileName", + "fileSize", + "fileType", + "fileUploadedBy", + "validateUploadFile", + "applyUploadFile", + "timestamp", + "createdByUserId", + "updatedByUserId", + "getItemVersionNumber", + "validateAccessPermissions", + "getFileVersionNumber", + "modifiedByUserId", + "userIsAuthorized", + "onlyCreator", + "users", + "itemExists", + "existingFile", + "uniqueItemIds", + "registerUnverifiedTransaction", + "unverifiedTransaction", + "unregisterUnverifiedTransaction", + "pendingTransaction", + "prop", + "userDeleted", + "shareTokenEncryptionKey", + "_idempotentOpenDatabase", + "currentReceivedMessage", + "_getShareTokenIdFromShareToken", + "shareTokenArrayBuffer", + "shareTokenIdArrayBuffer", + "_openDatabaseByShareToken", + "shareToken", + "shareTokenIdAndShareTokenSeed", + "shareTokenResult", + "shareTokenSeed", + "_getShareTokenIdAndShareTokenSeed", + "_openDatabaseByDatabaseId", + "_openDatabase", + "firstMessageFromWebSocket", + "newDatabaseParams", + "_openDatabaseByNameHash", + "_validateEncryptionMode", + "_validateDbInput", + "dbName", + "_validateDbName", + "allowVerifiedUsersDatabase", + "_validateDbId", + "openDatabase", + "openByDbNameHashParams", + "encryptedDbKey", + "encryptedDbName", + "fingerprint", + "_getMyFingerprint", + "_createDatabase", + "openByDbIdParams", + "openByShareToken", + "getOpenDb", + "insertItem", + "insertParams", + "_buildInsertParams", + "postTransaction", + "itemString", + "MAX_ITEM_KB", + "itemRecord", + "itemKey", + "encryptedItem", + "updateItem", + "updateParams", + "_buildUpdateParams", + "_buildDeleteParams", + "pendingTx", + "paramsWithDbData", + "sequenceNo", + "getResult", + "_uploadChunk", + "bytesTransferredObject", + "progressHandler", + "plaintextChunk", + "reader", + "FileReader", + "readAsArrayBuffer", + "blob", + "_readBlob", + "chunkEncryptionKey", + "encryptedChunkEncryptionKey", + "encryptedChunk", + "uploadChunkParams", + "uploadChunkRequest", + "bytesTransferred", + "_uploadChunkRequest", + "_getChunk", + "chunkRawBuffer", + "chunkEncryptionKeyRawBuffer", + "chunkEncryptionKeyRaw", + "_verifyUsersParent", + "verifiedUsers", + "databaseUser", + "senderUsername", + "verificationValues", + "sentSignature", + "receivedSignature", + "senderEcdsaPublicKey", + "verifiedFingerprint", + "parentRawEcdsaPublicKey", + "parentFingerprint", + "_getFingerprint", + "parentEcdsaPublicKey", + "expectedSentSignature", + "_signFingerprintWithDbKey", + "verifiedParentSent", + "recipientEcdsaPublicKey", + "expectedReceivedSignature", + "verifiedReceivedFromParent", + "_verifyReceivedDatabaseFromUser", + "myFingerprint", + "myEcdsaPublicKey", + "mySentSignature", + "myReceivedSignature", + "verifiedReceived", + "mySenderEcdsaPublicKey", + "_verifySentDatabaseToUser", + "verifiedSent", + "_buildDatabaseUserResult", + "databaseUsers", + "myUsername", + "mySenderUsername", + "sentDatabaseToUser", + "isChild", + "receivedDatabaseFromUser", + "verified", + "verifiedReceivedDatabaseFromUser", + "verifiedGrandparent", + "verifiedUsersParent", + "receivedFromUsername", + "_buildDatabaseResult", + "databaseNameHash", + "readOnly", + "resharingAllowed", + "wrappedDbKey", + "senderRawEcdsaPublicKey", + "ephemeralPublicKey", + "signedEphemeralPublicKey", + "sharedEncryptedDbKey", + "senderEphemeralEcdhPublicKey", + "sharedKeyEncryptionKey", + "senderFingerprint", + "_signDbKeyAndFingerprint", + "databaseUsersResponse", + "nextPageTokenLessThanUserId", + "nextPageTokenMoreThanUserId", + "_getDatabaseUsers", + "_databaseHasOwner", + "_getDatabase", + "requestParams", + "rawDbKey", + "dbKeyHash", + "signedFingerprint", + "_getDatabaseEncryptionKey", + "_shareDatabaseWithUsername", + "requireVerified", + "recipientPublicKey", + "_openVerifiedUsersDatabase", + "recipientRawEcdsaPublicKey", + "recipientFingerprint", + "verifiedRecipientFingerprint", + "foundOldFingerprint", + "verifiedUsersArray", + "verifiedUsername", + "_verifyDatabaseRecipientFingerprint", + "recipientEcdhPublicKey", + "ephemeralEcdhKeyPair", + "rawEphemeralEcdhPublicKey", + "signedEphemeralEcdhPublicKey", + "sharedEncryptedDbKeyString", + "_validateDbSharingInput", + "ecdsaPublicKeyHash", + "ecdsaRawPublicKey", + "getDatabases", + "databasesResponse", + "databaseResults", + "nextPageToken", + "filter", + "deleteItem", + "deleteParams", + "putTransaction", + "operationParamsPromises", + "operationParamsPromiseResults", + "operationParams", + "uploadFile", + "_validateUploadFile", + "File", + "currentVersion", + "_buildFileMetadata", + "encryptedFileEncryptionKey", + "encryptedFileMetadata", + "_completeFileUpload", + "getFile", + "range", + "_validateGetFileParams", + "chunks", + "startChunkNumber", + "endChunkNumber", + "_getByteRange", + "finalChunkNumber", + "_getFile", + "shareDatabase", + "shareTokenEncryptedDbKeyString", + "keyData", + "shareTokenPublicKey", + "shareTokenResponse", + "_getShareToken", + "modifyDatabasePermissions", + "revoke", + "getVerificationMessage", + "verificationMessage", + "btoa", + "_packVerificationMessage", + "verifyUser", + "atob", + "_unpackVerificationMessage", + "_validatePurchaseOrUpdate", + "stripeAccountId", + "successUrl", + "successUrlProtocol", + "cancelUrl", + "cancelUrlProtocol", + "_validateModifySubscriptionConditions", + "purchaseSubscription", + "stripeSessionId", + "stripePk", + "Stripe", + "stripeAccount", + "redirectToCheckout", + "cancelSubscription", + "resumeSubscription", + "updatePaymentMethod" + ], + "mappings": "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", + "file": "userbase.js", + "sourcesContent": [ + " \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 27);\n", + "/*\n * base64-arraybuffer\n * https://github.com/niklasvh/base64-arraybuffer\n *\n * Copyright (c) 2012 Niklas von Hertzen\n * Licensed under the MIT license.\n */\n(function(){\n \"use strict\";\n\n var chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n\n // Use a lookup table to find the index.\n var lookup = new Uint8Array(256);\n for (var i = 0; i < chars.length; i++) {\n lookup[chars.charCodeAt(i)] = i;\n }\n\n exports.encode = function(arraybuffer) {\n var bytes = new Uint8Array(arraybuffer),\n i, len = bytes.length, base64 = \"\";\n\n for (i = 0; i < len; i+=3) {\n base64 += chars[bytes[i] >> 2];\n base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n base64 += chars[bytes[i + 2] & 63];\n }\n\n if ((len % 3) === 2) {\n base64 = base64.substring(0, base64.length - 1) + \"=\";\n } else if (len % 3 === 1) {\n base64 = base64.substring(0, base64.length - 2) + \"==\";\n }\n\n return base64;\n };\n\n exports.decode = function(base64) {\n var bufferLength = base64.length * 0.75,\n len = base64.length, i, p = 0,\n encoded1, encoded2, encoded3, encoded4;\n\n if (base64[base64.length - 1] === \"=\") {\n bufferLength--;\n if (base64[base64.length - 2] === \"=\") {\n bufferLength--;\n }\n }\n\n var arraybuffer = new ArrayBuffer(bufferLength),\n bytes = new Uint8Array(arraybuffer);\n\n for (i = 0; i < len; i+=4) {\n encoded1 = lookup[base64.charCodeAt(i)];\n encoded2 = lookup[base64.charCodeAt(i+1)];\n encoded3 = lookup[base64.charCodeAt(i+2)];\n encoded4 = lookup[base64.charCodeAt(i+3)];\n\n bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n }\n\n return arraybuffer;\n };\n})();\n", + "function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nmodule.exports = _defineProperty;", + "var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\n\nfunction v4(options, buf, offset) {\n var i = buf && offset || 0;\n\n if (typeof(options) == 'string') {\n buf = options === 'binary' ? new Array(16) : null;\n options = null;\n }\n options = options || {};\n\n var rnds = options.random || (options.rng || rng)();\n\n // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n\n // Copy bytes to buffer, if provided\n if (buf) {\n for (var ii = 0; ii < 16; ++ii) {\n buf[i + ii] = rnds[ii];\n }\n }\n\n return buf || bytesToUuid(rnds);\n}\n\nmodule.exports = v4;\n", + "var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n", + "/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <http://feross.org>\n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n return arr.foo() === 42 && // typed array instances can be augmented\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n } catch (e) {\n return false\n }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length)\n }\n that.length = length\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true\n })\n }\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n assertSize(size)\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n that = createBuffer(that, length)\n\n var actual = that.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual)\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n that = createBuffer(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array)\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset)\n } else {\n array = new Uint8Array(array, byteOffset, length)\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array)\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n that = createBuffer(that, len)\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len)\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return '<Buffer ' + str + '>'\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!Buffer.isBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start]\n }\n }\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString())\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n", + "(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n Buffer = require('buffer').Buffer;\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n }\n\n if (base === 16) {\n this._parseHex(number, start);\n } else {\n this._parseBase(number, base, start);\n }\n\n if (number[0] === '-') {\n this.negative = 1;\n }\n\n this.strip();\n\n if (endian !== 'le') return;\n\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex (str, start, end) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r <<= 4;\n\n // 'a' - 'f'\n if (c >= 49 && c <= 54) {\n r |= c - 49 + 0xa;\n\n // 'A' - 'F'\n } else if (c >= 17 && c <= 22) {\n r |= c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r |= c & 0xf;\n }\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n // Scan 24-bit chunks and add them to the number\n var off = 0;\n for (i = number.length - 6, j = 0; i >= start; i -= 6) {\n w = parseHex(number, i, i + 6);\n this.words[j] |= (w << off) & 0x3ffffff;\n // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb\n this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n if (i + 6 !== start) {\n w = parseHex(number, start, i + 6);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\n }\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n", + "var randomBytes = require('randombytes');\nmodule.exports = findPrime;\nfindPrime.simpleSieve = simpleSieve;\nfindPrime.fermatTest = fermatTest;\nvar BN = require('bn.js');\nvar TWENTYFOUR = new BN(24);\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar ONE = new BN(1);\nvar TWO = new BN(2);\nvar FIVE = new BN(5);\nvar SIXTEEN = new BN(16);\nvar EIGHT = new BN(8);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar ELEVEN = new BN(11);\nvar FOUR = new BN(4);\nvar TWELVE = new BN(12);\nvar primes = null;\n\nfunction _getPrimes() {\n if (primes !== null)\n return primes;\n\n var limit = 0x100000;\n var res = [];\n res[0] = 2;\n for (var i = 1, k = 3; k < limit; k += 2) {\n var sqrt = Math.ceil(Math.sqrt(k));\n for (var j = 0; j < i && res[j] <= sqrt; j++)\n if (k % res[j] === 0)\n break;\n\n if (i !== j && res[j] <= sqrt)\n continue;\n\n res[i++] = k;\n }\n primes = res;\n return res;\n}\n\nfunction simpleSieve(p) {\n var primes = _getPrimes();\n\n for (var i = 0; i < primes.length; i++)\n if (p.modn(primes[i]) === 0) {\n if (p.cmpn(primes[i]) === 0) {\n return true;\n } else {\n return false;\n }\n }\n\n return true;\n}\n\nfunction fermatTest(p) {\n var red = BN.mont(p);\n return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0;\n}\n\nfunction findPrime(bits, gen) {\n if (bits < 16) {\n // this is what openssl does\n if (gen === 2 || gen === 5) {\n return new BN([0x8c, 0x7b]);\n } else {\n return new BN([0x8c, 0x27]);\n }\n }\n gen = new BN(gen);\n\n var num, n2;\n\n while (true) {\n num = new BN(randomBytes(Math.ceil(bits / 8)));\n while (num.bitLength() > bits) {\n num.ishrn(1);\n }\n if (num.isEven()) {\n num.iadd(ONE);\n }\n if (!num.testn(1)) {\n num.iadd(TWO);\n }\n if (!gen.cmp(TWO)) {\n while (num.mod(TWENTYFOUR).cmp(ELEVEN)) {\n num.iadd(FOUR);\n }\n } else if (!gen.cmp(FIVE)) {\n while (num.mod(TEN).cmp(THREE)) {\n num.iadd(FOUR);\n }\n }\n n2 = num.shrn(1);\n if (simpleSieve(n2) && simpleSieve(num) &&\n fermatTest(n2) && fermatTest(num) &&\n millerRabin.test(n2) && millerRabin.test(num)) {\n return num;\n }\n }\n\n}\n", + "'use strict'\n\n// limit of Crypto.getRandomValues()\n// https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues\nvar MAX_BYTES = 65536\n\n// Node supports requesting up to this number of bytes\n// https://github.com/nodejs/node/blob/master/lib/internal/crypto/random.js#L48\nvar MAX_UINT32 = 4294967295\n\nfunction oldBrowser () {\n throw new Error('Secure random number generation is not supported by this browser.\\nUse Chrome, Firefox or Internet Explorer 11')\n}\n\nvar Buffer = require('safe-buffer').Buffer\nvar crypto = global.crypto || global.msCrypto\n\nif (crypto && crypto.getRandomValues) {\n module.exports = randomBytes\n} else {\n module.exports = oldBrowser\n}\n\nfunction randomBytes (size, cb) {\n // phantomjs needs to throw\n if (size > MAX_UINT32) throw new RangeError('requested too many random bytes')\n\n var bytes = Buffer.allocUnsafe(size)\n\n if (size > 0) { // getRandomValues fails on IE if size == 0\n if (size > MAX_BYTES) { // this is the max bytes crypto.getRandomValues\n // can do at once see https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues\n for (var generated = 0; generated < size; generated += MAX_BYTES) {\n // buffer.slice automatically checks if the end is past the end of\n // the buffer so we don't have to here\n crypto.getRandomValues(bytes.slice(generated, generated + MAX_BYTES))\n }\n } else {\n crypto.getRandomValues(bytes)\n }\n }\n\n if (typeof cb === 'function') {\n return process.nextTick(function () {\n cb(null, bytes)\n })\n }\n\n return bytes\n}\n", + "// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n", + "var bn = require('bn.js');\nvar brorand = require('brorand');\n\nfunction MillerRabin(rand) {\n this.rand = rand || new brorand.Rand();\n}\nmodule.exports = MillerRabin;\n\nMillerRabin.create = function create(rand) {\n return new MillerRabin(rand);\n};\n\nMillerRabin.prototype._randbelow = function _randbelow(n) {\n var len = n.bitLength();\n var min_bytes = Math.ceil(len / 8);\n\n // Generage random bytes until a number less than n is found.\n // This ensures that 0..n-1 have an equal probability of being selected.\n do\n var a = new bn(this.rand.generate(min_bytes));\n while (a.cmp(n) >= 0);\n\n return a;\n};\n\nMillerRabin.prototype._randrange = function _randrange(start, stop) {\n // Generate a random number greater than or equal to start and less than stop.\n var size = stop.sub(start);\n return start.add(this._randbelow(size));\n};\n\nMillerRabin.prototype.test = function test(n, k, cb) {\n var len = n.bitLength();\n var red = bn.mont(n);\n var rone = new bn(1).toRed(red);\n\n if (!k)\n k = Math.max(1, (len / 48) | 0);\n\n // Find d and s, (n - 1) = (2 ^ s) * d;\n var n1 = n.subn(1);\n for (var s = 0; !n1.testn(s); s++) {}\n var d = n.shrn(s);\n\n var rn1 = n1.toRed(red);\n\n var prime = true;\n for (; k > 0; k--) {\n var a = this._randrange(new bn(2), n1);\n if (cb)\n cb(a);\n\n var x = a.toRed(red).redPow(d);\n if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n continue;\n\n for (var i = 1; i < s; i++) {\n x = x.redSqr();\n\n if (x.cmp(rone) === 0)\n return false;\n if (x.cmp(rn1) === 0)\n break;\n }\n\n if (i === s)\n return false;\n }\n\n return prime;\n};\n\nMillerRabin.prototype.getDivisor = function getDivisor(n, k) {\n var len = n.bitLength();\n var red = bn.mont(n);\n var rone = new bn(1).toRed(red);\n\n if (!k)\n k = Math.max(1, (len / 48) | 0);\n\n // Find d and s, (n - 1) = (2 ^ s) * d;\n var n1 = n.subn(1);\n for (var s = 0; !n1.testn(s); s++) {}\n var d = n.shrn(s);\n\n var rn1 = n1.toRed(red);\n\n for (; k > 0; k--) {\n var a = this._randrange(new bn(2), n1);\n\n var g = n.gcd(a);\n if (g.cmpn(1) !== 0)\n return g;\n\n var x = a.toRed(red).redPow(d);\n if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n continue;\n\n for (var i = 1; i < s; i++) {\n x = x.redSqr();\n\n if (x.cmp(rone) === 0)\n return x.fromRed().subn(1).gcd(n);\n if (x.cmp(rn1) === 0)\n break;\n }\n\n if (i === s) {\n x = x.redSqr();\n return x.fromRed().subn(1).gcd(n);\n }\n }\n\n return false;\n};\n", + "var generatePrime = require('./lib/generatePrime')\nvar primes = require('./lib/primes.json')\n\nvar DH = require('./lib/dh')\n\nfunction getDiffieHellman (mod) {\n var prime = new Buffer(primes[mod].prime, 'hex')\n var gen = new Buffer(primes[mod].gen, 'hex')\n\n return new DH(prime, gen)\n}\n\nvar ENCODINGS = {\n 'binary': true, 'hex': true, 'base64': true\n}\n\nfunction createDiffieHellman (prime, enc, generator, genc) {\n if (Buffer.isBuffer(enc) || ENCODINGS[enc] === undefined) {\n return createDiffieHellman(prime, 'binary', enc, generator)\n }\n\n enc = enc || 'binary'\n genc = genc || 'binary'\n generator = generator || new Buffer([2])\n\n if (!Buffer.isBuffer(generator)) {\n generator = new Buffer(generator, genc)\n }\n\n if (typeof prime === 'number') {\n return new DH(generatePrime(prime, generator), generator, true)\n }\n\n if (!Buffer.isBuffer(prime)) {\n prime = new Buffer(prime, enc)\n }\n\n return new DH(prime, generator, true)\n}\n\nexports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffieHellman = getDiffieHellman\nexports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman\n", + "\"use strict\";\n\n(function(root) {\n const MAX_VALUE = 0x7fffffff;\n\n // The SHA256 and PBKDF2 implementation are from scrypt-async-js:\n // See: https://github.com/dchest/scrypt-async-js\n function SHA256(m) {\n const K = new Uint32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b,\n 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01,\n 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7,\n 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152,\n 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,\n 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc,\n 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819,\n 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08,\n 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f,\n 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n ]);\n\n let h0 = 0x6a09e667, h1 = 0xbb67ae85, h2 = 0x3c6ef372, h3 = 0xa54ff53a;\n let h4 = 0x510e527f, h5 = 0x9b05688c, h6 = 0x1f83d9ab, h7 = 0x5be0cd19;\n const w = new Uint32Array(64);\n\n function blocks(p) {\n let off = 0, len = p.length;\n while (len >= 64) {\n let a = h0, b = h1, c = h2, d = h3, e = h4, f = h5, g = h6, h = h7, u, i, j, t1, t2;\n\n for (i = 0; i < 16; i++) {\n j = off + i*4;\n w[i] = ((p[j] & 0xff)<<24) | ((p[j+1] & 0xff)<<16) |\n ((p[j+2] & 0xff)<<8) | (p[j+3] & 0xff);\n }\n\n for (i = 16; i < 64; i++) {\n u = w[i-2];\n t1 = ((u>>>17) | (u<<(32-17))) ^ ((u>>>19) | (u<<(32-19))) ^ (u>>>10);\n\n u = w[i-15];\n t2 = ((u>>>7) | (u<<(32-7))) ^ ((u>>>18) | (u<<(32-18))) ^ (u>>>3);\n\n w[i] = (((t1 + w[i-7]) | 0) + ((t2 + w[i-16]) | 0)) | 0;\n }\n\n for (i = 0; i < 64; i++) {\n t1 = ((((((e>>>6) | (e<<(32-6))) ^ ((e>>>11) | (e<<(32-11))) ^\n ((e>>>25) | (e<<(32-25)))) + ((e & f) ^ (~e & g))) | 0) +\n ((h + ((K[i] + w[i]) | 0)) | 0)) | 0;\n\n t2 = ((((a>>>2) | (a<<(32-2))) ^ ((a>>>13) | (a<<(32-13))) ^\n ((a>>>22) | (a<<(32-22)))) + ((a & b) ^ (a & c) ^ (b & c))) | 0;\n\n h = g;\n g = f;\n f = e;\n e = (d + t1) | 0;\n d = c;\n c = b;\n b = a;\n a = (t1 + t2) | 0;\n }\n\n h0 = (h0 + a) | 0;\n h1 = (h1 + b) | 0;\n h2 = (h2 + c) | 0;\n h3 = (h3 + d) | 0;\n h4 = (h4 + e) | 0;\n h5 = (h5 + f) | 0;\n h6 = (h6 + g) | 0;\n h7 = (h7 + h) | 0;\n\n off += 64;\n len -= 64;\n }\n }\n\n blocks(m);\n\n let i, bytesLeft = m.length % 64,\n bitLenHi = (m.length / 0x20000000) | 0,\n bitLenLo = m.length << 3,\n numZeros = (bytesLeft < 56) ? 56 : 120,\n p = m.slice(m.length - bytesLeft, m.length);\n\n p.push(0x80);\n for (i = bytesLeft + 1; i < numZeros; i++) { p.push(0); }\n p.push((bitLenHi >>> 24) & 0xff);\n p.push((bitLenHi >>> 16) & 0xff);\n p.push((bitLenHi >>> 8) & 0xff);\n p.push((bitLenHi >>> 0) & 0xff);\n p.push((bitLenLo >>> 24) & 0xff);\n p.push((bitLenLo >>> 16) & 0xff);\n p.push((bitLenLo >>> 8) & 0xff);\n p.push((bitLenLo >>> 0) & 0xff);\n\n blocks(p);\n\n return [\n (h0 >>> 24) & 0xff, (h0 >>> 16) & 0xff, (h0 >>> 8) & 0xff, (h0 >>> 0) & 0xff,\n (h1 >>> 24) & 0xff, (h1 >>> 16) & 0xff, (h1 >>> 8) & 0xff, (h1 >>> 0) & 0xff,\n (h2 >>> 24) & 0xff, (h2 >>> 16) & 0xff, (h2 >>> 8) & 0xff, (h2 >>> 0) & 0xff,\n (h3 >>> 24) & 0xff, (h3 >>> 16) & 0xff, (h3 >>> 8) & 0xff, (h3 >>> 0) & 0xff,\n (h4 >>> 24) & 0xff, (h4 >>> 16) & 0xff, (h4 >>> 8) & 0xff, (h4 >>> 0) & 0xff,\n (h5 >>> 24) & 0xff, (h5 >>> 16) & 0xff, (h5 >>> 8) & 0xff, (h5 >>> 0) & 0xff,\n (h6 >>> 24) & 0xff, (h6 >>> 16) & 0xff, (h6 >>> 8) & 0xff, (h6 >>> 0) & 0xff,\n (h7 >>> 24) & 0xff, (h7 >>> 16) & 0xff, (h7 >>> 8) & 0xff, (h7 >>> 0) & 0xff\n ];\n }\n\n function PBKDF2_HMAC_SHA256_OneIter(password, salt, dkLen) {\n // compress password if it's longer than hash block length\n password = (password.length <= 64) ? password : SHA256(password);\n\n const innerLen = 64 + salt.length + 4;\n const inner = new Array(innerLen);\n const outerKey = new Array(64);\n\n let i;\n let dk = [];\n\n // inner = (password ^ ipad) || salt || counter\n for (i = 0; i < 64; i++) { inner[i] = 0x36; }\n for (i = 0; i < password.length; i++) { inner[i] ^= password[i]; }\n for (i = 0; i < salt.length; i++) { inner[64 + i] = salt[i]; }\n for (i = innerLen - 4; i < innerLen; i++) { inner[i] = 0; }\n\n // outerKey = password ^ opad\n for (i = 0; i < 64; i++) outerKey[i] = 0x5c;\n for (i = 0; i < password.length; i++) outerKey[i] ^= password[i];\n\n // increments counter inside inner\n function incrementCounter() {\n for (let i = innerLen - 1; i >= innerLen - 4; i--) {\n inner[i]++;\n if (inner[i] <= 0xff) return;\n inner[i] = 0;\n }\n }\n\n // output blocks = SHA256(outerKey || SHA256(inner)) ...\n while (dkLen >= 32) {\n incrementCounter();\n dk = dk.concat(SHA256(outerKey.concat(SHA256(inner))));\n dkLen -= 32;\n }\n if (dkLen > 0) {\n incrementCounter();\n dk = dk.concat(SHA256(outerKey.concat(SHA256(inner))).slice(0, dkLen));\n }\n\n return dk;\n }\n\n // The following is an adaptation of scryptsy\n // See: https://www.npmjs.com/package/scryptsy\n function blockmix_salsa8(BY, Yi, r, x, _X) {\n let i;\n\n arraycopy(BY, (2 * r - 1) * 16, _X, 0, 16);\n for (i = 0; i < 2 * r; i++) {\n blockxor(BY, i * 16, _X, 16);\n salsa20_8(_X, x);\n arraycopy(_X, 0, BY, Yi + (i * 16), 16);\n }\n\n for (i = 0; i < r; i++) {\n arraycopy(BY, Yi + (i * 2) * 16, BY, (i * 16), 16);\n }\n\n for (i = 0; i < r; i++) {\n arraycopy(BY, Yi + (i * 2 + 1) * 16, BY, (i + r) * 16, 16);\n }\n }\n\n function R(a, b) {\n return (a << b) | (a >>> (32 - b));\n }\n\n function salsa20_8(B, x) {\n arraycopy(B, 0, x, 0, 16);\n\n for (let i = 8; i > 0; i -= 2) {\n x[ 4] ^= R(x[ 0] + x[12], 7);\n x[ 8] ^= R(x[ 4] + x[ 0], 9);\n x[12] ^= R(x[ 8] + x[ 4], 13);\n x[ 0] ^= R(x[12] + x[ 8], 18);\n x[ 9] ^= R(x[ 5] + x[ 1], 7);\n x[13] ^= R(x[ 9] + x[ 5], 9);\n x[ 1] ^= R(x[13] + x[ 9], 13);\n x[ 5] ^= R(x[ 1] + x[13], 18);\n x[14] ^= R(x[10] + x[ 6], 7);\n x[ 2] ^= R(x[14] + x[10], 9);\n x[ 6] ^= R(x[ 2] + x[14], 13);\n x[10] ^= R(x[ 6] + x[ 2], 18);\n x[ 3] ^= R(x[15] + x[11], 7);\n x[ 7] ^= R(x[ 3] + x[15], 9);\n x[11] ^= R(x[ 7] + x[ 3], 13);\n x[15] ^= R(x[11] + x[ 7], 18);\n x[ 1] ^= R(x[ 0] + x[ 3], 7);\n x[ 2] ^= R(x[ 1] + x[ 0], 9);\n x[ 3] ^= R(x[ 2] + x[ 1], 13);\n x[ 0] ^= R(x[ 3] + x[ 2], 18);\n x[ 6] ^= R(x[ 5] + x[ 4], 7);\n x[ 7] ^= R(x[ 6] + x[ 5], 9);\n x[ 4] ^= R(x[ 7] + x[ 6], 13);\n x[ 5] ^= R(x[ 4] + x[ 7], 18);\n x[11] ^= R(x[10] + x[ 9], 7);\n x[ 8] ^= R(x[11] + x[10], 9);\n x[ 9] ^= R(x[ 8] + x[11], 13);\n x[10] ^= R(x[ 9] + x[ 8], 18);\n x[12] ^= R(x[15] + x[14], 7);\n x[13] ^= R(x[12] + x[15], 9);\n x[14] ^= R(x[13] + x[12], 13);\n x[15] ^= R(x[14] + x[13], 18);\n }\n\n for (let i = 0; i < 16; ++i) {\n B[i] += x[i];\n }\n }\n\n // naive approach... going back to loop unrolling may yield additional performance\n function blockxor(S, Si, D, len) {\n for (let i = 0; i < len; i++) {\n D[i] ^= S[Si + i]\n }\n }\n\n function arraycopy(src, srcPos, dest, destPos, length) {\n while (length--) {\n dest[destPos++] = src[srcPos++];\n }\n }\n\n function checkBufferish(o) {\n if (!o || typeof(o.length) !== 'number') { return false; }\n\n for (let i = 0; i < o.length; i++) {\n const v = o[i];\n if (typeof(v) !== 'number' || v % 1 || v < 0 || v >= 256) {\n return false;\n }\n }\n\n return true;\n }\n\n function ensureInteger(value, name) {\n if (typeof(value) !== \"number\" || (value % 1)) { throw new Error('invalid ' + name); }\n return value;\n }\n\n // N = Cpu cost, r = Memory cost, p = parallelization cost\n // callback(error, progress, key)\n function _scrypt(password, salt, N, r, p, dkLen, callback) {\n\n N = ensureInteger(N, 'N');\n r = ensureInteger(r, 'r');\n p = ensureInteger(p, 'p');\n\n dkLen = ensureInteger(dkLen, 'dkLen');\n\n if (N === 0 || (N & (N - 1)) !== 0) { throw new Error('N must be power of 2'); }\n\n if (N > MAX_VALUE / 128 / r) { throw new Error('N too large'); }\n if (r > MAX_VALUE / 128 / p) { throw new Error('r too large'); }\n\n if (!checkBufferish(password)) {\n throw new Error('password must be an array or buffer');\n }\n password = Array.prototype.slice.call(password);\n\n if (!checkBufferish(salt)) {\n throw new Error('salt must be an array or buffer');\n }\n salt = Array.prototype.slice.call(salt);\n\n let b = PBKDF2_HMAC_SHA256_OneIter(password, salt, p * 128 * r);\n const B = new Uint32Array(p * 32 * r)\n for (let i = 0; i < B.length; i++) {\n const j = i * 4;\n B[i] = ((b[j + 3] & 0xff) << 24) |\n ((b[j + 2] & 0xff) << 16) |\n ((b[j + 1] & 0xff) << 8) |\n ((b[j + 0] & 0xff) << 0);\n }\n\n const XY = new Uint32Array(64 * r);\n const V = new Uint32Array(32 * r * N);\n\n const Yi = 32 * r;\n\n // scratch space\n const x = new Uint32Array(16); // salsa20_8\n const _X = new Uint32Array(16); // blockmix_salsa8\n\n const totalOps = p * N * 2;\n let currentOp = 0;\n let lastPercent10 = null;\n\n // Set this to true to abandon the scrypt on the next step\n let stop = false;\n\n // State information\n let state = 0;\n let i0 = 0, i1;\n let Bi;\n\n // How many blockmix_salsa8 can we do per step?\n const limit = callback ? parseInt(1000 / r): 0xffffffff;\n\n // Trick from scrypt-async; if there is a setImmediate shim in place, use it\n const nextTick = (typeof(setImmediate) !== 'undefined') ? setImmediate : setTimeout;\n\n // This is really all I changed; making scryptsy a state machine so we occasionally\n // stop and give other evnts on the evnt loop a chance to run. ~RicMoo\n const incrementalSMix = function() {\n if (stop) {\n return callback(new Error('cancelled'), currentOp / totalOps);\n }\n\n let steps;\n\n switch (state) {\n case 0:\n // for (var i = 0; i < p; i++)...\n Bi = i0 * 32 * r;\n\n arraycopy(B, Bi, XY, 0, Yi); // ROMix - 1\n\n state = 1; // Move to ROMix 2\n i1 = 0;\n\n // Fall through\n\n case 1:\n\n // Run up to 1000 steps of the first inner smix loop\n steps = N - i1;\n if (steps > limit) { steps = limit; }\n for (let i = 0; i < steps; i++) { // ROMix - 2\n arraycopy(XY, 0, V, (i1 + i) * Yi, Yi) // ROMix - 3\n blockmix_salsa8(XY, Yi, r, x, _X); // ROMix - 4\n }\n\n // for (var i = 0; i < N; i++)\n i1 += steps;\n currentOp += steps;\n\n if (callback) {\n // Call the callback with the progress (optionally stopping us)\n const percent10 = parseInt(1000 * currentOp / totalOps);\n if (percent10 !== lastPercent10) {\n stop = callback(null, currentOp / totalOps);\n if (stop) { break; }\n lastPercent10 = percent10;\n }\n }\n\n if (i1 < N) { break; }\n\n i1 = 0; // Move to ROMix 6\n state = 2;\n\n // Fall through\n\n case 2:\n\n // Run up to 1000 steps of the second inner smix loop\n steps = N - i1;\n if (steps > limit) { steps = limit; }\n for (let i = 0; i < steps; i++) { // ROMix - 6\n const offset = (2 * r - 1) * 16; // ROMix - 7\n const j = XY[offset] & (N - 1);\n blockxor(V, j * Yi, XY, Yi); // ROMix - 8 (inner)\n blockmix_salsa8(XY, Yi, r, x, _X); // ROMix - 9 (outer)\n }\n\n // for (var i = 0; i < N; i++)...\n i1 += steps;\n currentOp += steps;\n\n // Call the callback with the progress (optionally stopping us)\n if (callback) {\n const percent10 = parseInt(1000 * currentOp / totalOps);\n if (percent10 !== lastPercent10) {\n stop = callback(null, currentOp / totalOps);\n if (stop) { break; }\n lastPercent10 = percent10;\n }\n }\n\n if (i1 < N) { break; }\n\n arraycopy(XY, 0, B, Bi, Yi); // ROMix - 10\n\n // for (var i = 0; i < p; i++)...\n i0++;\n if (i0 < p) {\n state = 0;\n break;\n }\n\n b = [];\n for (let i = 0; i < B.length; i++) {\n b.push((B[i] >> 0) & 0xff);\n b.push((B[i] >> 8) & 0xff);\n b.push((B[i] >> 16) & 0xff);\n b.push((B[i] >> 24) & 0xff);\n }\n\n const derivedKey = PBKDF2_HMAC_SHA256_OneIter(password, b, dkLen);\n\n // Send the result to the callback\n if (callback) { callback(null, 1.0, derivedKey); }\n\n // Done; don't break (which would reschedule)\n return derivedKey;\n }\n\n // Schedule the next steps\n if (callback) { nextTick(incrementalSMix); }\n }\n\n // Run the smix state machine until completion\n if (!callback) {\n while (true) {\n const derivedKey = incrementalSMix();\n if (derivedKey != undefined) { return derivedKey; }\n }\n }\n\n // Bootstrap the async incremental smix\n incrementalSMix();\n }\n\n const lib = {\n scrypt: function(password, salt, N, r, p, dkLen, progressCallback) {\n return new Promise(function(resolve, reject) {\n let lastProgress = 0;\n if (progressCallback) { progressCallback(0); }\n _scrypt(password, salt, N, r, p, dkLen, function(error, progress, key) {\n if (error) {\n reject(error);\n } else if (key) {\n if (progressCallback && lastProgress !== 1) {\n progressCallback(1);\n }\n resolve(new Uint8Array(key));\n } else if (progressCallback && progress !== lastProgress) {\n lastProgress = progress;\n return progressCallback(progress);\n }\n });\n });\n },\n syncScrypt: function(password, salt, N, r, p, dkLen) {\n return new Uint8Array(_scrypt(password, salt, N, r, p, dkLen));\n }\n };\n\n // node.js\n if (typeof(exports) !== 'undefined') {\n module.exports = lib;\n\n // RequireJS/AMD\n // http://www.requirejs.org/docs/api.html\n // https://github.com/amdjs/amdjs-api/wiki/AMD\n } else if (typeof(define) === 'function' && define.amd) {\n define(lib);\n\n // Web Browsers\n } else if (root) {\n\n // If there was an existing library \"scrypt\", make sure it is still available\n if (root.scrypt) {\n root._scrypt = root.scrypt;\n }\n\n root.scrypt = lib;\n }\n\n})(this);\n", + "var SortedArray = (function () {\n var SortedArray = defclass({\n\n constructor: function (array, compare) {\n this.array = [];\n this.compare = compare || compareDefault;\n var length = array.length,\n index = 0;\n while (index < length) this.insert(array[index++]);\n },\n insert: function (element) {\n var array = this.array,\n compare = this.compare,\n high = array.length-1,\n low = 0,\n pos = -1,\n index,\n ordering;\n\n // The array is sorted. You must find the position of new element in O(log(n)), not O(n).\n while (high >= low) {\n index = (high + low) / 2 >>> 0;\n ordering = compare(array[index], element); \n if (ordering < 0) low = index + 1;\n else if (ordering > 0) high = index - 1;\n else {\n pos = index;\n break;\n };\n }\n\n if (pos === -1) {\n // if element was not found, high < low.\n pos = high;\n }\n // This assures that equal elements inserted after will be in a higher position in array.\n // They can be equal for comparison purposes, but different objects with different data.\n // Respecting the chronological order can be important for many applications.\n pos++;\n high = array.length-1;\n while ((pos < high) && (compare(element, array[pos]) === 0)){\n pos++;\n }\n index = array.length;\n // Just to increase array size.\n array.push(element); \n // Much faster. No need to elements swap.\n while (index > pos) {\n array[index] = array[--index];\n }\n // Set the new element on its correct position.\n array[pos] = element;\n\n return this;\n },\n search: function (element) {\n var array = this.array,\n compare = this.compare,\n high = array.length-1,\n low = 0,\n // In most languages, inner variable declaration makes the code slower.\n index,\n ordering;\n\n while (high >= low) {\n index = (high + low) / 2 >>> 0;\n ordering = compare(array[index], element);\n\n if (ordering < 0) low = index + 1;\n else if (ordering > 0) high = index - 1;\n else return index;\n }\n\n return -1;\n },\n remove: function (element) {\n var index = this.search(element);\n if (index >= 0) this.array.splice(index, 1);\n return this;\n }\n });\n\n SortedArray.comparing = function (property, array) {\n return new SortedArray(array, function (a, b) {\n // This should be faster than calling functions.\n // Besides, this way it is not needed to create useless function to return property value.\n return compareDefault(a[property], b[property]);\n });\n };\n\n return SortedArray;\n\n function defclass(prototype) {\n var constructor = prototype.constructor;\n constructor.prototype = prototype;\n return constructor;\n }\n\n function compareDefault(a, b) {\n // Equality has a very low chance to happen. It should be the last option.\n if (a < b)\n return -1;\n else if (a > b)\n return 1;\n else\n return 0;\n }\n}());\n\nif (typeof module === \"object\") module.exports = SortedArray;\nif (typeof define === \"function\" && define.amd)\n define(function () { return SortedArray; });\n", + "// Unique ID creation requires a high quality random # generator. In the\n// browser this is a little complicated due to unknown quality of Math.random()\n// and inconsistent support for the `crypto` API. We do the best we can via\n// feature-detection\n\n// getRandomValues needs to be invoked in a context where \"this\" is a Crypto\n// implementation. Also, find the complete implementation of crypto on IE11.\nvar getRandomValues = (typeof(crypto) != 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto)) ||\n (typeof(msCrypto) != 'undefined' && typeof window.msCrypto.getRandomValues == 'function' && msCrypto.getRandomValues.bind(msCrypto));\n\nif (getRandomValues) {\n // WHATWG crypto RNG - http://wiki.whatwg.org/wiki/Crypto\n var rnds8 = new Uint8Array(16); // eslint-disable-line no-undef\n\n module.exports = function whatwgRNG() {\n getRandomValues(rnds8);\n return rnds8;\n };\n} else {\n // Math.random()-based (RNG)\n //\n // If all else fails, use Math.random(). It's fast, but is of unspecified\n // quality.\n var rnds = new Array(16);\n\n module.exports = function mathRNG() {\n for (var i = 0, r; i < 16; i++) {\n if ((i & 0x03) === 0) r = Math.random() * 0x100000000;\n rnds[i] = r >>> ((i & 0x03) << 3) & 0xff;\n }\n\n return rnds;\n };\n}\n", + "/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nvar byteToHex = [];\nfor (var i = 0; i < 256; ++i) {\n byteToHex[i] = (i + 0x100).toString(16).substr(1);\n}\n\nfunction bytesToUuid(buf, offset) {\n var i = offset || 0;\n var bth = byteToHex;\n // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4\n return ([\n bth[buf[i++]], bth[buf[i++]],\n bth[buf[i++]], bth[buf[i++]], '-',\n bth[buf[i++]], bth[buf[i++]], '-',\n bth[buf[i++]], bth[buf[i++]], '-',\n bth[buf[i++]], bth[buf[i++]], '-',\n bth[buf[i++]], bth[buf[i++]],\n bth[buf[i++]], bth[buf[i++]],\n bth[buf[i++]], bth[buf[i++]]\n ]).join('');\n}\n\nmodule.exports = bytesToUuid;\n", + "'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n", + "/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n", + "var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n", + "/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n", + "module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n", + "var r;\n\nmodule.exports = function rand(len) {\n if (!r)\n r = new Rand(null);\n\n return r.generate(len);\n};\n\nfunction Rand(rand) {\n this.rand = rand;\n}\nmodule.exports.Rand = Rand;\n\nRand.prototype.generate = function generate(len) {\n return this._rand(len);\n};\n\n// Emulate crypto API using randy\nRand.prototype._rand = function _rand(n) {\n if (this.rand.getBytes)\n return this.rand.getBytes(n);\n\n var res = new Uint8Array(n);\n for (var i = 0; i < res.length; i++)\n res[i] = this.rand.getByte();\n return res;\n};\n\nif (typeof self === 'object') {\n if (self.crypto && self.crypto.getRandomValues) {\n // Modern browsers\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.crypto.getRandomValues(arr);\n return arr;\n };\n } else if (self.msCrypto && self.msCrypto.getRandomValues) {\n // IE\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.msCrypto.getRandomValues(arr);\n return arr;\n };\n\n // Safari's WebWorkers do not have `crypto`\n } else if (typeof window === 'object') {\n // Old junk\n Rand.prototype._rand = function() {\n throw new Error('Not implemented yet');\n };\n }\n} else {\n // Node.js or Web worker with no crypto support\n try {\n var crypto = require('crypto');\n if (typeof crypto.randomBytes !== 'function')\n throw new Error('Not supported');\n\n Rand.prototype._rand = function _rand(n) {\n return crypto.randomBytes(n);\n };\n } catch (e) {\n }\n}\n", + "var BN = require('bn.js');\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar TWENTYFOUR = new BN(24);\nvar ELEVEN = new BN(11);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar primes = require('./generatePrime');\nvar randomBytes = require('randombytes');\nmodule.exports = DH;\n\nfunction setPublicKey(pub, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(pub)) {\n pub = new Buffer(pub, enc);\n }\n this._pub = new BN(pub);\n return this;\n}\n\nfunction setPrivateKey(priv, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(priv)) {\n priv = new Buffer(priv, enc);\n }\n this._priv = new BN(priv);\n return this;\n}\n\nvar primeCache = {};\nfunction checkPrime(prime, generator) {\n var gen = generator.toString('hex');\n var hex = [gen, prime.toString(16)].join('_');\n if (hex in primeCache) {\n return primeCache[hex];\n }\n var error = 0;\n\n if (prime.isEven() ||\n !primes.simpleSieve ||\n !primes.fermatTest(prime) ||\n !millerRabin.test(prime)) {\n //not a prime so +1\n error += 1;\n\n if (gen === '02' || gen === '05') {\n // we'd be able to check the generator\n // it would fail so +8\n error += 8;\n } else {\n //we wouldn't be able to test the generator\n // so +4\n error += 4;\n }\n primeCache[hex] = error;\n return error;\n }\n if (!millerRabin.test(prime.shrn(1))) {\n //not a safe prime\n error += 2;\n }\n var rem;\n switch (gen) {\n case '02':\n if (prime.mod(TWENTYFOUR).cmp(ELEVEN)) {\n // unsuidable generator\n error += 8;\n }\n break;\n case '05':\n rem = prime.mod(TEN);\n if (rem.cmp(THREE) && rem.cmp(SEVEN)) {\n // prime mod 10 needs to equal 3 or 7\n error += 8;\n }\n break;\n default:\n error += 4;\n }\n primeCache[hex] = error;\n return error;\n}\n\nfunction DH(prime, generator, malleable) {\n this.setGenerator(generator);\n this.__prime = new BN(prime);\n this._prime = BN.mont(this.__prime);\n this._primeLen = prime.length;\n this._pub = undefined;\n this._priv = undefined;\n this._primeCode = undefined;\n if (malleable) {\n this.setPublicKey = setPublicKey;\n this.setPrivateKey = setPrivateKey;\n } else {\n this._primeCode = 8;\n }\n}\nObject.defineProperty(DH.prototype, 'verifyError', {\n enumerable: true,\n get: function () {\n if (typeof this._primeCode !== 'number') {\n this._primeCode = checkPrime(this.__prime, this.__gen);\n }\n return this._primeCode;\n }\n});\nDH.prototype.generateKeys = function () {\n if (!this._priv) {\n this._priv = new BN(randomBytes(this._primeLen));\n }\n this._pub = this._gen.toRed(this._prime).redPow(this._priv).fromRed();\n return this.getPublicKey();\n};\n\nDH.prototype.computeSecret = function (other) {\n other = new BN(other);\n other = other.toRed(this._prime);\n var secret = other.redPow(this._priv).fromRed();\n var out = new Buffer(secret.toArray());\n var prime = this.getPrime();\n if (out.length < prime.length) {\n var front = new Buffer(prime.length - out.length);\n front.fill(0);\n out = Buffer.concat([front, out]);\n }\n return out;\n};\n\nDH.prototype.getPublicKey = function getPublicKey(enc) {\n return formatReturnValue(this._pub, enc);\n};\n\nDH.prototype.getPrivateKey = function getPrivateKey(enc) {\n return formatReturnValue(this._priv, enc);\n};\n\nDH.prototype.getPrime = function (enc) {\n return formatReturnValue(this.__prime, enc);\n};\n\nDH.prototype.getGenerator = function (enc) {\n return formatReturnValue(this._gen, enc);\n};\n\nDH.prototype.setGenerator = function (gen, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(gen)) {\n gen = new Buffer(gen, enc);\n }\n this.__gen = gen;\n this._gen = new BN(gen);\n return this;\n};\n\nfunction formatReturnValue(bn, enc) {\n var buf = new Buffer(bn.toArray());\n if (!enc) {\n return buf;\n } else {\n return buf.toString(enc);\n }\n}\n", + "var scope = (typeof global !== \"undefined\" && global) ||\n (typeof self !== \"undefined\" && self) ||\n window;\nvar apply = Function.prototype.apply;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n return new Timeout(apply.call(setInterval, scope, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) {\n if (timeout) {\n timeout.close();\n }\n};\n\nfunction Timeout(id, clearFn) {\n this._id = id;\n this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n this._clearFn.call(scope, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n clearTimeout(item._idleTimeoutId);\n\n var msecs = item._idleTimeout;\n if (msecs >= 0) {\n item._idleTimeoutId = setTimeout(function onTimeout() {\n if (item._onTimeout)\n item._onTimeout();\n }, msecs);\n }\n};\n\n// setimmediate attaches itself to the global object\nrequire(\"setimmediate\");\n// On some exotic environments, it's not clear which object `setimmediate` was\n// able to install onto. Search each possibility in the same order as the\n// `setimmediate` library.\nexports.setImmediate = (typeof self !== \"undefined\" && self.setImmediate) ||\n (typeof global !== \"undefined\" && global.setImmediate) ||\n (this && this.setImmediate);\nexports.clearImmediate = (typeof self !== \"undefined\" && self.clearImmediate) ||\n (typeof global !== \"undefined\" && global.clearImmediate) ||\n (this && this.clearImmediate);\n", + "(function (global, undefined) {\n \"use strict\";\n\n if (global.setImmediate) {\n return;\n }\n\n var nextHandle = 1; // Spec says greater than zero\n var tasksByHandle = {};\n var currentlyRunningATask = false;\n var doc = global.document;\n var registerImmediate;\n\n function setImmediate(callback) {\n // Callback can either be a function or a string\n if (typeof callback !== \"function\") {\n callback = new Function(\"\" + callback);\n }\n // Copy function arguments\n var args = new Array(arguments.length - 1);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i + 1];\n }\n // Store and register the task\n var task = { callback: callback, args: args };\n tasksByHandle[nextHandle] = task;\n registerImmediate(nextHandle);\n return nextHandle++;\n }\n\n function clearImmediate(handle) {\n delete tasksByHandle[handle];\n }\n\n function run(task) {\n var callback = task.callback;\n var args = task.args;\n switch (args.length) {\n case 0:\n callback();\n break;\n case 1:\n callback(args[0]);\n break;\n case 2:\n callback(args[0], args[1]);\n break;\n case 3:\n callback(args[0], args[1], args[2]);\n break;\n default:\n callback.apply(undefined, args);\n break;\n }\n }\n\n function runIfPresent(handle) {\n // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n // So if we're currently running a task, we'll need to delay this invocation.\n if (currentlyRunningATask) {\n // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n // \"too much recursion\" error.\n setTimeout(runIfPresent, 0, handle);\n } else {\n var task = tasksByHandle[handle];\n if (task) {\n currentlyRunningATask = true;\n try {\n run(task);\n } finally {\n clearImmediate(handle);\n currentlyRunningATask = false;\n }\n }\n }\n }\n\n function installNextTickImplementation() {\n registerImmediate = function(handle) {\n process.nextTick(function () { runIfPresent(handle); });\n };\n }\n\n function canUsePostMessage() {\n // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n // where `global.postMessage` means something completely different and can't be used for this purpose.\n if (global.postMessage && !global.importScripts) {\n var postMessageIsAsynchronous = true;\n var oldOnMessage = global.onmessage;\n global.onmessage = function() {\n postMessageIsAsynchronous = false;\n };\n global.postMessage(\"\", \"*\");\n global.onmessage = oldOnMessage;\n return postMessageIsAsynchronous;\n }\n }\n\n function installPostMessageImplementation() {\n // Installs an event handler on `global` for the `message` event: see\n // * https://developer.mozilla.org/en/DOM/window.postMessage\n // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n\n var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n var onGlobalMessage = function(event) {\n if (event.source === global &&\n typeof event.data === \"string\" &&\n event.data.indexOf(messagePrefix) === 0) {\n runIfPresent(+event.data.slice(messagePrefix.length));\n }\n };\n\n if (global.addEventListener) {\n global.addEventListener(\"message\", onGlobalMessage, false);\n } else {\n global.attachEvent(\"onmessage\", onGlobalMessage);\n }\n\n registerImmediate = function(handle) {\n global.postMessage(messagePrefix + handle, \"*\");\n };\n }\n\n function installMessageChannelImplementation() {\n var channel = new MessageChannel();\n channel.port1.onmessage = function(event) {\n var handle = event.data;\n runIfPresent(handle);\n };\n\n registerImmediate = function(handle) {\n channel.port2.postMessage(handle);\n };\n }\n\n function installReadyStateChangeImplementation() {\n var html = doc.documentElement;\n registerImmediate = function(handle) {\n // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n var script = doc.createElement(\"script\");\n script.onreadystatechange = function () {\n runIfPresent(handle);\n script.onreadystatechange = null;\n html.removeChild(script);\n script = null;\n };\n html.appendChild(script);\n };\n }\n\n function installSetTimeoutImplementation() {\n registerImmediate = function(handle) {\n setTimeout(runIfPresent, 0, handle);\n };\n }\n\n // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.\n var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);\n attachTo = attachTo && attachTo.setTimeout ? attachTo : global;\n\n // Don't get fooled by e.g. browserify environments.\n if ({}.toString.call(global.process) === \"[object process]\") {\n // For Node.js before 0.9\n installNextTickImplementation();\n\n } else if (canUsePostMessage()) {\n // For non-IE10 modern browsers\n installPostMessageImplementation();\n\n } else if (global.MessageChannel) {\n // For web workers, where supported\n installMessageChannelImplementation();\n\n } else if (doc && \"onreadystatechange\" in doc.createElement(\"script\")) {\n // For IE 6–8\n installReadyStateChangeImplementation();\n\n } else {\n // For older browsers\n installSetTimeoutImplementation();\n }\n\n attachTo.setImmediate = setImmediate;\n attachTo.clearImmediate = clearImmediate;\n}(typeof self === \"undefined\" ? typeof global === \"undefined\" ? this : global : self));\n", + "export default {\n 'Success': 200,\n\n 'Bad Request': 400,\n 'Unauthorized': 401,\n 'Payment Required': 402,\n 'Forbidden': 403,\n 'Not Found': 404,\n 'Conflict': 409,\n 'Too Many Requests': 429,\n\n 'Internal Server Error': 500,\n 'Service Unavailable': 503,\n 'Gateway Timeout': 504,\n\n // WebSocket close event codes\n 'Service Restart': 1012,\n\n // Custom ws close event codes\n 'No Pong Received': 3000,\n 'Client Already Connected': 3001\n}\n", + "import statusCodes from '../statusCodes'\n\nclass UsernameAlreadyExists extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'UsernameAlreadyExists'\n this.message = 'Username already exists.'\n this.status = statusCodes['Conflict']\n }\n}\n\nclass UsernameMissing extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'UsernameMissing'\n this.message = 'Username missing.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass UsernameCannotBeBlank extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'UsernameCannotBeBlank'\n this.message = 'Username cannot be blank.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass UsernameTooLong extends Error {\n constructor(maxLen, ...params) {\n super(maxLen, ...params)\n\n this.name = 'UsernameTooLong'\n this.message = `Username too long. Must be a max of ${maxLen} characters.`\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass UsernameMustBeString extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'UsernameMustBeString'\n this.message = 'Username must be a string.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass PasswordMissing extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'PasswordMissing'\n this.message = 'Password missing.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass PasswordCannotBeBlank extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'PasswordCannotBeBlank'\n this.message = 'Password cannot be blank.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass PasswordTooShort extends Error {\n constructor(minLen, ...params) {\n super(minLen, ...params)\n\n this.name = 'PasswordTooShort'\n this.message = `Password too short. Must be a minimum of ${minLen} characters.`\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass PasswordTooLong extends Error {\n constructor(maxLen, ...params) {\n super(maxLen, ...params)\n\n this.name = 'PasswordTooLong'\n this.message = `Password too long. Must be a max of ${maxLen} characters.`\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass PasswordMustBeString extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'PasswordMustBeString'\n this.message = 'Password must be a string.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass PasswordAttemptLimitExceeded extends Error {\n constructor(delay, ...params) {\n super(delay, ...params)\n\n this.name = 'PasswordAttemptLimitExceeded'\n this.message = `Password attempt limit exceeded. Must wait ${delay} to attempt to use password again.`\n this.status = statusCodes['Unauthorized']\n }\n}\n\nclass UsernameOrPasswordMismatch extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'UsernameOrPasswordMismatch'\n this.message = 'Username or password mismatch.'\n this.status = statusCodes['Unauthorized']\n }\n}\n\nclass SessionLengthMustBeNumber extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'SessionLengthMustBeNumber'\n this.message = 'Session length must be a number.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass SessionLengthTooShort extends Error {\n constructor(minLen, ...params) {\n super(minLen, ...params)\n\n this.name = 'SessionLengthTooShort'\n this.message = `Session length cannot be shorter than ${minLen}.`\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass SessionLengthTooLong extends Error {\n constructor(maxLen, ...params) {\n super(maxLen, ...params)\n\n this.name = 'SessionLengthTooLong'\n this.message = `Session length cannot be longer than ${maxLen}.`\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass AllowServerSideEncryptionMustBeBoolean extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'AllowServerSideEncryptionMustBeBoolean'\n this.message = 'Allow server-side encryption value must be a boolean.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass UserAlreadySignedIn extends Error {\n constructor(username, ...params) {\n super(...params)\n\n this.name = 'UserAlreadySignedIn'\n this.message = 'Already signed in.'\n this.status = statusCodes['Bad Request']\n this.username = username\n }\n}\n\nclass UserPendingDeletion extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'UserPendingDeletion'\n this.message = 'User is pending deletion.'\n this.status = statusCodes['Forbidden']\n }\n}\n\nclass AppIdNotValid extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'AppIdNotValid'\n this.message = 'App ID not valid.'\n this.status = statusCodes['Unauthorized']\n }\n}\n\nclass DomainNotWhitelisted extends Error {\n constructor(domain, ...params) {\n super(domain, ...params)\n\n this.name = 'DomainNotWhitelisted'\n this.message = `Domain not whitelisted. Whitelist the domain ${domain ? `'${domain}' ` : ''}in your admin panel.`\n this.status = statusCodes['Unauthorized']\n }\n}\n\nclass UserNotSignedIn extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'UserNotSignedIn'\n this.message = 'Not signed in.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass UserNotFound extends Error {\n constructor(username, ...params) {\n super(username, ...params)\n\n if (username) this.username = username\n\n this.name = 'UserNotFound'\n this.message = 'User not found.'\n this.status = statusCodes['Not Found']\n }\n}\n\nclass UserEmailNotFound extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'UserEmailNotFound'\n this.message = 'User does not have an email saved.'\n this.status = statusCodes['Not Found']\n }\n}\n\nclass UserMustChangePassword extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'UserMustChangePassword'\n this.message = 'Must change password first.'\n this.status = statusCodes['Forbidden']\n }\n}\n\nclass EmailNotValid extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'EmailNotValid'\n this.message = 'Email not valid.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass ProfileMustBeObject extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'ProfileMustBeObject'\n this.message = 'Profile must be a flat JSON object.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass ProfileCannotBeEmpty extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'ProfileCannotBeEmpty'\n this.message = 'Profile cannot be empty.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass ProfileHasTooManyKeys extends Error {\n constructor(maxKeys, ...params) {\n super(maxKeys, ...params)\n\n this.name = 'ProfileHasTooManyKeys'\n this.message = `Profile has too many keys. Must have a max of ${maxKeys} keys.`\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass ProfileKeyTooLong extends Error {\n constructor(maxLen, key, ...params) {\n super(maxLen, key, ...params)\n\n this.name = 'ProfileKeyTooLong'\n this.message = `Profile key too long. Must be a max of ${maxLen} characters.`\n this.status = statusCodes['Bad Request']\n this.key = key\n }\n}\n\nclass ProfileValueMustBeString extends Error {\n constructor(key, value, ...params) {\n super(key, value, ...params)\n\n this.name = 'ProfileValueMustBeString'\n this.message = 'Profile value must be a string.'\n this.status = statusCodes['Bad Request']\n this.key = key\n this.value = value\n }\n}\n\nclass ProfileValueCannotBeBlank extends Error {\n constructor(key, ...params) {\n super(key, ...params)\n\n this.name = 'ProfileValueCannotBeBlank'\n this.message = 'Profile value cannot be blank.'\n this.status = statusCodes['Bad Request']\n this.key = key\n }\n}\n\nclass ProfileValueTooLong extends Error {\n constructor(maxLen, key, value, ...params) {\n super(maxLen, key, value, ...params)\n\n this.name = 'ProfileValueTooLong'\n this.message = `Profile value too long. Must be a max of ${maxLen} characters.`\n this.status = statusCodes['Bad Request']\n this.key = key\n this.value = value\n }\n}\n\nclass RememberMeValueNotValid extends Error {\n constructor(options, ...params) {\n super(options, ...params)\n\n this.name = 'RememberMeValueNotValid'\n this.message = `Remember me value must be one of ${JSON.stringify(Object.keys(options))}.`\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass ParamsMissing extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'ParamsMissing'\n this.message = 'Parameters expected are missing.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass TrialExceededLimit extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'TrialExceededLimit'\n this.message = 'Trial exceeded limit of users.'\n this.status = statusCodes['Payment Required']\n }\n}\n\nclass CurrentPasswordMissing extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'CurrentPasswordMissing'\n this.message = 'Current password missing.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass CurrentPasswordIncorrect extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'CurrentPasswordIncorrect'\n this.message = 'Current password is incorrect.'\n this.status = statusCodes['Unauthorized']\n }\n}\n\nclass KeyNotFound extends Error {\n constructor(message, ...params) {\n super(message, ...params)\n\n this.name = 'KeyNotFound'\n this.message = message\n this.status = statusCodes['Not Found']\n }\n}\n\nclass DeleteEndToEndEncryptedDataMustBeBoolean extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'DeleteEndToEndEncryptedDataMustBeBoolean'\n this.message = 'Delete end-to-end encrypted data value must be a boolean.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nexport default {\n UsernameAlreadyExists,\n UsernameMissing,\n UsernameCannotBeBlank,\n UsernameTooLong,\n UsernameMustBeString,\n PasswordMissing,\n PasswordCannotBeBlank,\n PasswordTooShort,\n PasswordTooLong,\n PasswordMustBeString,\n PasswordAttemptLimitExceeded,\n UsernameOrPasswordMismatch,\n SessionLengthMustBeNumber,\n SessionLengthTooShort,\n SessionLengthTooLong,\n AllowServerSideEncryptionMustBeBoolean,\n UserAlreadySignedIn,\n UserPendingDeletion,\n AppIdNotValid,\n DomainNotWhitelisted,\n UserNotSignedIn,\n UserNotFound,\n UserEmailNotFound,\n UserMustChangePassword,\n EmailNotValid,\n ProfileMustBeObject,\n ProfileCannotBeEmpty,\n ProfileHasTooManyKeys,\n ProfileKeyTooLong,\n ProfileValueMustBeString,\n ProfileValueCannotBeBlank,\n ProfileValueTooLong,\n RememberMeValueNotValid,\n ParamsMissing,\n TrialExceededLimit,\n CurrentPasswordMissing,\n CurrentPasswordIncorrect,\n KeyNotFound,\n DeleteEndToEndEncryptedDataMustBeBoolean,\n}\n", + "import statusCodes from '../statusCodes'\n\nclass DatabaseNameMissing extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'DatabaseNameMissing'\n this.message = 'Database name missing.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass DatabaseNameCannotBeBlank extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'DatabaseNameCannotBeBlank'\n this.message = 'Database name cannot be blank.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass DatabaseNameMustBeString extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'DatabaseNameMustBeString'\n this.message = 'Database name must be a string.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass DatabaseNameTooLong extends Error {\n constructor(maxLength, ...params) {\n super(maxLength, ...params)\n\n this.name = 'DatabaseNameTooLong'\n this.message = `Database name cannot be more than ${maxLength} characters.`\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass DatabaseNameRestricted extends Error {\n constructor(databaseName, ...params) {\n super(databaseName, ...params)\n\n this.name = 'DatabaseNameRestricted'\n this.message = `Database name '${databaseName}' is restricted. It is used internally by userbase-js.`\n this.status = statusCodes['Forbidden']\n }\n}\n\nclass DatabaseAlreadyOpening extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'DatabaseAlreadyOpening'\n this.message = 'Already attempting to open database.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass ChangeHandlerMissing extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'ChangeHandlerMissing'\n this.message = 'Change handler missing.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass ChangeHandlerMustBeFunction extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'ChangeHandlerMustBeFunction'\n this.message = 'Change handler must be a function.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass EncryptionModeNotValid extends Error {\n constructor(options, ...params) {\n super(options, ...params)\n\n this.name = 'EncryptionModeNotValid'\n this.message = `Encryption mode must be one of ${JSON.stringify(Object.keys(options))}.`\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass ServerSideEncryptionNotEnabledInClient extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'ServerSideEncryptionNotEnabledInClient'\n this.message = 'Server-side encryption must be enabled in the client to use it. To enable it, set allowServerSideEncryption to true in init().'\n this.status = statusCodes['Forbidden']\n }\n}\n\nclass DatabaseNotOpen extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'DatabaseNotOpen'\n this.message = 'Database is not open.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass DatabaseNotFound extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'DatabaseNotFound'\n this.message = 'Database not found. Find available databases using getDatabases().'\n this.status = statusCodes['Not Found']\n }\n}\n\nclass DatabaseIsReadOnly extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'DatabaseIsReadOnly'\n this.message = 'Database is read only. Must have permission to write to database.'\n this.status = statusCodes['Forbidden']\n }\n}\n\nclass DatabaseIdMustBeString extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'DatabaseIdMustBeString'\n this.message = 'Database id must be a string.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass DatabaseIdCannotBeBlank extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'DatabaseIdCannotBeBlank'\n this.message = 'Database id cannot be blank.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass DatabaseIdNotAllowed extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'DatabaseIdNotAllowed'\n this.message = 'Database id not allowed. Cannot provide both databaseName and databaseId, can only provide one.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass DatabaseIdNotAllowedForOwnDatabase extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'DatabaseIdNotAllowedForOwnDatabase'\n this.message = \"Tried to open the user's own database using its databaseId rather than its databaseName. The databaseId should only be used to open databases shared from other users.\"\n this.status = statusCodes['Forbidden']\n }\n}\n\nclass DatabaseIdInvalidLength extends Error {\n constructor(length, ...params) {\n super(length, ...params)\n\n this.name = 'DatabaseIdInvalidLength'\n this.message = `Database id invalid length. Must be ${length} characters.`\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass ShareTokenInvalid extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'ShareTokenInvalid'\n this.message = 'Share token invalid.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass ShareTokenNotFound extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'ShareTokenNotFound'\n this.message = 'Share token not found. Perhaps the database owner has generated a new share token.'\n this.status = statusCodes['Not Found']\n }\n}\n\nclass ShareTokenNotAllowed extends Error {\n constructor(reason, ...params) {\n super(reason, ...params)\n\n this.name = 'ShareTokenNotAllowed'\n this.message = 'Share token not allowed.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass ShareTokenNotAllowedForOwnDatabase extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'ShareTokenNotAllowedForOwnDatabase'\n this.message = \"Tried to open the user's own database using its shareToken rather than its databaseName. The shareToken should only be used to open databases shared from other users.\"\n this.status = statusCodes['Forbidden']\n }\n}\n\nclass ReadOnlyMustBeBoolean extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'ReadOnlyMustBeBoolean'\n this.message = 'Read only value must be a boolean.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass ReadOnlyParamNotAllowed extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'ReadOnlyParamNotAllowed'\n this.message = 'Read only parameter not allowed when revoking access to a database.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass ResharingAllowedParamNotAllowed extends Error {\n constructor(reason, ...params) {\n super(reason, ...params)\n\n this.name = 'ResharingAllowedParamNotAllowed'\n this.message = `Resharing allowed parameter not allowed ${reason}.`\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass ResharingAllowedMustBeBoolean extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'ResharingAllowedMustBeBoolean'\n this.message = 'Resharing allowed value must be a boolean.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass ResharingNotAllowed extends Error {\n constructor(reason, ...params) {\n super(reason, ...params)\n\n this.name = 'ResharingNotAllowed'\n this.message = `Resharing not allowed. ${reason}.`\n this.status = statusCodes['Forbidden']\n }\n}\n\nclass ResharingWithWriteAccessNotAllowed extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'ResharingWithWriteAccessNotAllowed'\n this.message = 'Resharing with write access not allowed. Must have permission to write to the database to reshare the database with write access another user.'\n this.status = statusCodes['Forbidden']\n }\n}\n\nclass SharingWithSelfNotAllowed extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'SharingWithSelfNotAllowed'\n this.message = 'Sharing database with self is not allowed. Must share database with another user.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass ModifyingOwnPermissionsNotAllowed extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'ModifyingOwnPermissionsNotAllowed'\n this.message = \"Modifying own database permissions not allowed. Must modify another user's permissions.\"\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass ModifyingOwnerPermissionsNotAllowed extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'ModifyingOwnerPermissionsNotAllowed'\n this.message = \"Modifying the owner of a database's permissions is not allowed.\"\n this.status = statusCodes['Forbidden']\n }\n}\n\nclass ModifyingPermissionsNotAllowed extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'ModifyingPermissionsNotAllowed'\n this.message = \"Modifying another user's permissions is not allowed. Must have permission to reshare the database with another user.\"\n this.status = statusCodes['Forbidden']\n }\n}\n\nclass GrantingWriteAccessNotAllowed extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'GrantingWriteAccessNotAllowed'\n this.message = 'Granting write access not allowed. Must have permission to write to the database to grant write access to another user.'\n this.status = statusCodes['Forbidden']\n }\n}\n\nclass RequireVerifiedMustBeBoolean extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'RequireVerifiedMustBeBoolean'\n this.message = 'Require verified value must be a boolean.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass RequireVerifiedParamNotNecessary extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'RequireVerifiedParamNotNecessary'\n this.message = 'Require verified parameter not necessary when sharing database without a username.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass RevokeMustBeBoolean extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'RevokeMustBeBoolean'\n this.message = 'Revoke value must be a boolean.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass ItemMissing extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'ItemMissing'\n this.message = 'Item missing.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass ItemInvalid extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'ItemInvalid'\n this.message = 'Item must be serializable to JSON.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass ItemTooLarge extends Error {\n constructor(maxKb, ...params) {\n super(maxKb, ...params)\n\n this.name = 'ItemTooLarge'\n this.message = `Item must be less than ${maxKb} KB.`\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass ItemIdMustBeString extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'ItemIdMustBeString'\n this.message = 'Item id must be a string.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass ItemIdTooLong extends Error {\n constructor(maxLength, ...params) {\n super(maxLength, ...params)\n\n this.name = 'ItemIdTooLong'\n this.message = `Item id cannot be more than ${maxLength} characters.`\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass ItemIdMissing extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'ItemIdMissing'\n this.message = 'Item id missing.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass ItemIdCannotBeBlank extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'ItemIdCannotBeBlank'\n this.message = 'Item id cannot be blank.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass ItemAlreadyExists extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'ItemAlreadyExists'\n this.message = 'Item with the same id already exists.'\n this.status = statusCodes['Conflict']\n }\n}\n\nclass ItemDoesNotExist extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'ItemDoesNotExist'\n this.message = 'Item with the provided id does not exist.'\n this.status = statusCodes['Not Found']\n }\n}\n\nclass ItemUpdateConflict extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'ItemUpdateConflict'\n this.message = 'Item update conflict.'\n this.status = statusCodes['Conflict']\n }\n}\n\nclass FileMissing extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'FileMissing'\n this.message = 'File missing.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass FileMustBeFile extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'FileMustBeFile'\n this.message = 'File must be a file.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass FileCannotBeEmpty extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'FileCannotBeEmpty'\n this.message = 'File cannot be empty.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass FileUploadConflict extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'FileUploadConflict'\n this.message = 'File upload conflict.'\n this.status = statusCodes['Conflict']\n }\n}\n\nclass FileNotFound extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'FileNotFound'\n this.message = 'File not found.'\n this.status = statusCodes['Not Found']\n }\n}\n\nclass FileIdMissing extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'FileIdMissing'\n this.message = 'File id missing.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass FileIdMustBeString extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'FileIdMustBeString'\n this.message = 'File id must be a string.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass FileIdCannotBeBlank extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'FileIdCannotBeBlank'\n this.message = 'File id cannot be blank.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass FileIdTooLong extends Error {\n constructor(maxLength, ...params) {\n super(maxLength, ...params)\n\n this.name = 'FileIdTooLong'\n this.message = `File id cannot be more than ${maxLength} characters.`\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass RangeMustBeObject extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'RangeMustBeObject'\n this.message = 'Range param provided must be object.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass RangeMissingStart extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'RangeMissingStart'\n this.message = 'Range param missing start.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass RangeMissingEnd extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'RangeMissingEnd'\n this.message = 'Range param missing end.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass RangeStartMustBeNumber extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'RangeStartMustBeNumber'\n this.message = 'Range start provided must be a number.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass RangeEndMustBeNumber extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'RangeEndMustBeNumber'\n this.message = 'Range end provided must be a number.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass RangeStartMustBeGreaterThanZero extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'RangeStartMustBeGreaterThanZero'\n this.message = 'Range start provided must be greater than 0.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass RangeEndMustBeGreaterThanRangeStart extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'RangeEndMustBeGreaterThanRangeStart'\n this.message = 'Range end provided must be greater than range start.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass RangeEndMustBeLessThanFileSize extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'RangeEndMustBeLessThanFileSize'\n this.message = 'Range end provided must be less than file size.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass OperationsMissing extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'OperationsMissing'\n this.message = 'Operations missing.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass OperationsMustBeArray extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'OperationsMustBeArray'\n this.message = 'Operations provided must be an array.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass CommandNotRecognized extends Error {\n constructor(command, ...params) {\n super(command, ...params)\n\n this.name = 'CommandNotRecognized'\n this.message = `Command '${command}' not recognized.`\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass OperationsConflict extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'OperationsConflict'\n this.message = 'Operations conflict. Only allowed 1 operation per item.'\n this.status = statusCodes['Conflict']\n }\n}\n\nclass OperationsExceedLimit extends Error {\n constructor(limit, ...params) {\n super(limit, ...params)\n\n this.name = 'OperationsExceedLimit'\n this.message = `Operations exceed limit. Only allowed ${limit} operations.`\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass UserNotVerified extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'UserNotVerified'\n this.message = 'User not verified. Either verify user before sharing database, or set requireVerified to false.'\n this.status = statusCodes['Forbidden']\n }\n}\n\nclass UserMustBeReverified extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'UserMustBeReverified'\n this.message = 'User must be reverified.'\n this.status = statusCodes['Forbidden']\n }\n}\n\nclass UserUnableToReceiveDatabase extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'UserUnableToReceiveDatabase'\n this.message = 'User unable to receive database. User must sign in with an updated userbase-js client to be able to receive database.'\n this.status = statusCodes['Forbidden']\n }\n}\n\nclass VerificationMessageMissing extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'VerificationMessageMissing'\n this.message = 'Verification message missing.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass VerificationMessageCannotBeBlank extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'VerificationMessageCannotBeBlank'\n this.message = 'Verification message cannot be blank.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass VerificationMessageMustBeString extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'VerificationMessageMustBeString'\n this.message = 'Verification message must be a string.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass VerificationMessageInvalid extends Error {\n constructor(maxLength, ...params) {\n super(maxLength, ...params)\n\n this.name = 'VerificationMessageInvalid'\n this.message = 'Verification message invalid.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass VerifyingSelfNotAllowed extends Error {\n constructor(maxLength, ...params) {\n super(maxLength, ...params)\n\n this.name = 'VerifyingSelfNotAllowed'\n this.message = 'Verifying self not allowed. Can only verify other users.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass ProgressHandlerMustBeFunction extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'ProgressHandlerMustBeFunction'\n this.message = 'Progress handler must be a function.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass TransactionUnauthorized extends Error {\n constructor(command, ...params) {\n super(command, ...params)\n\n this.name = 'TransactionUnauthorized'\n this.message = `Calling '${command}' on this item is unauthorized.`\n this.status = statusCodes['Forbidden']\n }\n}\n\nclass WriteAccessParamNotAllowed extends Error {\n constructor(command, ...params) {\n super(command, ...params)\n\n this.name = 'WriteAccessParamNotAllowed'\n this.message = `Write access parameter not allowed. Only the item creator or database owner can change an item's write access settings.`\n this.status = statusCodes['Forbidden']\n }\n}\n\nexport default {\n DatabaseNameMissing,\n DatabaseNameCannotBeBlank,\n DatabaseNameMustBeString,\n DatabaseNameTooLong,\n DatabaseNameRestricted,\n DatabaseNotFound,\n DatabaseIsReadOnly,\n DatabaseAlreadyOpening,\n DatabaseIdMustBeString,\n DatabaseIdCannotBeBlank,\n DatabaseIdNotAllowed,\n DatabaseIdNotAllowedForOwnDatabase,\n DatabaseIdInvalidLength,\n ShareTokenInvalid,\n ShareTokenNotFound,\n ShareTokenNotAllowed,\n ShareTokenNotAllowedForOwnDatabase,\n ReadOnlyMustBeBoolean,\n ReadOnlyParamNotAllowed,\n ResharingAllowedMustBeBoolean,\n ResharingNotAllowed,\n ResharingWithWriteAccessNotAllowed,\n ResharingAllowedParamNotAllowed,\n SharingWithSelfNotAllowed,\n ModifyingOwnPermissionsNotAllowed,\n ModifyingOwnerPermissionsNotAllowed,\n ModifyingPermissionsNotAllowed,\n GrantingWriteAccessNotAllowed,\n RequireVerifiedMustBeBoolean,\n RequireVerifiedParamNotNecessary,\n RevokeMustBeBoolean,\n ChangeHandlerMissing,\n ChangeHandlerMustBeFunction,\n EncryptionModeNotValid,\n ServerSideEncryptionNotEnabledInClient,\n DatabaseNotOpen,\n ItemMissing,\n ItemInvalid,\n ItemTooLarge,\n ItemIdMustBeString,\n ItemIdTooLong,\n ItemIdMissing,\n ItemIdCannotBeBlank,\n ItemAlreadyExists,\n ItemDoesNotExist,\n ItemUpdateConflict,\n FileMissing,\n FileMustBeFile,\n FileCannotBeEmpty,\n FileUploadConflict,\n FileNotFound,\n FileIdMissing,\n FileIdMustBeString,\n FileIdCannotBeBlank,\n FileIdTooLong,\n RangeMustBeObject,\n RangeMissingStart,\n RangeMissingEnd,\n RangeStartMustBeNumber,\n RangeEndMustBeNumber,\n RangeStartMustBeGreaterThanZero,\n RangeEndMustBeGreaterThanRangeStart,\n RangeEndMustBeLessThanFileSize,\n OperationsMissing,\n OperationsMustBeArray,\n OperationsConflict,\n OperationsExceedLimit,\n CommandNotRecognized,\n UserNotVerified,\n UserMustBeReverified,\n UserUnableToReceiveDatabase,\n VerificationMessageMissing,\n VerificationMessageMustBeString,\n VerificationMessageCannotBeBlank,\n VerificationMessageInvalid,\n VerifyingSelfNotAllowed,\n ProgressHandlerMustBeFunction,\n TransactionUnauthorized,\n WriteAccessParamNotAllowed,\n}\n", + "import statusCodes from '../statusCodes'\n\nclass AppIdAlreadySet extends Error {\n constructor(appId, ...params) {\n super(appId, ...params)\n\n this.name = 'AppIdAlreadySet'\n this.message = 'Application ID already set.'\n this.status = statusCodes['Conflict']\n this.appId = appId\n }\n}\n\nclass AppIdMustBeString extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'AppIdMustBeString'\n this.message = 'Application ID must be a string.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass AppIdMissing extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'AppIdMissing'\n this.message = 'Application ID missing.'\n this.status = statusCodes['Bad Request']\n }\n}\nclass AppIdCannotBeBlank extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'AppIdCannotBeBlank'\n this.message = 'Application ID cannot be blank.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass WebCryptoUnavailable extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'WebCryptoUnavailable'\n this.message = 'The WebCrypto API is unavailable. Please make sure your website uses https.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass UpdateUserHandlerMustBeFunction extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'UpdateUserHandlerMustBeFunction'\n this.message = 'Update user handler must be a function.'\n this.status = statusCodes['Bad Request']\n }\n}\nexport default {\n AppIdAlreadySet,\n AppIdMustBeString,\n AppIdMissing,\n AppIdCannotBeBlank,\n WebCryptoUnavailable,\n UpdateUserHandlerMustBeFunction,\n}\n", + "import statusCodes from '../statusCodes'\n\nclass SuccessUrlMissing extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'SuccessUrlMissing'\n this.message = 'Success url missing to let Stripe know where to redirect users on successful payment.'\n this.status = statusCodes['Bad Request']\n }\n}\nclass SuccessUrlMustBeString extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'SuccessUrlMustBeString'\n this.message = 'Success url must be a string.'\n this.status = statusCodes['Bad Request']\n }\n}\nclass SuccessUrlInvalid extends Error {\n constructor(invalidProtocol, ...params) {\n super(invalidProtocol, ...params)\n\n this.name = 'SuccessUrlInvalid'\n this.message = invalidProtocol ? 'Success url must start with http or https.' : 'Success url invalid.'\n this.status = statusCodes['Bad Request']\n }\n}\nclass CancelUrlMissing extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'CancelUrlMissing'\n this.message = 'Cancel url missing to let Stripe know where to redirect users on canceled payment.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass CancelUrlMustBeString extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'CancelUrlMustBeString'\n this.message = 'Cancel url must be a string.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass CancelUrlInvalid extends Error {\n constructor(invalidProtocol, ...params) {\n super(invalidProtocol, ...params)\n\n this.name = 'CancelUrlInvalid'\n this.message = invalidProtocol ? 'Cancel url must start with http or https.' : 'Cancel url invalid.'\n this.status = statusCodes['Bad Request']\n }\n}\nclass StripeJsLibraryMissing extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'StripeLibraryMissing'\n this.message = 'Stripe.js library missing. Be sure to include the script in your html file (https://stripe.com/docs/stripe-js#setup).'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass PaymentsDisabled extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'PaymentsDisabled'\n this.message = 'Payments on this app are disabled. Enable payments in the admin panel.'\n this.status = statusCodes['Forbidden']\n }\n}\n\nclass PriceIdOrPlanIdAllowed extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'PriceIdOrPlanIdAllowed'\n this.message = 'Only one of priceId or planId allowed.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass PriceIdOrPlanIdMissing extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'PriceIdOrPlanIdMissing'\n this.message = 'Please provide a priceId or planId. You can create a product in the Stripe dashboard and find its priceId there.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass SubscriptionPlanAlreadyPurchased extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'SubscriptionPlanAlreadyPurchased'\n this.message = 'Subscription plan already purchased. Cancel subscription to purchase another.'\n this.status = statusCodes['Conflict']\n }\n}\nclass StripeAccountNotConnected extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'StripeAccountNotConnected'\n this.message = 'Stripe account not connected. Connect a Stripe account in the admin panel.'\n this.status = statusCodes['Forbidden']\n }\n}\n\nclass SubscriptionNotFound extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'SubscriptionNotFound'\n this.message = 'Subscription not found. User must purchase a subscription.'\n this.status = statusCodes['Payment Required']\n }\n}\n\nclass SubscriptionInactive extends Error {\n constructor(subscriptionStatus, ...params) {\n super(...params)\n\n this.name = 'SubscriptionInactive'\n this.message = \"The user's subscription is inactive.\"\n this.subscriptionStatus = subscriptionStatus\n this.status = statusCodes['Payment Required']\n }\n}\n\nclass SubscriptionNotPurchased extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'SubscriptionNotPurchased'\n this.message = 'Subscription not purchased. User must purchase a subscription.'\n this.status = statusCodes['Payment Required']\n }\n}\n\nclass SubscriptionAlreadyCanceled extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'SubscriptionAlreadyCanceled'\n this.message = 'Subscription already canceled. User must purchase a new subscription.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass TrialExpired extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'TrialExpired'\n this.message = 'Trial expired. User must purchase a subscription.'\n this.status = statusCodes['Payment Required']\n }\n}\n\nclass StripeError extends Error {\n constructor(error, ...params) {\n super(error, ...params)\n\n const { status, type, message } = error\n\n this.name = 'StripeError'\n this.message = message\n this.type = type\n this.status = status\n }\n}\n\nexport default {\n SuccessUrlMissing,\n SuccessUrlMustBeString,\n SuccessUrlInvalid,\n CancelUrlMissing,\n CancelUrlMustBeString,\n CancelUrlInvalid,\n StripeJsLibraryMissing,\n PaymentsDisabled,\n PriceIdOrPlanIdAllowed,\n PriceIdOrPlanIdMissing,\n SubscriptionPlanAlreadyPurchased,\n StripeAccountNotConnected,\n SubscriptionNotFound,\n SubscriptionInactive,\n SubscriptionNotPurchased,\n SubscriptionAlreadyCanceled,\n TrialExpired,\n StripeError,\n}\n", + "import auth from './auth'\nimport db from './db'\nimport config from './config'\nimport payments from './payments'\nimport statusCodes from '../statusCodes'\n\nclass AppIdNotSet extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'AppIdNotSet'\n this.message = 'App ID not set yet. Make sure to configure app ID.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass ServiceUnavailable extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'ServiceUnavailable'\n this.message = 'Service unavailable.'\n this.status = statusCodes['Service Unavailable']\n }\n}\n\nclass InternalServerError extends ServiceUnavailable {\n constructor(...params) {\n super(...params)\n\n this.status = statusCodes['Internal Server Error']\n }\n}\n\nclass Timeout extends ServiceUnavailable {\n constructor(...params) {\n super(...params)\n\n this.status = statusCodes['Gateway Timeout']\n }\n}\n\nclass Reconnecting extends ServiceUnavailable {\n constructor(...params) {\n super(...params)\n\n this.message = 'Reconnecting.'\n }\n}\n\nclass UnknownServiceUnavailable extends ServiceUnavailable {\n constructor(e, ...params) {\n super(e, ...params)\n\n console.error('Userbase error. Please report this to support@userbase.com.\\n\\n', e)\n }\n}\n\nclass ParamsMustBeObject extends Error {\n constructor(...params) {\n super(...params)\n\n this.name = 'ParamsMustBeObject'\n this.message = 'Parameters passed to function must be placed inside an object.'\n this.status = statusCodes['Bad Request']\n }\n}\n\nclass TooManyRequests extends Error {\n constructor(retryDelay, ...params) {\n super(retryDelay, ...params)\n\n const retryDelaySeconds = Math.floor(retryDelay / 1000)\n\n this.name = 'TooManyRequests'\n this.message = `Too many requests in a row. Please try again in ${retryDelaySeconds} second${retryDelaySeconds !== 1 ? 's' : ''}.`\n this.status = statusCodes['Too Many Requests']\n }\n}\n\nexport default {\n ...auth,\n ...db,\n ...config,\n ...payments,\n AppIdNotSet,\n InternalServerError,\n ServiceUnavailable,\n Timeout,\n Reconnecting,\n UnknownServiceUnavailable,\n ParamsMustBeObject,\n TooManyRequests\n}\n", + "import errors from './errors'\n\nconst USERBASE_JS_VERSION = '2.8.0'\n\nconst VERSION = '/v1'\nconst DEFAULT_ENDPOINT = 'https://v1.userbase.com' + VERSION\n\nconst STRIPE_PRODUCTION_PUBLISHABLE_KEY = 'pk_live_jI6lbsAIQlu2u4uTkDXFrSEW'\nconst STRIPE_TEST_PUBLISHABLE_KEY = 'pk_test_rYANrLdNfdJXJ2d808wW4pqY'\n\nlet userbaseAppId = null\nlet userbaseUpdateUserHandler = null\nlet userbaseAllowServerSideEncryptionMode = false\n\nconst getAppId = () => {\n if (!userbaseAppId) throw new errors.AppIdNotSet\n return userbaseAppId\n}\n\nconst getUpdateUserHandler = () => userbaseUpdateUserHandler\n\nconst getEndpoint = () => {\n return window._userbaseEndpoint || DEFAULT_ENDPOINT\n}\n\nconst configure = ({ appId, updateUserHandler, allowServerSideEncryption }) => {\n if (userbaseAppId && userbaseAppId !== appId) throw new errors.AppIdAlreadySet(userbaseAppId)\n userbaseAppId = appId\n userbaseUpdateUserHandler = updateUserHandler\n userbaseAllowServerSideEncryptionMode = allowServerSideEncryption\n}\n\nconst getStripePublishableKey = (isProduction) => {\n return isProduction\n ? (window._USERBASE_STRIPE_PRODUCTION_PUBLISHABLE_KEY || STRIPE_PRODUCTION_PUBLISHABLE_KEY)\n : (window._USERBASE_STRIPE_TEST_PUBLISHABLE_KEY || STRIPE_TEST_PUBLISHABLE_KEY)\n}\n\nconst isServerSideEncryptionModeAllowed = () => userbaseAllowServerSideEncryptionMode\n\nexport default {\n USERBASE_JS_VERSION,\n getAppId,\n getUpdateUserHandler,\n getEndpoint,\n configure,\n getStripePublishableKey,\n isServerSideEncryptionModeAllowed,\n}\n", + "import errors from '../errors'\n\nconst TEN_SECONDS_MS = 10 * 1000\n\nclass RequestError extends Error {\n constructor(data, status, statusText, ...params) {\n super(data, status, statusText, ...params)\n\n this.response = {\n data,\n status,\n statusText,\n }\n\n this.message = 'Request failed with status code ' + status\n }\n}\n\nclass TimeoutError extends Error {\n constructor(timeout, ...params) {\n super(timeout, ...params)\n\n this.message = `timeout of ${timeout}ms exceeded`\n }\n}\n\nconst handleResponse = (xhr, resolve, reject) => {\n let response\n try {\n response = JSON.parse(xhr.response)\n } catch {\n response = xhr.response\n }\n\n if (xhr.status >= 200 && xhr.status < 300) {\n resolve(response)\n } else {\n reject(new RequestError(response, xhr.status, xhr.statusText))\n }\n}\n\nexport const processXhr = (xhr, resolve, reject, timeout = TEN_SECONDS_MS) => {\n xhr.timeout = timeout\n xhr.onload = () => handleResponse(xhr, resolve, reject)\n xhr.onerror = () => reject(new errors.ServiceUnavailable)\n xhr.ontimeout = () => reject(new TimeoutError(timeout))\n}\n", + "import config from '../config'\nimport { processXhr } from './utils'\n\nconst signUp = (username, passwordToken, ecKeyData, passwordSalts, keySalts, email, profile, passwordBasedBackup, sessionLength) => {\n return new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest()\n\n const method = 'POST'\n const url = `${config.getEndpoint()}/api/auth/sign-up?appId=${config.getAppId()}&userbaseJsVersion=${config.USERBASE_JS_VERSION}`\n const data = JSON.stringify({\n username,\n passwordToken,\n ecKeyData,\n passwordSalts,\n keySalts,\n email,\n profile,\n passwordBasedBackup,\n sessionLength,\n })\n\n xhr.open(method, url)\n xhr.setRequestHeader('Content-Type', 'application/json')\n xhr.send(data)\n\n processXhr(xhr, resolve, reject)\n })\n}\n\nconst getPasswordSalts = (username) => {\n return new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest()\n\n const method = 'GET'\n const url = `${config.getEndpoint()}/api/auth/get-password-salts?appId=${config.getAppId()}&username=${encodeURIComponent(username)}&userbaseJsVersion=${config.USERBASE_JS_VERSION}`\n\n xhr.open(method, url)\n xhr.send()\n\n processXhr(xhr, resolve, reject)\n })\n}\n\nconst signIn = async (username, passwordToken, sessionLength) => {\n return new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest()\n\n const method = 'POST'\n const url = `${config.getEndpoint()}/api/auth/sign-in?appId=${config.getAppId()}&userbaseJsVersion=${config.USERBASE_JS_VERSION}`\n const data = JSON.stringify({\n username,\n passwordToken,\n sessionLength,\n })\n\n xhr.open(method, url)\n xhr.setRequestHeader('Content-Type', 'application/json')\n xhr.send(data)\n\n processXhr(xhr, resolve, reject)\n })\n}\n\nconst signInWithSession = (sessionId, sessionLength) => {\n return new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest()\n\n const method = 'POST'\n const url = `${config.getEndpoint()}/api/auth/sign-in-with-session?appId=${config.getAppId()}&sessionId=${sessionId}&userbaseJsVersion=${config.USERBASE_JS_VERSION}`\n const data = JSON.stringify({\n sessionLength,\n })\n\n xhr.open(method, url)\n xhr.setRequestHeader('Content-Type', 'application/json')\n xhr.send(data)\n\n processXhr(xhr, resolve, reject)\n })\n}\n\nconst getServerPublicKey = async () => {\n return new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest()\n\n const method = 'GET'\n const url = `${config.getEndpoint()}/api/auth/server-public-key?&userbaseJsVersion=${config.USERBASE_JS_VERSION}`\n const responseType = 'arraybuffer'\n\n xhr.open(method, url)\n xhr.responseType = responseType\n xhr.send()\n\n processXhr(xhr, resolve, reject)\n })\n}\n\nconst getPublicKey = (username) => {\n return new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest()\n\n const method = 'GET'\n const url = `${config.getEndpoint()}/api/public-key?appId=${config.getAppId()}&username=${encodeURIComponent(username)}&userbaseJsVersion=${config.USERBASE_JS_VERSION}`\n\n xhr.open(method, url)\n xhr.send()\n\n processXhr(xhr, resolve, reject)\n })\n}\n\nconst uploadBundleChunk = async (chunk, token) => {\n return new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest()\n\n const method = 'POST'\n const url = `${config.getEndpoint()}/api/bundle-chunk?userbaseJsVersion=${config.USERBASE_JS_VERSION}`\n\n xhr.setRequestHeader('Authorization', 'Bearer ' + token)\n\n xhr.open(method, url)\n xhr.send(chunk)\n\n processXhr(xhr, resolve, reject)\n })\n}\n\nexport default {\n signUp,\n getPasswordSalts,\n signIn,\n signInWithSession,\n getServerPublicKey,\n getPublicKey,\n uploadBundleChunk,\n}\n", + "const tryCatchWrapper = (func) => (...args) => {\n try {\n return func(...args)\n } catch (e) {\n // ok to swallow error\n //\n // local/sessionStorage are non-critical benefits. If they happen to be available,\n // they're helpful, but if not, the SDK functions totally fine.\n //\n // If a function fails, behavior is functionally the same as if rememberMe is 'none'.\n console.warn('Error accessing browser storage. Defaulting to memory.\\n\\n', e)\n }\n}\n\nconst _getSeedName = (appId, username) => `userbaseSeed.${appId}.${username}`\n\nconst setCurrentSession = tryCatchWrapper((rememberMe, username, signedIn, sessionId, creationDate, expirationDate) => {\n const session = { username, signedIn, sessionId, creationDate, expirationDate }\n const sessionString = JSON.stringify(session)\n\n if (rememberMe === 'local') {\n localStorage.setItem('userbaseCurrentSession', sessionString)\n } else if (rememberMe === 'session') {\n sessionStorage.setItem('userbaseCurrentSession', sessionString)\n }\n})\n\nconst getCurrentSession = tryCatchWrapper(() => {\n const sessionStorageCurrentSessionString = sessionStorage.getItem('userbaseCurrentSession')\n\n if (sessionStorageCurrentSessionString) {\n const currentSession = JSON.parse(sessionStorageCurrentSessionString)\n\n if (!currentSession.signedIn) {\n const localCurrentSessionString = localStorage.getItem('userbaseCurrentSession')\n\n if (localCurrentSessionString) {\n const localCurrentSession = JSON.parse(localCurrentSessionString)\n\n // allows session from localStorage to override sessionStorage if signed in\n // to localStorage session and not signed in to sessionStorage session\n if (localCurrentSession.signedIn) {\n return {\n ...localCurrentSession,\n rememberMe: 'local'\n }\n }\n }\n }\n\n return {\n ...JSON.parse(sessionStorageCurrentSessionString),\n rememberMe: 'session'\n }\n }\n\n const localSessionString = localStorage.getItem('userbaseCurrentSession')\n return localSessionString && {\n ...JSON.parse(localSessionString),\n rememberMe: 'local'\n }\n})\n\nconst saveSeedString = tryCatchWrapper((rememberMe, appId, username, seedString) => {\n if (rememberMe === 'local') {\n localStorage.setItem(_getSeedName(appId, username), seedString)\n } else if (rememberMe === 'session') {\n sessionStorage.setItem(_getSeedName(appId, username), seedString)\n }\n})\n\nconst removeSeedString = tryCatchWrapper((appId, username) => {\n const seedName = _getSeedName(appId, username)\n sessionStorage.removeItem(seedName)\n localStorage.removeItem(seedName)\n})\n\nconst getSeedString = tryCatchWrapper((appId, username) => {\n const seedName = _getSeedName(appId, username)\n return sessionStorage.getItem(seedName) || localStorage.getItem(seedName)\n})\n\nconst signInSession = (rememberMe, username, sessionId, creationDate, expirationDate) => {\n const signedIn = true\n setCurrentSession(rememberMe, username, signedIn, sessionId, creationDate, expirationDate)\n}\n\nconst signOutSession = (rememberMe, username) => {\n const signedIn = false\n setCurrentSession(rememberMe, username, signedIn)\n}\n\nconst removeCurrentSession = tryCatchWrapper(() => {\n sessionStorage.removeItem('userbaseCurrentSession')\n localStorage.removeItem('userbaseCurrentSession')\n})\n\nexport default {\n signInSession,\n signOutSession,\n getCurrentSession,\n saveSeedString,\n removeSeedString,\n getSeedString,\n removeCurrentSession,\n}\n", + "const ONE_KB = 1024\nconst TEN_KB = 10 * ONE_KB\n\n// https://stackoverflow.com/a/20604561/11601853\nexport const arrayBufferToString = (buf, minified) => {\n const bufView = minified ? new Uint8Array(buf) : new Uint16Array(buf)\n const length = bufView.length\n let result = ''\n let chunkSize = TEN_KB // using chunks prevents stack from blowing up\n\n for (var i = 0; i < length; i += chunkSize) {\n if (i + chunkSize > length) {\n chunkSize = length - i\n }\n const chunk = bufView.subarray(i, i + chunkSize)\n result += String.fromCharCode.apply(null, chunk)\n }\n\n return result\n}\n\n// https://developers.google.com/web/updates/2012/06/How-to-convert-ArrayBuffer-to-and-from-String\nexport const stringToArrayBuffer = (str, minified = false) => {\n let buf = new ArrayBuffer(str.length * (minified ? 1 : 2)) // 2 bytes for each char, unless using minified. minified only safe for known input\n let bufView = minified ? new Uint8Array(buf) : new Uint16Array(buf)\n for (let i = 0, strLen = str.length; i < strLen; i++) {\n bufView[i] = str.charCodeAt(i)\n }\n return buf\n}\n\n/**\n* Creates a new Uint8Array based on two different ArrayBuffers\n*\n* Source: https://gist.github.com/72lions/4528834\n*\n* @param {ArrayBuffers} buffer1 The first buffer.\n* @param {ArrayBuffers} buffer2 The second buffer.\n* @return {ArrayBuffers} The new ArrayBuffer created out of the two.\n*\n*/\nexport const appendBuffer = (buffer1, buffer2) => {\n const tmp = new Uint8Array(buffer1.byteLength + buffer2.byteLength)\n tmp.set(new Uint8Array(buffer1), 0)\n tmp.set(new Uint8Array(buffer2), buffer1.byteLength)\n return tmp.buffer\n}\n\nexport const appendBuffers = (buffers) => {\n const bufferByteLengths = buffers.map(buffer => buffer.byteLength)\n const totalByteLength = bufferByteLengths.reduce((byteLengthSum, bufferByteLength) => byteLengthSum + bufferByteLength)\n\n const tmp = new Uint8Array(totalByteLength)\n let currentByteLength = 0\n for (let i = 0; i < buffers.length; i++) {\n tmp.set(new Uint8Array(buffers[i]), currentByteLength)\n currentByteLength += bufferByteLengths[i]\n }\n\n return {\n buffer: tmp.buffer,\n byteLengths: bufferByteLengths\n }\n}\n\nexport const hexStringToArrayBuffer = (hexString) => {\n if (hexString.length % 2 !== 0) throw new Error('Hex string must be even length')\n const halfHexStringLen = hexString.length / 2\n const array = []\n for (let i = 0; i < halfHexStringLen; i++) {\n const byteStartIndex = i * 2\n const byte = hexString.substring(byteStartIndex, byteStartIndex + 2)\n const byteAsInt = parseInt(byte, 16)\n array.push(byteAsInt)\n }\n return new Uint8Array(array)\n}\n", + "import base64 from 'base64-arraybuffer'\nimport { stringToArrayBuffer } from './utils'\n\nconst BYTE_SIZE = 32 // 256 / 8\nconst HASH_ALGORITHM_NAME = 'SHA-256'\n\n/**\n *\n * @param {ArrayBuffer} data\n */\nconst hash = async (data) => {\n const result = await window.crypto.subtle.digest(\n {\n name: HASH_ALGORITHM_NAME,\n },\n data\n )\n return result\n}\n\nconst hashBase64String = async (dataString) => {\n const data = base64.decode(dataString)\n const result = await hash(data)\n return base64.encode(result)\n}\n\nconst hashString = async (dataString) => {\n const data = stringToArrayBuffer(dataString)\n const result = await hash(data)\n return base64.encode(result)\n}\n\nexport default {\n BYTE_SIZE,\n HASH_ALGORITHM_NAME,\n hash,\n hashBase64String,\n hashString\n}\n", + "import base64 from 'base64-arraybuffer'\nimport sha256 from './sha-256'\nimport { stringToArrayBuffer } from './utils'\n\nconst HKDF_ALGORITHM_NAME = 'HKDF'\nconst RAW_KEY_TYPE = 'raw'\nconst KEY_IS_NOT_EXTRACTABLE = false\nconst KEY_WILL_BE_USED_TO = ['deriveKey', 'deriveBits']\n\nconst importHkdfKeyFromString = async (seedString) => {\n const seed = stringToArrayBuffer(seedString)\n const hkdfKey = await importHkdfKey(seed)\n return hkdfKey\n}\n\nconst importHkdfKey = async (seed) => {\n const hkdfKey = await window.crypto.subtle.importKey(\n RAW_KEY_TYPE,\n seed,\n {\n name: HKDF_ALGORITHM_NAME\n },\n KEY_IS_NOT_EXTRACTABLE,\n KEY_WILL_BE_USED_TO\n )\n return hkdfKey\n}\n\n/**\n * RFC 5869:\n *\n * \"the use of salt adds significantly to the strength of HKDF...\n * Ideally, the salt value is a random (or pseudorandom) string of the\n * length HashLen\"\n *\n * https://tools.ietf.org/html/rfc5869#section-3.1\n *\n **/\nconst SALT_BYTE_SIZE = sha256.BYTE_SIZE\nconst generateSalt = () => window.crypto.getRandomValues(new Uint8Array(SALT_BYTE_SIZE))\n\nconst getParams = (keyName, salt) => ({\n name: HKDF_ALGORITHM_NAME,\n info: stringToArrayBuffer(keyName),\n hash: sha256.HASH_ALGORITHM_NAME,\n salt\n})\n\nconst PASSWORD_TOKEN_NAME = 'password-token'\nconst PASSWORD_TOKEN_NUM_BITS = 256\n\nconst getPasswordToken = async (hkdfKey, salt) => {\n const passwordTokenBits = await window.crypto.subtle.deriveBits(\n getParams(PASSWORD_TOKEN_NAME, salt),\n hkdfKey,\n PASSWORD_TOKEN_NUM_BITS\n )\n\n return base64.encode(passwordTokenBits)\n}\n\nexport default {\n importHkdfKeyFromString,\n importHkdfKey,\n generateSalt,\n getParams,\n getPasswordToken\n}\n", + "import base64 from 'base64-arraybuffer'\nimport hkdf from './hkdf'\nimport { arrayBufferToString, stringToArrayBuffer, appendBuffer } from './utils'\n\nconst ENCRYPTION_ALGORITHM_NAME = 'AES-GCM'\nconst BIT_SIZE = 256\nconst KEY_IS_EXTRACTABLE = true\nconst KEY_WILL_BE_USED_TO = ['encrypt', 'decrypt']\nconst RAW_KEY_TYPE = 'raw'\n\nconst ENCRYPTION_KEY_NAME = 'encryption'\n\nconst PASSWORD_BASED_ENCRYPTION_KEY = 'password-based-encryption'\n\n/**\n * NIST recommendation:\n *\n * \"For IVs, it is recommended that implementations restrict support to\n * the length of 96 bits, to promote interoperability, efficiency, and\n * simplicity of design.\"\n *\n * Pg. 8\n * https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-38d.pdf\n *\n **/\nconst RECOMMENDED_IV_BYTE_SIZE = 12 // 96 / 8\n\n/**\n * Source on tag length:\n * https://crypto.stackexchange.com/questions/26783/ciphertext-and-tag-size-and-iv-transmission-with-aes-in-gcm-mode/26787\n */\nconst RECOMMENDED_AUTHENTICATION_TAG_LENGTH = 128\n\nconst windowOrSelfObject = () => {\n return typeof window !== 'undefined'\n ? window\n : self\n}\n\nconst getEncryptionKeyParams = () => ({\n name: ENCRYPTION_ALGORITHM_NAME,\n length: BIT_SIZE\n})\n\nconst getCiphertextParams = (iv) => ({\n name: ENCRYPTION_ALGORITHM_NAME,\n tagLength: RECOMMENDED_AUTHENTICATION_TAG_LENGTH,\n iv\n})\n\nconst generateIv = () => window.crypto.getRandomValues(new Uint8Array(RECOMMENDED_IV_BYTE_SIZE))\n\nconst sliceEncryptedArrayBuffer = (encryptedArrayBuffer) => {\n const ivStartIndex = encryptedArrayBuffer.byteLength - RECOMMENDED_IV_BYTE_SIZE\n const ciphertextArrayBuffer = encryptedArrayBuffer.slice(0, ivStartIndex)\n const iv = encryptedArrayBuffer.slice(ivStartIndex)\n\n return { ciphertextArrayBuffer, iv }\n}\n\nconst importKeyFromMaster = async (masterKey, salt, encryptionKeyName = ENCRYPTION_KEY_NAME) => {\n const encryptionKey = await window.crypto.subtle.deriveKey(\n hkdf.getParams(encryptionKeyName, salt),\n masterKey,\n getEncryptionKeyParams(),\n KEY_IS_EXTRACTABLE,\n KEY_WILL_BE_USED_TO\n )\n return encryptionKey\n}\n\nconst generateKey = async () => {\n const key = await window.crypto.subtle.generateKey(\n getEncryptionKeyParams(),\n KEY_IS_EXTRACTABLE,\n KEY_WILL_BE_USED_TO\n )\n return key\n}\n\nconst getKeyStringFromKey = async (key) => {\n const rawKey = await window.crypto.subtle.exportKey(RAW_KEY_TYPE, key)\n const keyString = base64.encode(rawKey)\n return keyString\n}\n\nconst getKeyFromKeyString = async (keyString) => {\n const rawKey = base64.decode(keyString)\n const key = await getKeyFromRawKey(rawKey)\n return key\n}\n\nconst getKeyFromRawKey = async (rawKey) => {\n const key = await windowOrSelfObject().crypto.subtle.importKey(\n RAW_KEY_TYPE,\n rawKey,\n {\n name: ENCRYPTION_ALGORITHM_NAME\n },\n KEY_IS_EXTRACTABLE,\n KEY_WILL_BE_USED_TO\n )\n return key\n}\n\nconst getRawKeyFromKey = async (key) => {\n const rawKey = await windowOrSelfObject().crypto.subtle.exportKey(RAW_KEY_TYPE, key)\n return rawKey\n}\n\n/**\n *\n * @param {CryptoKey} key\n * @param {ArrayBuffer} plaintext\n * @returns {ArrayBuffer} encrypted Array Buffer\n *\n * encrypted is a concatentation of Array Buffers [ciphertext, auth tag, IV]\n *\n * The Authentication Tag is a hash of the plaintext to ensure the same data that\n * is ecncrypted is the resulting data when decrypted. Note that the browser crypto\n * library's result is the concatenation of Array Buffers [ciphertext, auth tag]\n *\n * The IV is a random intialization vector that prevents an attacker\n * from determining a user's key. It can be exposed alongside the ciphertext safely.\n *\n */\nconst encrypt = async (key, plaintext) => {\n const iv = generateIv()\n\n // this result is the concatenation of Array Buffers [ciphertext, auth tag]\n const ciphertextArrayBuffer = await windowOrSelfObject().crypto.subtle.encrypt(\n getCiphertextParams(iv),\n key,\n plaintext\n )\n\n return appendBuffer(ciphertextArrayBuffer, iv)\n}\n\nconst encryptJson = async (key, plaintextJson) => {\n const plaintextString = JSON.stringify(plaintextJson)\n const encrypted = await encryptString(key, plaintextString)\n return encrypted\n}\n\nconst encryptString = async (key, plaintextString) => {\n const plaintextArrayBuffer = stringToArrayBuffer(plaintextString)\n const encrypted = await encrypt(key, plaintextArrayBuffer)\n return base64.encode(encrypted)\n}\n\n/**\n *\n * @param {CryptoKey} key\n * @param {ArrayBuffer} encrypted - the encrypted Array Buffer\n * @returns {object} plaintext\n */\nconst decrypt = async (key, encrypted) => {\n const { ciphertextArrayBuffer, iv } = sliceEncryptedArrayBuffer(encrypted)\n\n const plaintextArrayBuffer = await windowOrSelfObject().crypto.subtle.decrypt(\n getCiphertextParams(iv),\n key,\n ciphertextArrayBuffer\n )\n return plaintextArrayBuffer\n}\n\nconst decryptJson = async (key, encryptedJsonString) => {\n const plaintextString = await decryptString(key, encryptedJsonString)\n return JSON.parse(plaintextString)\n}\n\nconst decryptString = async (key, encryptedString) => {\n const encryptedArrayBuffer = base64.decode(encryptedString)\n const plaintextArrayBuffer = await decrypt(key, encryptedArrayBuffer)\n const plaintextString = arrayBufferToString(plaintextArrayBuffer)\n return plaintextString\n}\n\nconst getPasswordBasedEncryptionKey = async (hkdfKey, salt) => {\n const encryptionKey = await window.crypto.subtle.deriveKey(\n hkdf.getParams(PASSWORD_BASED_ENCRYPTION_KEY, salt),\n hkdfKey,\n getEncryptionKeyParams(),\n !KEY_IS_EXTRACTABLE,\n KEY_WILL_BE_USED_TO\n )\n return encryptionKey\n}\n\nconst generateAndEncryptKeyEncryptionKey = async (key) => {\n const keyEncryptionKey = await generateKey()\n const keyEncryptionKeyRaw = await getRawKeyFromKey(keyEncryptionKey)\n const encryptedKeyEncryptionKey = await encrypt(key, keyEncryptionKeyRaw)\n return [keyEncryptionKey, encryptedKeyEncryptionKey]\n}\n\nexport default {\n getEncryptionKeyParams,\n getCiphertextParams,\n generateIv,\n sliceEncryptedArrayBuffer,\n importKeyFromMaster,\n generateKey,\n getKeyStringFromKey,\n getKeyFromKeyString,\n getRawKeyFromKey,\n getKeyFromRawKey,\n encrypt,\n encryptJson,\n encryptString,\n decrypt,\n decryptJson,\n decryptString,\n getPasswordBasedEncryptionKey,\n generateAndEncryptKeyEncryptionKey,\n RAW_KEY_TYPE,\n KEY_WILL_BE_USED_TO,\n}\n", + "import DH from 'diffie-hellman'\nimport aesGcm from './aes-gcm'\nimport hkdf from './hkdf'\nimport sha256 from './sha-256'\nimport { hexStringToArrayBuffer } from './utils'\nimport authApi from '../api/auth'\n\nconst KEY_IS_EXTRACTABLE = true\nconst KEY_WILL_BE_USED_TO = ['encrypt'] // unused\nconst DIFFIE_HELLMAN_KEY_NAME = 'diffie-hellman'\n\n// RFC 3526 detailing publicly known 2048 bit safe prime: https://www.ietf.org/rfc/rfc3526.txt\nconst PRIME = hexStringToArrayBuffer('ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff')\nconst GENERATOR = [2]\n\n// get public key from the server to allow developers to easily swap out default server with their own\n// server running userbase-server\nlet serverPublicKey = null\nconst getServerPublicKey = async () => {\n if (serverPublicKey) {\n return serverPublicKey\n } else {\n serverPublicKey = await authApi.getServerPublicKey() // eslint-disable-line require-atomic-updates\n return serverPublicKey\n }\n}\n\nconst setPrivateKeyAndGenerateKeys = (diffieHellman, privateKey) => {\n diffieHellman.setPrivateKey(privateKey)\n diffieHellman.generateKeys()\n return diffieHellman\n}\n\nconst createDiffieHellman = (privateKey) => {\n const diffieHellman = DH.createDiffieHellman(PRIME, GENERATOR)\n return setPrivateKeyAndGenerateKeys(diffieHellman, privateKey)\n}\n\nconst getSharedKey = async (privateKey, otherPublicKey) => {\n const diffieHellman = createDiffieHellman(privateKey)\n const sharedSecret = diffieHellman.computeSecret(otherPublicKey)\n\n const sharedRawKey = await sha256.hash(sharedSecret)\n const sharedKey = await aesGcm.getKeyFromRawKey(sharedRawKey)\n return sharedKey\n}\n\nconst getPublicKey = (privateKey) => {\n const diffieHellman = createDiffieHellman(privateKey)\n return diffieHellman.getPublicKey()\n}\n\nconst getSharedKeyWithServer = async (privateKey) => {\n const sharedKey = await getSharedKey(privateKey, new Uint8Array(await getServerPublicKey()))\n return sharedKey\n}\n\nconst importKeyFromMaster = async (masterKey, salt) => {\n const privateKey = await window.crypto.subtle.deriveKey(\n hkdf.getParams(DIFFIE_HELLMAN_KEY_NAME, salt),\n masterKey,\n aesGcm.getEncryptionKeyParams(), // DH not supported, using raw AES key as secret instead\n KEY_IS_EXTRACTABLE,\n KEY_WILL_BE_USED_TO\n )\n\n const rawPrivateKey = await aesGcm.getRawKeyFromKey(privateKey)\n return rawPrivateKey\n}\n\nexport default {\n getPublicKey,\n getSharedKey,\n getSharedKeyWithServer,\n importKeyFromMaster,\n}\n", + "import base64 from 'base64-arraybuffer'\nimport sha256 from './sha-256'\nimport hkdf from './hkdf'\nimport aesGcm from './aes-gcm'\nimport { stringToArrayBuffer, arrayBufferToString } from './utils'\n\nconst ECDSA_ALGORITHM_NAME = 'ECDSA'\nconst KEY_IS_EXTRACTABLE = true\nconst KEY_PAIR_WILL_BE_USED_TO = ['sign', 'verify']\nconst PRIVATE_KEY_WILL_BE_USED_TO = ['sign']\nconst PRIVATE_KEY_TYPE = 'jwk' // pkcs8 not supported in firefox, must use jwk\nconst PUBLIC_KEY_WILL_BE_USED_TO = ['verify']\nconst PUBLIC_KEY_TYPE = 'spki'\n\nconst ECDSA_KEY_ENCRYPTION_KEY = 'ecdsa-key-encryption-key'\n\n/**\n * NIST recommendation:\n *\n * 128-bit security provided with 256-bit key size\n *\n * Pg. 55\n * https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-57pt1r5.pdf\n *\n **/\nconst NAMED_CURVE = 'P-256'\n\nconst ECDSA_PARAMS = {\n name: ECDSA_ALGORITHM_NAME,\n namedCurve: NAMED_CURVE\n}\n\nconst ECDSA_SIGNING_PARAMS = {\n name: ECDSA_ALGORITHM_NAME,\n hash: { name: sha256.HASH_ALGORITHM_NAME }\n}\n\nconst generateKeyPair = async () => {\n const keyPair = await window.crypto.subtle.generateKey(\n ECDSA_PARAMS,\n KEY_IS_EXTRACTABLE,\n KEY_PAIR_WILL_BE_USED_TO\n )\n return keyPair\n}\n\nconst getRawPrivateKeyFromPrivateKey = async (privateKey) => {\n const jwkPrivateKey = await window.crypto.subtle.exportKey(PRIVATE_KEY_TYPE, privateKey)\n const rawPrivateKey = stringToArrayBuffer(JSON.stringify(jwkPrivateKey))\n return rawPrivateKey\n}\n\nconst getPrivateKeyFromRawPrivateKey = async (rawPrivateKey) => {\n const jwkPrivateKey = JSON.parse(arrayBufferToString(rawPrivateKey))\n const privateKey = await window.crypto.subtle.importKey(\n PRIVATE_KEY_TYPE,\n jwkPrivateKey,\n ECDSA_PARAMS,\n KEY_IS_EXTRACTABLE,\n PRIVATE_KEY_WILL_BE_USED_TO,\n )\n\n return privateKey\n}\n\nconst getPublicKeyFromRawPublicKey = async (rawPublicKey) => {\n const publicKey = await window.crypto.subtle.importKey(\n PUBLIC_KEY_TYPE,\n rawPublicKey,\n ECDSA_PARAMS,\n KEY_IS_EXTRACTABLE,\n PUBLIC_KEY_WILL_BE_USED_TO\n )\n return publicKey\n}\n\nconst getRawPublicKeyFromPublicKey = async (publicKey) => {\n const rawPublicKey = await window.crypto.subtle.exportKey(PUBLIC_KEY_TYPE, publicKey)\n return rawPublicKey\n}\n\nconst getPublicKeyStringFromPublicKey = async (publicKey) => {\n const rawPublicKey = await getRawPublicKeyFromPublicKey(publicKey)\n const publicKeyString = base64.encode(rawPublicKey)\n return publicKeyString\n}\n\nconst getPublicKeyFromPrivateKey = async (privateKey) => {\n const jwkPrivateKey = await window.crypto.subtle.exportKey('jwk', privateKey)\n\n // delete private key data\n delete jwkPrivateKey.d\n\n // set public key key_ops to enable import as public key\n jwkPrivateKey.key_ops = PUBLIC_KEY_WILL_BE_USED_TO\n\n const publicKey = await window.crypto.subtle.importKey(\n 'jwk',\n jwkPrivateKey, // technically this now has same values as the public key would\n ECDSA_PARAMS,\n KEY_IS_EXTRACTABLE,\n PUBLIC_KEY_WILL_BE_USED_TO\n )\n\n return publicKey\n}\n\nconst importEcdsaKeyEncryptionKeyFromMaster = async (masterKey, salt) => {\n const keyEncryptionKey = await aesGcm.importKeyFromMaster(masterKey, salt, ECDSA_KEY_ENCRYPTION_KEY)\n return keyEncryptionKey\n}\n\nconst generateEcdsaKeyData = async (masterKey) => {\n // need to generate new key pair because cannot derive ECDSA key pair using HKDF in WebCrypto\n const ecdsaKeyPair = await generateKeyPair()\n\n // derive a key encryption key using HKDF to encrypt the ECDSA private key and store it on server\n const ecdsaKeyEncryptionKeySalt = hkdf.generateSalt()\n const ecdsaKeyEncryptionKey = await importEcdsaKeyEncryptionKeyFromMaster(masterKey, ecdsaKeyEncryptionKeySalt)\n const ecdsaRawPrivateKey = await getRawPrivateKeyFromPrivateKey(ecdsaKeyPair.privateKey)\n const encryptedEcdsaPrivateKey = await aesGcm.encrypt(ecdsaKeyEncryptionKey, ecdsaRawPrivateKey)\n\n return {\n ecdsaPrivateKey: ecdsaKeyPair.privateKey,\n ecdsaPublicKey: await getPublicKeyStringFromPublicKey(ecdsaKeyPair.publicKey),\n encryptedEcdsaPrivateKey: base64.encode(encryptedEcdsaPrivateKey),\n ecdsaKeyEncryptionKeySalt: base64.encode(ecdsaKeyEncryptionKeySalt),\n }\n}\n\nconst sign = async (privateKey, data) => {\n const signature = await window.crypto.subtle.sign(\n ECDSA_SIGNING_PARAMS,\n privateKey,\n data\n )\n return signature\n}\n\nconst signString = async (privateKey, dataString) => {\n const data = stringToArrayBuffer(dataString)\n const signature = await sign(privateKey, data)\n const signatureString = base64.encode(signature)\n return signatureString\n}\n\nconst verify = async (publicKey, signature, data) => {\n const isVerified = await window.crypto.subtle.verify(\n ECDSA_SIGNING_PARAMS,\n publicKey,\n signature,\n data\n )\n return isVerified\n}\n\nconst verifyString = async (publicKey, signatureString, dataString) => {\n const data = stringToArrayBuffer(dataString)\n const signature = base64.decode(signatureString)\n const isVerified = await verify(publicKey, signature, data)\n return isVerified\n}\n\nexport default {\n generateEcdsaKeyData,\n importEcdsaKeyEncryptionKeyFromMaster,\n getPrivateKeyFromRawPrivateKey,\n getPublicKeyFromRawPublicKey,\n getRawPublicKeyFromPublicKey,\n getPublicKeyStringFromPublicKey,\n getPublicKeyFromPrivateKey,\n sign,\n signString,\n verify,\n verifyString,\n}\n", + "import base64 from 'base64-arraybuffer'\nimport hkdf from './hkdf'\nimport aesGcm from './aes-gcm'\nimport ecdsa from './ecdsa'\nimport { stringToArrayBuffer, arrayBufferToString } from './utils'\n\nconst ECDH_ALGORITHM_NAME = 'ECDH'\nconst KEY_IS_EXTRACTABLE = true\nconst KEY_WILL_BE_USED_TO = ['deriveKey', 'deriveBits']\nconst PRIVATE_KEY_TYPE = 'jwk' // pkcs8 not supported in firefox, must use jwk\nconst PUBLIC_KEY_TYPE = 'spki'\n\nconst ECDH_KEY_ENCRYPTION_KEY = 'ecdh-key-encryption-key'\n\n/**\n * NIST recommendation:\n *\n * 128-bit security provided with 256-bit key size\n *\n * Pg. 55\n * https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-57pt1r5.pdf\n *\n **/\nconst NAMED_CURVE = 'P-256'\n\nconst ECDH_PARAMS = {\n name: ECDH_ALGORITHM_NAME,\n namedCurve: NAMED_CURVE\n}\n\nconst generateKeyPair = async () => {\n const keyPair = await window.crypto.subtle.generateKey(\n ECDH_PARAMS,\n KEY_IS_EXTRACTABLE,\n KEY_WILL_BE_USED_TO\n )\n return keyPair\n}\n\nconst getRawPrivateKeyFromPrivateKey = async (privateKey) => {\n const jwkPrivateKey = await window.crypto.subtle.exportKey(PRIVATE_KEY_TYPE, privateKey)\n const rawPrivateKey = stringToArrayBuffer(JSON.stringify(jwkPrivateKey))\n return rawPrivateKey\n}\n\nconst getPrivateKeyFromRawPrivateKey = async (rawPrivateKey) => {\n const jwkPrivateKey = JSON.parse(arrayBufferToString(rawPrivateKey))\n const privateKey = await window.crypto.subtle.importKey(\n PRIVATE_KEY_TYPE,\n jwkPrivateKey,\n ECDH_PARAMS,\n KEY_IS_EXTRACTABLE,\n KEY_WILL_BE_USED_TO,\n )\n\n return privateKey\n}\n\nconst getRawPublicKeyFromPublicKey = async (publicKey) => {\n const rawPublicKey = await window.crypto.subtle.exportKey(PUBLIC_KEY_TYPE, publicKey)\n return rawPublicKey\n}\n\nconst getPublicKeyFromRawPublicKey = async (rawPublicKey) => {\n const publicKey = await window.crypto.subtle.importKey(\n PUBLIC_KEY_TYPE,\n rawPublicKey,\n ECDH_PARAMS,\n KEY_IS_EXTRACTABLE,\n [], // empty list ok\n )\n\n return publicKey\n}\n\nconst importEcdhKeyEncryptionKeyFromMaster = async (masterKey, salt) => {\n const keyEncryptionKey = await aesGcm.importKeyFromMaster(masterKey, salt, ECDH_KEY_ENCRYPTION_KEY)\n return keyEncryptionKey\n}\n\nconst generateEcdhKeyData = async (masterKey, ecdsaPrivateKey) => {\n // need to generate new key pair because cannot derive ECDH key pair using HKDF in WebCrypto\n const ecdhKeyPair = await generateKeyPair()\n\n // derive a key encryption key using HKDF to encrypt the ECDH private key and store it on server\n const ecdhKeyEncryptionKeySalt = hkdf.generateSalt()\n const ecdhKeyEncryptionKey = await importEcdhKeyEncryptionKeyFromMaster(masterKey, ecdhKeyEncryptionKeySalt)\n const ecdhRawPrivateKey = await getRawPrivateKeyFromPrivateKey(ecdhKeyPair.privateKey)\n const encryptedEcdhPrivateKey = await aesGcm.encrypt(ecdhKeyEncryptionKey, ecdhRawPrivateKey)\n\n const ecdhPublicKey = await getRawPublicKeyFromPublicKey(ecdhKeyPair.publicKey)\n const signedEcdhPublicKey = await ecdsa.sign(ecdsaPrivateKey, ecdhPublicKey)\n\n return {\n ecdhPrivateKey: ecdhKeyPair.privateKey,\n ecdhPublicKey: base64.encode(ecdhPublicKey),\n encryptedEcdhPrivateKey: base64.encode(encryptedEcdhPrivateKey),\n signedEcdhPublicKey: base64.encode(signedEcdhPublicKey),\n ecdhKeyEncryptionKeySalt: base64.encode(ecdhKeyEncryptionKeySalt),\n }\n}\n\nconst computeSharedKeyEncryptionKey = async (otherEcdhPublicKey, ecdhPrivateKey) => {\n const sharedKeyEncryptionKey = await window.crypto.subtle.deriveKey(\n {\n name: ECDH_ALGORITHM_NAME,\n namedCurve: NAMED_CURVE,\n public: otherEcdhPublicKey\n },\n ecdhPrivateKey,\n aesGcm.getEncryptionKeyParams(),\n !KEY_IS_EXTRACTABLE,\n aesGcm.KEY_WILL_BE_USED_TO\n )\n\n return sharedKeyEncryptionKey\n}\n\nexport default {\n generateKeyPair,\n generateEcdhKeyData,\n importEcdhKeyEncryptionKeyFromMaster,\n getPrivateKeyFromRawPrivateKey,\n getRawPublicKeyFromPublicKey,\n getPublicKeyFromRawPublicKey,\n computeSharedKeyEncryptionKey,\n}\n", + "import base64 from 'base64-arraybuffer'\nimport hkdf from './hkdf'\nimport sha256 from './sha-256'\nimport { stringToArrayBuffer } from './utils'\n\nconst HMAC_KEY_NAME = 'authentication'\n\nconst ALGORITHM_NAME = 'HMAC'\nconst KEY_IS_EXTRACTABLE = false\nconst KEY_WILL_BE_USED_TO_SIGN = ['sign']\nconst KEY_WILL_BE_USED_TO_SIGN_AND_VERIFY = ['sign', 'verify']\n\nconst importKeyFromMaster = async (masterKey, salt) => {\n const hmacKey = await window.crypto.subtle.deriveKey(\n hkdf.getParams(HMAC_KEY_NAME, salt),\n masterKey,\n {\n name: ALGORITHM_NAME,\n hash: {\n name: sha256.HASH_ALGORITHM_NAME\n },\n length: 512 // need to explicitly set length for WebCrypto node polyfill (see: https://github.com/PeculiarVentures/webcrypto-core/issues/31)\n },\n KEY_IS_EXTRACTABLE,\n KEY_WILL_BE_USED_TO_SIGN\n )\n return hmacKey\n}\n\nconst importKeyFromRawBits = async (rawBits) => {\n const hmacKey = await window.crypto.subtle.importKey(\n 'raw',\n rawBits,\n {\n name: ALGORITHM_NAME,\n hash: {\n name: sha256.HASH_ALGORITHM_NAME\n },\n length: 256 // need to explicitly set length for WebCrypto node polyfill (see: https://github.com/PeculiarVentures/webcrypto-core/issues/31)\n },\n KEY_IS_EXTRACTABLE,\n KEY_WILL_BE_USED_TO_SIGN_AND_VERIFY\n )\n return hmacKey\n}\n\n/**\n *\n * @param {CryptoKey} key\n * @param {String} data\n */\nconst sign = async (key, data) => {\n const result = await window.crypto.subtle.sign(\n {\n name: ALGORITHM_NAME,\n },\n key,\n data\n )\n return result\n}\n\n/**\n *\n * @param {CryptoKey} key\n * @param {String} data\n */\nconst signString = async (key, data) => {\n const result = await sign(key, stringToArrayBuffer(data))\n return base64.encode(result)\n}\n\nexport default {\n importKeyFromMaster,\n importKeyFromRawBits,\n sign,\n signString\n}\n", + "import aesGcm from './aes-gcm'\nimport diffieHellman from './diffie-hellman'\nimport ecdsa from './ecdsa'\nimport ecdh from './ecdh'\nimport sha256 from './sha-256'\nimport hmac from './hmac'\nimport hkdf from './hkdf'\nimport scrypt from './scrypt'\n\nconst SEED_BYTE_SIZE = 32 // 256 / 8\nconst generateSeed = () => window.crypto.getRandomValues(new Uint8Array(SEED_BYTE_SIZE))\n\nexport default {\n generateSeed,\n aesGcm,\n diffieHellman,\n ecdsa,\n ecdh,\n sha256,\n hmac,\n hkdf,\n scrypt\n}\n", + "import scryptJs from 'scrypt-js'\nimport base64 from 'base64-arraybuffer'\nimport { stringToArrayBuffer } from './utils'\n\n/**\n *\n * From the Scrypt paper:\n *\n * \"100ms is a reasonable upper bound on the delay which should be\n * cryptographically imposed on interactive logins\"\n *\n * Pg. 13\n * https://www.tarsnap.com/scrypt/scrypt.pdf\n *\n * With an optimized Scrypt algorithm running on a 3.1 GHz Intel Core i5,\n * N = 32768 is the highest work factor that takes <100ms for the\n * algorithm to run. Thus, it's the latest recommended work factor.\n *\n * Source: https://blog.filippo.io/the-scrypt-parameters/\n *\n * However, we are not running an optimized version of the algorithm on a\n * single machine. Users are running a pure js version written for the browser.\n * Safari, for example, takes >6 seconds to run when N = 32768 on a 2.5 GHz\n * Intel Core i5. A higher end CPU can only shave around 1 second off that time.\n * Further, it takes over 1s to run in Firefox, and over 500ms to run in Chrome.\n * This is an unacceptably slow interactive login delay to impose on users.\n *\n * Thus, we are going with N = 16384 to ensure interactive logins\n * are closer to the reasonable delay the function will impose on users,\n * while still maintaining a high level of security.\n *\n **/\nconst N = 16384 // 16mb\nconst r = 8\nconst p = 1\nconst dkLen = 32\n\n/**\n * NIST recommendation:\n *\n * \"The length of the randomly-generated portion of the salt shall be at least 128 bits.\"\n *\n * Section 5.1\n * https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-132.pdf\n *\n **/\nconst SALT_LENGTH = 16\nconst generateSalt = () => window.crypto.getRandomValues(new Uint8Array(SALT_LENGTH))\n\nconst hash = async (passwordString, salt, passwordHashAlgo = scryptJs.scrypt) => {\n const passwordArrayBuffer = new Uint8Array(stringToArrayBuffer(passwordString))\n const passwordHash = await passwordHashAlgo(passwordArrayBuffer, salt, N, r, p, dkLen)\n return base64.encode(passwordHash)\n}\n\nexport default {\n generateSalt,\n hash,\n}\n", + "export const readArrayBufferAsString = (arrayBuffer) => {\n return new Promise(resolve => {\n let reader = new FileReader()\n reader.onload = () => resolve(reader.result)\n reader.readAsText(new Blob([arrayBuffer]))\n })\n}\n\nconst removeProtocolFromEndpoint = (endpoint) => {\n const http = 'http://'\n const https = 'https://'\n\n if (endpoint.substring(0, http.length) === http) {\n return endpoint.substring(http.length)\n } else if (endpoint.substring(0, https.length) === https) {\n return endpoint.substring(https.length)\n } else {\n return endpoint\n }\n}\n\nexport const getProtocolFromEndpoint = (endpoint) => {\n return endpoint.split(':')[0]\n}\n\nexport const getWsUrl = (endpoint) => {\n const host = removeProtocolFromEndpoint(endpoint)\n const protocol = getProtocolFromEndpoint(endpoint)\n\n return ((protocol === 'https') ?\n 'wss://' : 'ws://') + host\n}\n\nexport const byteSizeOfString = (string) => {\n return string.length * 2\n}\n\nexport const objectHasOwnProperty = (object, property) => {\n return Object.prototype.hasOwnProperty.call(object, property)\n}\n\n// source: http://code.iamkate.com/javascript/queues\nexport function Queue() {\n let queue = []\n let offset = 0\n\n this.getLength = () => queue.length - offset\n\n this.isEmpty = () => queue.length === 0\n\n this.enqueue = (item) => {\n queue.push(item)\n return this.getLength()\n }\n\n this.dequeue = () => {\n // get item from front of the queue\n const item = queue[offset]\n\n offset += 1\n\n // garbage collect unused space in queue when it grows large\n if (offset * 2 > queue.length) {\n queue = queue.slice(offset)\n offset = 0\n }\n\n return item\n }\n\n this.peek = () => queue[offset]\n}\n", + "// load the worker using inline JS so clients can avoid needing to load worker from a separate file\n// https://stackoverflow.com/a/19201292\nconst newWorker = () => {\n const workerFunction = function () {\n self.onmessage = function (e) {\n const {\n compress,\n decompress,\n data,\n } = e.data\n\n // copied from LZString, since can't load module from inside web worker without loading a separate file\n // https://github.com/pieroxy/lz-string/blob/b2e0b270a9f3cf330b778b777385fcba384a1a02/libs/lz-string.min.js\n const LZString = function () { function o(o, r) { if (!t[o]) { t[o] = {}; for (var n = 0; n < o.length; n++)t[o][o.charAt(n)] = n } return t[o][r] } var r = String.fromCharCode, n = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\", e = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$\", t = {}, i = { compressToBase64: function (o) { if (null == o) return \"\"; var r = i._compress(o, 6, function (o) { return n.charAt(o) }); switch (r.length % 4) { default: case 0: return r; case 1: return r + \"===\"; case 2: return r + \"==\"; case 3: return r + \"=\" } }, decompressFromBase64: function (r) { return null == r ? \"\" : \"\" == r ? null : i._decompress(r.length, 32, function (e) { return o(n, r.charAt(e)) }) }, compressToUTF16: function (o) { return null == o ? \"\" : i._compress(o, 15, function (o) { return r(o + 32) }) + \" \" }, decompressFromUTF16: function (o) { return null == o ? \"\" : \"\" == o ? null : i._decompress(o.length, 16384, function (r) { return o.charCodeAt(r) - 32 }) }, compressToUint8Array: function (o) { for (var r = i.compress(o), n = new Uint8Array(2 * r.length), e = 0, t = r.length; t > e; e++) { var s = r.charCodeAt(e); n[2 * e] = s >>> 8, n[2 * e + 1] = s % 256 } return n }, decompressFromUint8Array: function (o) { if (null === o || void 0 === o) return i.decompress(o); for (var n = new Array(o.length / 2), e = 0, t = n.length; t > e; e++)n[e] = 256 * o[2 * e] + o[2 * e + 1]; var s = []; return n.forEach(function (o) { s.push(r(o)) }), i.decompress(s.join(\"\")) }, compressToEncodedURIComponent: function (o) { return null == o ? \"\" : i._compress(o, 6, function (o) { return e.charAt(o) }) }, decompressFromEncodedURIComponent: function (r) { return null == r ? \"\" : \"\" == r ? null : (r = r.replace(/ /g, \"+\"), i._decompress(r.length, 32, function (n) { return o(e, r.charAt(n)) })) }, compress: function (o) { return i._compress(o, 16, function (o) { return r(o) }) }, _compress: function (o, r, n) { if (null == o) return \"\"; var e, t, i, s = {}, p = {}, u = \"\", c = \"\", a = \"\", l = 2, f = 3, h = 2, d = [], m = 0, v = 0; for (i = 0; i < o.length; i += 1)if (u = o.charAt(i), Object.prototype.hasOwnProperty.call(s, u) || (s[u] = f++, p[u] = !0), c = a + u, Object.prototype.hasOwnProperty.call(s, c)) a = c; else { if (Object.prototype.hasOwnProperty.call(p, a)) { if (a.charCodeAt(0) < 256) { for (e = 0; h > e; e++)m <<= 1, v == r - 1 ? (v = 0, d.push(n(m)), m = 0) : v++; for (t = a.charCodeAt(0), e = 0; 8 > e; e++)m = m << 1 | 1 & t, v == r - 1 ? (v = 0, d.push(n(m)), m = 0) : v++, t >>= 1 } else { for (t = 1, e = 0; h > e; e++)m = m << 1 | t, v == r - 1 ? (v = 0, d.push(n(m)), m = 0) : v++, t = 0; for (t = a.charCodeAt(0), e = 0; 16 > e; e++)m = m << 1 | 1 & t, v == r - 1 ? (v = 0, d.push(n(m)), m = 0) : v++, t >>= 1 } l--, 0 == l && (l = Math.pow(2, h), h++), delete p[a] } else for (t = s[a], e = 0; h > e; e++)m = m << 1 | 1 & t, v == r - 1 ? (v = 0, d.push(n(m)), m = 0) : v++, t >>= 1; l--, 0 == l && (l = Math.pow(2, h), h++), s[c] = f++, a = String(u) } if (\"\" !== a) { if (Object.prototype.hasOwnProperty.call(p, a)) { if (a.charCodeAt(0) < 256) { for (e = 0; h > e; e++)m <<= 1, v == r - 1 ? (v = 0, d.push(n(m)), m = 0) : v++; for (t = a.charCodeAt(0), e = 0; 8 > e; e++)m = m << 1 | 1 & t, v == r - 1 ? (v = 0, d.push(n(m)), m = 0) : v++, t >>= 1 } else { for (t = 1, e = 0; h > e; e++)m = m << 1 | t, v == r - 1 ? (v = 0, d.push(n(m)), m = 0) : v++, t = 0; for (t = a.charCodeAt(0), e = 0; 16 > e; e++)m = m << 1 | 1 & t, v == r - 1 ? (v = 0, d.push(n(m)), m = 0) : v++, t >>= 1 } l--, 0 == l && (l = Math.pow(2, h), h++), delete p[a] } else for (t = s[a], e = 0; h > e; e++)m = m << 1 | 1 & t, v == r - 1 ? (v = 0, d.push(n(m)), m = 0) : v++, t >>= 1; l--, 0 == l && (l = Math.pow(2, h), h++) } for (t = 2, e = 0; h > e; e++)m = m << 1 | 1 & t, v == r - 1 ? (v = 0, d.push(n(m)), m = 0) : v++, t >>= 1; for (; ;) { if (m <<= 1, v == r - 1) { d.push(n(m)); break } v++ } return d.join(\"\") }, decompress: function (o) { return null == o ? \"\" : \"\" == o ? null : i._decompress(o.length, 32768, function (r) { return o.charCodeAt(r) }) }, _decompress: function (o, n, e) { var t, i, s, p, u, c, a, l, f = [], h = 4, d = 4, m = 3, v = \"\", w = [], A = { val: e(0), position: n, index: 1 }; for (i = 0; 3 > i; i += 1)f[i] = i; for (p = 0, c = Math.pow(2, 2), a = 1; a != c;)u = A.val & A.position, A.position >>= 1, 0 == A.position && (A.position = n, A.val = e(A.index++)), p |= (u > 0 ? 1 : 0) * a, a <<= 1; switch (t = p) { case 0: for (p = 0, c = Math.pow(2, 8), a = 1; a != c;)u = A.val & A.position, A.position >>= 1, 0 == A.position && (A.position = n, A.val = e(A.index++)), p |= (u > 0 ? 1 : 0) * a, a <<= 1; l = r(p); break; case 1: for (p = 0, c = Math.pow(2, 16), a = 1; a != c;)u = A.val & A.position, A.position >>= 1, 0 == A.position && (A.position = n, A.val = e(A.index++)), p |= (u > 0 ? 1 : 0) * a, a <<= 1; l = r(p); break; case 2: return \"\" }for (f[3] = l, s = l, w.push(l); ;) { if (A.index > o) return \"\"; for (p = 0, c = Math.pow(2, m), a = 1; a != c;)u = A.val & A.position, A.position >>= 1, 0 == A.position && (A.position = n, A.val = e(A.index++)), p |= (u > 0 ? 1 : 0) * a, a <<= 1; switch (l = p) { case 0: for (p = 0, c = Math.pow(2, 8), a = 1; a != c;)u = A.val & A.position, A.position >>= 1, 0 == A.position && (A.position = n, A.val = e(A.index++)), p |= (u > 0 ? 1 : 0) * a, a <<= 1; f[d++] = r(p), l = d - 1, h--; break; case 1: for (p = 0, c = Math.pow(2, 16), a = 1; a != c;)u = A.val & A.position, A.position >>= 1, 0 == A.position && (A.position = n, A.val = e(A.index++)), p |= (u > 0 ? 1 : 0) * a, a <<= 1; f[d++] = r(p), l = d - 1, h--; break; case 2: return w.join(\"\") }if (0 == h && (h = Math.pow(2, m), m++), f[l]) v = f[l]; else { if (l !== d) return null; v = s + s.charAt(0) } w.push(v), f[d++] = s + v.charAt(0), h--, s = v, 0 == h && (h = Math.pow(2, m), m++) } } }; return i }()\n\n if (compress) postMessage(LZString.compress(data))\n else if (decompress) postMessage(LZString.decompress(data))\n }\n }\n\n const blobURL = URL.createObjectURL(new Blob(\n ['(', workerFunction.toString(), ')()'],\n { type: 'application/javascript' }\n ))\n\n const worker = new Worker(blobURL)\n\n URL.revokeObjectURL(blobURL)\n return worker\n}\n\n// compress and decompress inside a worker because large amounts of data freeze the DOM\nexport const compress = async (data) => {\n const worker = newWorker()\n return new Promise((resolve) => {\n worker.onmessage = (e) => {\n resolve(e.data)\n worker.terminate()\n }\n worker.postMessage({ compress: true, data })\n })\n}\n\nexport const decompress = async (data) => {\n const worker = newWorker()\n return new Promise((resolve) => {\n worker.onmessage = (e) => {\n resolve(e.data)\n worker.terminate()\n }\n worker.postMessage({ decompress: true, data })\n })\n}\n", + "import config from '../config'\nimport { processXhr } from './utils'\n\nconst TIMEOUT = 30 * 1000\n\nexport const uploadBundleChunk = async (userId, databaseId, seqNo, bundleId, chunkNo, chunk) => {\n return new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest()\n\n const method = 'POST'\n const url = `${config.getEndpoint()}/api/bundle-chunk?userbaseJsVersion=${config.USERBASE_JS_VERSION}&` +\n `userId=${userId}&` +\n `databaseId=${databaseId}&` +\n `seqNo=${seqNo}&` +\n `bundleId=${bundleId}&` +\n `chunkNumber=${chunkNo}`\n\n xhr.open(method, url)\n xhr.send(new Uint8Array(chunk)) // Uint8Array view prevents deprecation warning in Safari\n\n processXhr(xhr, resolve, reject, TIMEOUT)\n })\n}\n", + "import base64 from 'base64-arraybuffer'\nimport uuidv4 from 'uuid/v4'\nimport localData from './localData'\nimport crypto from './Crypto'\nimport { getWsUrl } from './utils'\nimport statusCodes from './statusCodes'\nimport config from './config'\nimport errors from './errors'\nimport { appendBuffers, arrayBufferToString, stringToArrayBuffer } from './Crypto/utils'\nimport { compress, decompress } from './worker'\nimport { uploadBundleChunk } from './api/db'\n\nconst wsAlreadyConnected = 'Web Socket already connected'\n\nconst BACKOFF_RETRY_DELAY = 1000\nconst MAX_RETRY_DELAY = 1000 * 30\n\nconst BUNDLE_CHUNK_SIZE = 1024 * 512 // 512kb\nconst BUNDLE_CHUNKS_PER_BATCH = 10\n\nconst WS_REQUEST_TIMEOUT = 30 * 1000\n\nconst clientId = uuidv4() // only 1 client ID per browser tab (assumes code does not reload)\n\nclass RequestFailed extends Error {\n constructor(action, e, ...params) {\n super(...params)\n\n this.name = `RequestFailed: ${action}`\n this.message = e.message\n this.status = e.status || (e.message === 'timeout' && statusCodes['Gateway Timeout'])\n this.response = e.status && e\n }\n}\n\nclass WebSocketError extends Error {\n constructor(message, username, e, ...params) {\n super(...params)\n\n this.name = 'WebSocket error'\n this.message = message\n this.username = username\n this.e = e\n }\n}\n\nclass Connection {\n constructor() {\n this.init()\n }\n\n init(resolveConnection, rejectConnection, session, seedString, rememberMe, changePassword, state, encryptionMode) {\n if (this.pingTimeout) clearTimeout(this.pingTimeout)\n\n for (const property of Object.keys(this)) {\n delete this[property]\n }\n\n this.ws = null\n this.connected = false\n\n this.resolveConnection = resolveConnection\n this.rejectConnection = rejectConnection\n this.connectionResolved = false\n\n this.session = {\n username: session && session.username,\n sessionId: session && session.sessionId,\n creationDate: session && session.creationDate,\n expirationDate: session && session.expirationDate,\n userId: session && session.userId,\n authToken: session && session.authToken,\n }\n\n this.seedString = seedString\n this.changePassword = changePassword\n this.keys = {\n init: false,\n salts: {}\n }\n\n this.userData = {\n stripeData: {}\n }\n\n this.rememberMe = rememberMe\n\n this.requests = {}\n\n this.state = state || {\n dbNameToHash: {},\n databases: {}, // used when openDatabase is called with databaseName\n databasesByDbId: {}, // used when openDatabase is called with databaseId\n shareTokenIdToDbId: {}, // used when openDatabase is called with shareToken\n }\n\n this.encryptionMode = encryptionMode\n }\n\n connect(session, seedString = null, rememberMe, changePassword, reconnectDelay, state) {\n if (this.connected) throw new WebSocketError(wsAlreadyConnected, this.session.username)\n\n return new Promise((resolve, reject) => {\n let timeout = false\n\n const timeoutToOpenWebSocket = setTimeout(\n () => {\n if (!this.connected && !this.reconnecting) {\n timeout = true\n reject(new WebSocketError('timeout'))\n }\n },\n 10000\n )\n\n const url = `${getWsUrl(config.getEndpoint())}/api?appId=${config.getAppId()}&sessionId=${session.sessionId}&clientId=${clientId}&userbaseJsVersion=${config.USERBASE_JS_VERSION}`\n\n const ws = new WebSocket(url)\n\n ws.onopen = async () => {\n if (timeout) return\n clearTimeout(timeoutToOpenWebSocket)\n }\n\n ws.onmessage = async (e) => {\n if (timeout) return\n\n try {\n const message = JSON.parse(e.data)\n const route = message.route\n\n switch (route) {\n case 'Ping': {\n this.heartbeat()\n\n const action = 'Pong'\n this.ws.send(JSON.stringify({ action }))\n break\n }\n\n case 'Connection': {\n const { encryptionMode } = message\n this.init(resolve, reject, session, seedString, rememberMe, changePassword, state, encryptionMode)\n this.ws = ws\n this.heartbeat()\n this.connected = true\n\n // seedString not present on initial connection when still need to change password\n if (seedString) {\n const {\n keySalts,\n validationMessage,\n ecKeyData,\n encryptedValidationMessage,\n } = message\n\n this.keys.salts = keySalts\n\n this.validationMessage = validationMessage\n this.ecKeyData = ecKeyData\n\n // provided by userbase-server for users who have not yet generated their ECDSA key and\n // still only have a DH key\n if (encryptedValidationMessage) this.encryptedValidationMessage = new Uint8Array(encryptedValidationMessage.data)\n\n try {\n await this.setKeys(this.seedString)\n const userData = await this.validateKey()\n this.userData = userData\n } catch (e) {\n if ((e && e.name === 'OperationError') || e instanceof DOMException) throw new Error('Invalid seed')\n else throw e\n }\n\n this.keys.init = true\n }\n\n this.resolveConnection()\n this.connectionResolved = true\n break\n }\n\n case 'ApplyTransactions': {\n const dbId = message.dbId\n const dbNameHash = message.dbNameHash\n\n // if owner, must have opened the database via databaseName\n const database = message.isOwner\n ? this.state.databases[dbNameHash]\n : this.state.databasesByDbId[dbId]\n\n if (!database) throw new Error('Missing database')\n\n // queue guarantees transactions will be applied in the order they are received from the server\n if (database.applyTransactionsQueue.isEmpty()) {\n\n // take a spot in the queue and proceed applying so the next caller knows queue is not empty\n database.applyTransactionsQueue.enqueue(null)\n } else {\n\n // wait until prior batch in queue finishes applying successfully\n await new Promise(resolve => {\n const startApplyingThisBatchOfTransactions = resolve\n database.applyTransactionsQueue.enqueue(startApplyingThisBatchOfTransactions)\n })\n }\n\n const openingDatabase = (message.dbNameHash && (message.dbKey || message.plaintextDbKey)) || message.shareTokenEncryptedDbKey\n if (openingDatabase && (!database.dbKeyString || !database.dbKey)) {\n const dbKeyString = message.plaintextDbKey || (message.dbKey\n ? await crypto.aesGcm.decryptString(this.keys.encryptionKey, message.dbKey)\n : await database.decryptShareTokenEncryptedDbKey(message.shareTokenEncryptedDbKey, message.shareTokenEncryptionKeySalt)\n )\n database.dbKeyString = dbKeyString\n database.dbKey = await crypto.aesGcm.getKeyFromKeyString(dbKeyString)\n }\n\n if (!database.dbKey) throw new Error('Missing db key')\n\n if (message.writers) {\n database.attributionEnabled = true\n for (const { userId, username } of message.writers) {\n database.usernamesByUserId.set(userId, username)\n }\n }\n\n // server is sending bundle in chunks, wait until it sends the entire bundle and client applies it\n if (message.waitForFullBundle) {\n if (!database.finishedWaitingForBundle) {\n await new Promise(resolve => database.finishedWaitingForBundle = resolve)\n }\n\n // rebuild bundle from the chunks\n try {\n const bundle = await this.rebuildBundle(database, message.bundleSeqNo, message.encryptedBundleEncryptionKey)\n await database.applyBundle(bundle, message.bundleSeqNo)\n } catch (e) {\n window.alert(`Oops! Something went wrong. Please contact the site administrator with this issue (${dbId}).\\n\\n` + e)\n throw e\n }\n }\n\n const newTransactions = message.transactionLog\n await database.applyTransactions(newTransactions, message.ownerId, dbId, dbNameHash)\n\n if (message.buildBundle) {\n this.buildBundle(database)\n }\n\n // start applying next batch in queue when this one is finished applying successfully\n database.applyTransactionsQueue.dequeue()\n if (!database.applyTransactionsQueue.isEmpty()) {\n const startApplyingNextBatchInQueue = database.applyTransactionsQueue.peek()\n startApplyingNextBatchInQueue()\n }\n\n break\n }\n\n case 'DownloadBundleChunk': {\n const { dbId, dbNameHash, isOwner, bundleSeqNo, isFirstChunk, isLastChunk, chunk } = message\n\n // if owner, must have opened the database via databaseName\n const database = isOwner\n ? this.state.databases[dbNameHash]\n : this.state.databasesByDbId[dbId]\n\n if (!database) throw new Error('Missing database')\n\n // assumes server will always send first chunk first, and last chunk last\n if (isFirstChunk) database.bundleChunks[bundleSeqNo] = []\n\n database.bundleChunks[bundleSeqNo].push(chunk)\n\n if (isLastChunk) {\n if (database.finishedWaitingForBundle) database.finishedWaitingForBundle()\n else database.finishedWaitingForBundle = true\n }\n\n break\n }\n\n case 'UpdatedUser': {\n this.handleUpdateUser(message.updatedUser)\n break\n }\n\n case 'SignOut':\n case 'UpdateUser':\n case 'DeleteUser':\n case 'CreateDatabase':\n case 'OpenDatabase':\n case 'OpenDatabaseByDatabaseId':\n case 'GetDatabases':\n case 'GetDatabaseUsers':\n case 'Insert':\n case 'Update':\n case 'Delete':\n case 'BatchTransaction':\n case 'InitBundleUpload':\n case 'CompleteBundleUpload':\n case 'GenerateFileId':\n case 'UploadFileChunk':\n case 'CompleteFileUpload':\n case 'GetChunk':\n case 'ValidateKey':\n case 'GetPasswordSalts':\n case 'PurchaseSubscription':\n case 'CancelSubscription':\n case 'ResumeSubscription':\n case 'UpdatePaymentMethod':\n case 'ShareDatabase':\n case 'ShareDatabaseToken':\n case 'AuthenticateShareToken':\n case 'SaveDatabase':\n case 'ModifyDatabasePermissions':\n case 'VerifyUser':\n {\n const requestId = message.requestId\n\n if (!requestId) return console.warn('Missing request id')\n\n const request = this.requests[requestId]\n if (!request) return console.warn(`Request ${requestId} no longer exists!`)\n else if (!request.promiseResolve || !request.promiseReject) return\n\n const response = message.response\n\n const successfulResponse = response && response.status === statusCodes['Success']\n\n if (!successfulResponse) return request.promiseReject(response)\n else return request.promiseResolve(response)\n }\n\n default: {\n console.log('Received unknown message from backend:' + JSON.stringify(message))\n break\n }\n }\n } catch (e) {\n if (!this.connectionResolved) {\n this.close()\n reject(new WebSocketError(e.message, session.username, e))\n } else {\n console.warn('Error handling message: ', e)\n }\n }\n }\n\n ws.onclose = async (e) => {\n if (timeout) return\n\n const serviceRestart = e.code === statusCodes['Service Restart']\n const clientDisconnected = e.code === statusCodes['No Pong Received']\n const attemptToReconnect = serviceRestart || clientDisconnected || !e.wasClean // closed without explicit call to ws.close()\n\n if (attemptToReconnect) {\n const delay = (serviceRestart && !reconnectDelay)\n ? 0\n : (reconnectDelay ? reconnectDelay + BACKOFF_RETRY_DELAY : 1000)\n\n this.reconnecting = true\n await this.reconnect(resolve, reject, session, this.seedString || seedString, rememberMe, changePassword, delay, !this.reconnected && state)\n } else if (e.code === statusCodes['Client Already Connected']) {\n reject(new WebSocketError(wsAlreadyConnected, session.username, e))\n } else {\n this.init()\n }\n }\n\n ws.onerror = () => { } // no-op so node WS implementation doesn't throw not found\n })\n }\n\n async reconnect(resolveConnection, rejectConnection, session, seedString, rememberMe, changePassword, reconnectDelay, currentState) {\n try {\n const retryDelay = Math.min(reconnectDelay, MAX_RETRY_DELAY)\n console.log(`Connection to server lost. Attempting to reconnect in ${retryDelay / 1000} second${retryDelay !== 1000 ? 's' : ''}...`)\n\n const dbsToReopen = []\n const dbsToReopenById = []\n\n // as soon as one reconnect succeeds, resolves all the way up the stack and all reconnects succeed\n resolveConnection(await new Promise((resolve, reject) => setTimeout(\n async () => {\n try {\n // get copy of currently opened databases' memory references to reopen WebSocket with same databases\n const state = currentState || {\n dbNameToHash: { ...this.state.dbNameToHash },\n databases: { ...this.state.databases },\n databasesByDbId: { ...this.state.databasesByDbId },\n shareTokenIdToDbId: { ...this.state.shareTokenIdToDbId },\n }\n\n // mark databases as uninitialized to prevent client from using them until they are reopened\n for (const dbNameHash in state.databases) {\n state.databases[dbNameHash].init = false\n state.databases[dbNameHash].finishedWaitingForBundle = false\n dbsToReopen.push(dbNameHash)\n }\n\n for (const dbId in state.databasesByDbId) {\n state.databasesByDbId[dbId].init = false\n state.databasesByDbId[dbId].finishedWaitingForBundle = false\n dbsToReopenById.push(dbId)\n }\n\n this.init()\n this.reconnecting = true\n\n const result = await this.connect(session, seedString, rememberMe, changePassword, reconnectDelay, state)\n\n this.reconnected = true\n\n // only reopen databases on the first call to reconnect()\n if (!currentState) {\n await this.reopenDatabases(dbsToReopen, dbsToReopenById, 1000)\n console.log('Reconnected!')\n }\n\n resolve(result)\n } catch (e) {\n reject(e)\n }\n },\n retryDelay\n )))\n } catch (e) {\n rejectConnection(e)\n }\n }\n\n async reopenDatabases(dbsToReopen, dbsToReopenById, retryDelay) {\n try {\n const openDatabasePromises = []\n\n // open databases by database name hash\n for (const dbNameHash of dbsToReopen) {\n const database = this.state.databases[dbNameHash]\n\n if (!database.init) {\n const action = 'OpenDatabase'\n const params = { dbNameHash, reopenAtSeqNo: database.lastSeqNo }\n openDatabasePromises.push(this.request(action, params))\n }\n }\n\n // open databases by database ID\n for (const databaseId of dbsToReopenById) {\n const database = this.state.databasesByDbId[databaseId]\n\n if (!database.init) {\n const shareTokenHkdfKey = database.shareTokenHkdfKey\n\n // if opened with shareToken, need to reauthenticate it\n const shareTokenAuthData = shareTokenHkdfKey\n ? await this.authenticateShareToken(database.shareTokenId, shareTokenHkdfKey)\n : {}\n\n const action = 'OpenDatabaseByDatabaseId'\n const params = { databaseId, reopenAtSeqNo: database.lastSeqNo, ...shareTokenAuthData }\n openDatabasePromises.push(this.request(action, params))\n }\n }\n\n await Promise.all(openDatabasePromises)\n } catch (e) {\n\n // keep attempting to reopen on failure\n await new Promise(resolve => setTimeout(\n async () => {\n await this.reopenDatabases(dbsToReopen, dbsToReopenById, retryDelay + BACKOFF_RETRY_DELAY)\n resolve()\n },\n Math.min(retryDelay, MAX_RETRY_DELAY)\n ))\n }\n }\n\n heartbeat() {\n clearTimeout(this.pingTimeout)\n\n const LATENCY_BUFFER = 3000\n\n this.pingTimeout = setTimeout(() => {\n if (this.ws) this.ws.close(statusCodes['No Pong Received'])\n }, 30000 + LATENCY_BUFFER)\n }\n\n close(code) {\n this.ws\n ? this.ws.close(code)\n : this.init()\n }\n\n async signOut() {\n const username = this.session.username\n const connectionResolved = this.connectionResolved\n const rejectConnection = this.rejectConnection\n\n try {\n localData.signOutSession(this.rememberMe, username)\n\n const sessionId = this.session.sessionId\n\n if (this.reconnecting) throw new errors.Reconnecting\n\n const action = 'SignOut'\n const params = { sessionId }\n await this.request(action, params)\n\n this.close()\n\n if (!connectionResolved && rejectConnection) {\n rejectConnection(new WebSocketError('Canceled', username))\n }\n\n } catch (e) {\n if (!connectionResolved && rejectConnection) {\n rejectConnection(new WebSocketError('Canceled', username))\n }\n\n throw e\n }\n }\n\n async setKeys(seedString) {\n if (this.keys.init) return\n if (!seedString) throw new WebSocketError('Missing seed', this.session.username)\n if (!this.keys.salts) throw new WebSocketError('Missing salts', this.session.username)\n if (!this.seedString) this.seedString = seedString\n\n const seed = base64.decode(seedString)\n const masterKey = await crypto.hkdf.importHkdfKey(seed)\n\n const salts = this.keys.salts\n this.keys.encryptionKey = await crypto.aesGcm.importKeyFromMaster(masterKey, base64.decode(salts.encryptionKeySalt))\n this.keys.hmacKey = await crypto.hmac.importKeyFromMaster(masterKey, base64.decode(salts.hmacKeySalt))\n\n if (salts.ecdsaKeyEncryptionKeySalt) {\n const ecdsaKeyEncryptionKey = await crypto.ecdsa.importEcdsaKeyEncryptionKeyFromMaster(masterKey, base64.decode(salts.ecdsaKeyEncryptionKeySalt))\n const encryptedEcdsaPrivateKey = base64.decode(this.ecKeyData.encryptedEcdsaPrivateKey)\n const rawEcdsaPrivateKey = await crypto.aesGcm.decrypt(ecdsaKeyEncryptionKey, encryptedEcdsaPrivateKey)\n this.keys.ecdsaPrivateKey = await crypto.ecdsa.getPrivateKeyFromRawPrivateKey(rawEcdsaPrivateKey)\n\n const ecdhKeyEncryptionKey = await crypto.ecdh.importEcdhKeyEncryptionKeyFromMaster(masterKey, base64.decode(salts.ecdhKeyEncryptionKeySalt))\n const encryptedEcdhPrivateKey = base64.decode(this.ecKeyData.encryptedEcdhPrivateKey)\n const rawEcdhPrivateKey = await crypto.aesGcm.decrypt(ecdhKeyEncryptionKey, encryptedEcdhPrivateKey)\n this.keys.ecdhPrivateKey = await crypto.ecdh.getPrivateKeyFromRawPrivateKey(rawEcdhPrivateKey)\n } else if (salts.dhKeySalt) {\n\n // must be an old user created with userbase-js < v2.0.0. Need to prove access to DH key to server\n this.keys.dhPrivateKey = await crypto.diffieHellman.importKeyFromMaster(masterKey, base64.decode(salts.dhKeySalt))\n }\n\n if (salts.dhKeySalt || salts.ecdsaKeyWrapperSalt) {\n\n // must be an old user created with userbase-js <= v2.0.0. Update EC key data for future logins\n const ecdsaKeyData = await crypto.ecdsa.generateEcdsaKeyData(masterKey)\n const ecdhKeyData = await crypto.ecdh.generateEcdhKeyData(masterKey, ecdsaKeyData.ecdsaPrivateKey)\n\n this.keys.ecdsaPrivateKey = ecdsaKeyData.ecdsaPrivateKey\n this.keys.ecdhPrivateKey = ecdhKeyData.ecdhPrivateKey\n\n delete ecdsaKeyData.ecdsaPrivateKey\n delete ecdhKeyData.ecdhPrivateKey\n\n this.newEcKeyData = {\n ecdsaKeyData,\n ecdhKeyData,\n }\n }\n }\n\n async validateKey() {\n let validationMessage\n if (this.keys.ecdsaPrivateKey && !this.keys.dhPrivateKey) {\n\n // need to sign the validation message with ECDSA private key\n validationMessage = await crypto.ecdsa.sign(this.keys.ecdsaPrivateKey, base64.decode(this.validationMessage))\n\n } else if (this.keys.dhPrivateKey) {\n\n // need to decrypt the encrypted validation emssage with DH shared key\n const sharedKey = await crypto.diffieHellman.getSharedKeyWithServer(this.keys.dhPrivateKey)\n validationMessage = await crypto.aesGcm.decrypt(sharedKey, this.encryptedValidationMessage)\n\n delete this.keys.dhPrivateKey\n }\n\n const action = 'ValidateKey'\n const params = {\n validationMessage: base64.encode(validationMessage),\n ecKeyData: this.newEcKeyData\n }\n\n const response = await this.request(action, params)\n const userData = response.data\n return userData\n }\n\n async request(action, params) {\n // generate a new requestId\n const requestId = uuidv4()\n this.requests[requestId] = {}\n\n // get a promise that is resolved when the WebSocket\n // receives a response for this requestId — the promise\n // would time out of x seconds\n const responseWatcher = this.watch(requestId)\n\n // send the request on the WebSocket\n this.ws.send(JSON.stringify({\n requestId,\n action,\n params\n }))\n\n // wait for the response to arrive\n try {\n const response = await responseWatcher\n return response\n } catch (e) {\n // process any errors and re-throw them\n if (e.status === statusCodes['Too Many Requests']) throw new errors.TooManyRequests(e.data.retryDelay)\n else throw new RequestFailed(action, e)\n }\n }\n\n async watch(requestId) {\n const response = await new Promise((resolve, reject) => {\n this.requests[requestId].promiseResolve = resolve\n this.requests[requestId].promiseReject = reject\n\n setTimeout(() => { reject(new Error('timeout')) }, WS_REQUEST_TIMEOUT)\n })\n\n delete this.requests[requestId]\n return response\n }\n\n async rebuildBundle(database, bundleSeqNo, encryptedBundleEncryptionKey) {\n const bundleChunks = []\n for (let i = 0; i < database.bundleChunks[bundleSeqNo].length; i++) {\n const chunk = database.bundleChunks[bundleSeqNo][i]\n const chunkArrayBuffer = stringToArrayBuffer(chunk)\n bundleChunks.push(chunkArrayBuffer)\n }\n const bundleArrayBuffer = appendBuffers(bundleChunks).buffer\n\n const { encrypted, plaintextMetadata } = JSON.parse(arrayBufferToString(bundleArrayBuffer))\n\n const bundleEncryptionKeyRaw = await crypto.aesGcm.decrypt(database.dbKey, base64.decode(encryptedBundleEncryptionKey))\n const bundleEncryptionKey = await crypto.aesGcm.getKeyFromRawKey(bundleEncryptionKeyRaw)\n\n const decrypted = await crypto.aesGcm.decrypt(bundleEncryptionKey, stringToArrayBuffer(encrypted))\n const decryptedString = arrayBufferToString(decrypted)\n\n const [decompressedEncrypted, decompressedPlaintextMetdata] = await Promise.all([\n decompress(decryptedString),\n decompress(plaintextMetadata),\n ])\n\n const bundle = {\n ...JSON.parse(decompressedEncrypted),\n ...JSON.parse(decompressedPlaintextMetdata),\n }\n\n delete database.bundleChunks[bundleSeqNo]\n\n return bundle\n }\n\n async uploadBundle(userId, dbId, seqNo, bundleId, bundleArrayBuffer) {\n let position = 0\n let chunkNumber = 0\n let batch = [] // will use this to send chunks to server in batches of BUNDLE_CHUNKS_PER_BATCH\n\n while (position < bundleArrayBuffer.byteLength) {\n const chunk = bundleArrayBuffer.slice(position, position + BUNDLE_CHUNK_SIZE)\n\n // using XHR to send binary data because Safari has trouble with string encoding over WebSocket\n batch.push(uploadBundleChunk(userId, dbId, seqNo, bundleId, chunkNumber, chunk))\n\n if (batch.length === BUNDLE_CHUNKS_PER_BATCH) {\n try {\n await Promise.all(batch)\n } catch {\n // ok to fail - bundling is just an optimization\n return 0\n }\n batch = []\n }\n\n chunkNumber += 1\n position += BUNDLE_CHUNK_SIZE\n }\n\n try {\n await Promise.all(batch)\n } catch {\n // ok to fail - bundling is just an optimization\n return 0\n }\n\n return chunkNumber\n }\n\n async initBundleUpload(dbId, seqNo, dbKey) {\n const action = 'InitBundleUpload'\n const params = { dbId, seqNo }\n let initResponse\n try {\n initResponse = await this.request(action, params)\n } catch {\n // ok to fail - bundling is just an optimization\n return {}\n }\n const { bundleId } = initResponse.data\n\n const [bundleEncryptionKey, encryptedBundleEncryptionKey] = await crypto.aesGcm.generateAndEncryptKeyEncryptionKey(dbKey)\n\n return { bundleId, bundleEncryptionKey, encryptedBundleEncryptionKey: base64.encode(encryptedBundleEncryptionKey) }\n }\n\n orderedItems(items, itemsIndex) {\n const orderedItemsArray = []\n for (let i = 0; i < itemsIndex.array.length; i++) {\n const itemId = itemsIndex.array[i].itemId\n orderedItemsArray.push(items[itemId])\n }\n return orderedItemsArray\n }\n\n prepareBundle(database) {\n const {\n items,\n itemsIndex,\n itemsPlaintextMetadata,\n } = database\n\n const bundle = {\n // these values are all provided as input values to SDK, or generated by SDK - will compress, then encrypt\n encrypted: JSON.stringify({\n items: this.orderedItems(items, itemsIndex),\n itemsIndex: itemsIndex.array,\n }),\n\n // these are values the server has access to and can modify - will compress, but no need to encrypt and risk CRIME\n plaintextMetadata: JSON.stringify({\n itemsPlaintextMetadata: this.orderedItems(itemsPlaintextMetadata, itemsIndex),\n }),\n }\n\n return bundle\n }\n\n async buildBundle(database) {\n const dbId = database.dbId\n const lastSeqNo = database.lastSeqNo\n const dbKey = database.dbKey\n const userId = this.session.userId\n\n // Client will only attempt to bundle at a particular seqNo a single time. This prevents server from spamming\n // client with buildBundle to maliciously get the client to re-use an IV in AES-GCM and reveal the dbKey\n if (database.bundledAtSeqNo && database.bundledAtSeqNo >= lastSeqNo) return\n else database.bundledAtSeqNo = lastSeqNo\n\n const bundle = this.prepareBundle(database)\n\n const writers = database.attributionEnabled\n ? [...database.usernamesByUserId.keys()].join(',')\n : undefined\n\n const { bundleId, bundleEncryptionKey, encryptedBundleEncryptionKey } = await this.initBundleUpload(dbId, lastSeqNo, dbKey)\n if (!bundleId) return\n\n const [compressedBeforeEncryption, compressedPlaintextMetadataString] = await Promise.all([\n compress(bundle.encrypted),\n compress(bundle.plaintextMetadata),\n ])\n\n const compressedArrayBufferBeforeEncryption = stringToArrayBuffer(compressedBeforeEncryption)\n const encryptedItems = await crypto.aesGcm.encrypt(bundleEncryptionKey, compressedArrayBufferBeforeEncryption)\n\n bundle.encrypted = arrayBufferToString(encryptedItems)\n bundle.plaintextMetadata = compressedPlaintextMetadataString\n const bundleArrayBuffer = stringToArrayBuffer(JSON.stringify(bundle))\n\n const numChunks = await this.uploadBundle(userId, dbId, lastSeqNo, bundleId, bundleArrayBuffer)\n if (!numChunks) return\n\n const action = 'CompleteBundleUpload'\n const params = { dbId, seqNo: lastSeqNo, bundleId, writers, numChunks, encryptedBundleEncryptionKey }\n try {\n await this.request(action, params)\n } catch {\n // ok to fail - bundling is just an optimization\n return\n }\n }\n\n buildUserResult({ username, userId, authToken, email, profile, protectedProfile, usedTempPassword, changePassword, passwordChanged, userData }) {\n const result = { username, userId, authToken }\n\n if (email) result.email = email\n if (profile) result.profile = profile\n if (protectedProfile) result.protectedProfile = protectedProfile\n if (usedTempPassword) result.usedTempPassword = usedTempPassword\n if (changePassword) result.changePassword = changePassword\n if (passwordChanged) result.passwordChanged = passwordChanged\n\n if (userData) {\n const { creationDate, stripeData } = userData\n if (creationDate) result.creationDate = creationDate\n\n if (stripeData) {\n const { paymentsMode, subscriptionStatus, cancelSubscriptionAt, subscriptionPlanId, trialExpirationDate } = stripeData\n\n if (paymentsMode) result.paymentsMode = paymentsMode\n if (subscriptionStatus) result.subscriptionStatus = subscriptionStatus\n if (cancelSubscriptionAt) result.cancelSubscriptionAt = cancelSubscriptionAt\n if (subscriptionPlanId) result.subscriptionPlanId = subscriptionPlanId\n if (trialExpirationDate) result.trialExpirationDate = trialExpirationDate\n }\n }\n\n return result\n }\n\n handleUpdateUser(updatedUser) {\n // make sure WebSocket session matches provided user\n if (this.session && this.session.userId === updatedUser['userId']) {\n this.session.username = updatedUser['username']\n this.userData = updatedUser.userData\n\n const updateUserHandler = config.getUpdateUserHandler()\n if (updateUserHandler) {\n updateUserHandler({ user: this.buildUserResult({ authToken: this.session.authToken, ...updatedUser }) })\n }\n }\n }\n\n async rotateKeys(newSeedString, newKeyData) {\n // re-arrange object to fit expected structure for setKeys() function\n const { keySalts, ecKeyData } = newKeyData\n const { ecdsaKeyData, ecdhKeyData } = ecKeyData\n keySalts.ecdsaKeyEncryptionKeySalt = ecdsaKeyData.ecdsaKeyEncryptionKeySalt\n keySalts.ecdhKeyEncryptionKeySalt = ecdhKeyData.ecdhKeyEncryptionKeySalt\n\n this.keys.salts = keySalts\n this.ecKeyData = { ...ecdsaKeyData, ...ecdhKeyData }\n\n await this.setKeys(newSeedString)\n\n this.keys.init = true\n }\n\n async authenticateShareToken(shareTokenId, shareTokenHkdfKey) {\n // retrieve shareToken auth key data in order to prove access to shareToken to server\n const action = 'AuthenticateShareToken'\n const params = { shareTokenId }\n\n let response\n try {\n response = await this.request(action, params)\n } catch (e) {\n if (e.response && e.response.data === 'ShareTokenNotFound') throw new errors.ShareTokenNotFound\n throw e\n }\n const { databaseId, shareTokenAuthKeyData, validationMessage } = response.data\n\n // decrypt ECDSA private key. if it fails, not using the correct shareToken\n let shareTokenEcdsaPrivateKey\n try {\n const shareTokenEcdsaKeyEncryptionKeySalt = base64.decode(shareTokenAuthKeyData.shareTokenEcdsaKeyEncryptionKeySalt)\n const shareTokenEcdsaKeyEncryptionKey = await crypto.ecdsa.importEcdsaKeyEncryptionKeyFromMaster(shareTokenHkdfKey, shareTokenEcdsaKeyEncryptionKeySalt)\n const shareTokenEncryptedEcdsaPrivateKey = base64.decode(shareTokenAuthKeyData.shareTokenEncryptedEcdsaPrivateKey)\n const shareTokenEcdsaPrivateKeyRaw = await crypto.aesGcm.decrypt(shareTokenEcdsaKeyEncryptionKey, shareTokenEncryptedEcdsaPrivateKey)\n shareTokenEcdsaPrivateKey = await crypto.ecdsa.getPrivateKeyFromRawPrivateKey(shareTokenEcdsaPrivateKeyRaw)\n } catch {\n throw new errors.ShareTokenInvalid\n }\n\n // sign validation message sent by the server\n const signedValidationMessage = await crypto.ecdsa.sign(shareTokenEcdsaPrivateKey, base64.decode(validationMessage))\n return { databaseId, validationMessage, signedValidationMessage: base64.encode(signedValidationMessage) }\n }\n}\n\nexport default new Connection()\n", + "import base64 from 'base64-arraybuffer'\nimport authApi from './api/auth'\nimport ws from './ws'\nimport crypto from './Crypto'\nimport localData from './localData'\nimport config from './config'\nimport errors from './errors'\nimport statusCodes from './statusCodes'\nimport { objectHasOwnProperty, getWsUrl } from './utils'\n\nconst MAX_PASSWORD_CHAR_LENGTH = 1000\nconst MIN_PASSWORD_CHAR_LENGTH = 6\n\nconst REMEMBER_ME_OPTIONS = {\n local: true,\n session: true,\n none: true\n}\n\nconst KEY_NOT_FOUND_ON_SIGN_IN = \"Device not recognized. This temporary password can only be used to sign in from a device you've signed in from before.\"\nconst KEY_NOT_FOUND_ON_FORGOT_PASSWORD = \"Device not recognized. Forgot password only works from a device you've signed in from before.\"\n\nconst _checkSignedInState = () => {\n if (ws.reconnecting) throw new errors.Reconnecting\n if (!ws.keys.init && ws.changePassword) throw new errors.UserMustChangePassword\n if (!ws.keys.init) throw new errors.UserNotSignedIn\n}\n\nconst _parseGenericErrors = (e) => {\n if (e.response) {\n if (e.response.data === 'Domain not whitelisted') {\n throw new errors.DomainNotWhitelisted(window.location.origin)\n } else if (e.response.data === 'App ID not valid') {\n throw new errors.AppIdNotValid\n } else if (e.response.data === 'UserNotFound') {\n throw new errors.UserNotFound\n } else if (e.response.status === statusCodes['Internal Server Error']) {\n throw new errors.InternalServerError\n } else if (e.response.status === statusCodes['Gateway Timeout']) {\n throw new errors.Timeout\n }\n } else if (e.message && e.message.indexOf('timeout') !== -1) {\n throw new errors.Timeout\n }\n}\n\nconst _connectWebSocket = async (session, seed, rememberMe, changePassword) => {\n try {\n await ws.connect(session, seed, rememberMe, changePassword)\n } catch (e) {\n _parseGenericErrors(e)\n\n if (e.message === 'Web Socket already connected') {\n throw new errors.UserAlreadySignedIn(e.username)\n }\n\n throw e\n }\n}\n\nconst _parseGenericUsernamePasswordError = (e) => {\n if (e.response && e.response.data.error === 'UsernameTooLong') {\n throw new errors.UsernameTooLong(e.response.data.maxLen)\n } else if (e.response && e.response.data.error === 'PasswordAttemptLimitExceeded') {\n throw new errors.PasswordAttemptLimitExceeded(e.response.data.delay)\n }\n}\n\nconst _parseSessionLengthError = (e) => {\n if (e.response && e.response.data) {\n const data = e.response.data\n\n switch (data.error) {\n case 'SessionLengthTooShort':\n throw new errors.SessionLengthTooShort(data.minLen)\n\n case 'SessionLengthTooLong':\n throw new errors.SessionLengthTooLong(data.maxLen)\n }\n }\n}\n\nconst _parseUserResponseError = (e, username) => {\n _parseGenericErrors(e)\n _parseGenericUsernamePasswordError(e)\n\n if (e.response) {\n const data = e.response.data\n\n switch (data) {\n case 'UsernameAlreadyExists':\n throw new errors.UsernameAlreadyExists(username)\n\n case 'TrialExceededLimit':\n throw new errors.TrialExceededLimit\n\n case 'CurrentPasswordIncorrect':\n throw new errors.CurrentPasswordIncorrect\n\n default:\n // continue\n }\n\n switch (data.error) {\n case 'EmailNotValid':\n throw new errors.EmailNotValid\n\n case 'ProfileMustBeObject':\n throw new errors.ProfileMustBeObject\n\n case 'ProfileKeyTooLong':\n throw new errors.ProfileKeyTooLong(data.maxLen, data.key)\n\n case 'ProfileValueMustBeString':\n throw new errors.ProfileValueMustBeString(data.key, data.value)\n\n case 'ProfileValueCannotBeBlank':\n throw new errors.ProfileValueCannotBeBlank(data.key)\n\n case 'ProfileValueTooLong':\n throw new errors.ProfileValueTooLong(data.maxLen, data.key, data.value)\n\n case 'ProfileHasTooManyKeys':\n throw new errors.ProfileHasTooManyKeys(data.maxKeys)\n\n case 'ProfileCannotBeEmpty':\n throw new errors.ProfileCannotBeEmpty\n }\n }\n\n throw e\n}\n\nconst _calculateSessionLengthMs = sessionLength => sessionLength && sessionLength * 60 * 60 * 1000\n\nconst _validateUsername = (username) => {\n if (typeof username !== 'string') throw new errors.UsernameMustBeString\n if (username.length === 0) throw new errors.UsernameCannotBeBlank\n}\n\nconst _validatePassword = (password) => {\n if (typeof password !== 'string') throw new errors.PasswordMustBeString\n if (password.length === 0) throw new errors.PasswordCannotBeBlank\n if (password.length < MIN_PASSWORD_CHAR_LENGTH) throw new errors.PasswordTooShort(MIN_PASSWORD_CHAR_LENGTH)\n if (password.length > MAX_PASSWORD_CHAR_LENGTH) throw new errors.PasswordTooLong(MAX_PASSWORD_CHAR_LENGTH)\n}\n\nconst _validateSignUpOrSignInInput = (params) => {\n if (typeof params !== 'object') throw new errors.ParamsMustBeObject\n\n if (!objectHasOwnProperty(params, 'username')) throw new errors.UsernameMissing\n if (!objectHasOwnProperty(params, 'password')) throw new errors.PasswordMissing\n\n _validateUsername(params.username)\n _validatePassword(params.password)\n\n if (objectHasOwnProperty(params, 'rememberMe') && !REMEMBER_ME_OPTIONS[params.rememberMe]) {\n throw new errors.RememberMeValueNotValid(REMEMBER_ME_OPTIONS)\n }\n\n if (objectHasOwnProperty(params, 'sessionLength') && typeof params.sessionLength !== 'number') {\n throw new errors.SessionLengthMustBeNumber\n }\n}\n\nconst _generatePasswordToken = async (password, seed, passwordHashAlgo) => {\n const passwordSalt = crypto.scrypt.generateSalt()\n const passwordHash = await crypto.scrypt.hash(password, passwordSalt, passwordHashAlgo)\n\n const passwordHkdfKey = await crypto.hkdf.importHkdfKeyFromString(passwordHash)\n\n const passwordTokenSalt = crypto.hkdf.generateSalt()\n const passwordToken = await crypto.hkdf.getPasswordToken(passwordHkdfKey, passwordTokenSalt)\n\n const passwordBasedEncryptionKeySalt = crypto.hkdf.generateSalt()\n const passwordBasedEncryptionKey = await crypto.aesGcm.getPasswordBasedEncryptionKey(\n passwordHkdfKey, passwordBasedEncryptionKeySalt)\n\n const passwordEncryptedSeed = await crypto.aesGcm.encrypt(passwordBasedEncryptionKey, seed)\n\n const passwordSalts = {\n passwordSalt: base64.encode(passwordSalt),\n passwordTokenSalt: base64.encode(passwordTokenSalt)\n }\n\n const passwordBasedBackup = {\n passwordBasedEncryptionKeySalt: base64.encode(passwordBasedEncryptionKeySalt),\n passwordEncryptedSeed: base64.encode(passwordEncryptedSeed)\n }\n\n return {\n passwordToken,\n passwordSalts,\n passwordBasedBackup\n }\n}\n\nconst _generateKeys = async (seed) => {\n const masterKey = await crypto.hkdf.importHkdfKey(seed)\n\n const encryptionKeySalt = crypto.hkdf.generateSalt()\n const hmacKeySalt = crypto.hkdf.generateSalt()\n const keySalts = {\n encryptionKeySalt: base64.encode(encryptionKeySalt),\n hmacKeySalt: base64.encode(hmacKeySalt),\n }\n\n const ecdsaKeyData = await crypto.ecdsa.generateEcdsaKeyData(masterKey)\n const ecdhKeyData = await crypto.ecdh.generateEcdhKeyData(masterKey, ecdsaKeyData.ecdsaPrivateKey)\n\n delete ecdsaKeyData.ecdsaPrivateKey\n delete ecdhKeyData.ecdhPrivateKey\n\n const ecKeyData = {\n ecdsaKeyData,\n ecdhKeyData,\n }\n\n return { ecKeyData, keySalts }\n}\n\nconst _generateKeysAndSignUp = async (username, password, seed, passwordHashAlgo, email, profile, sessionLength) => {\n const {\n passwordToken,\n passwordSalts,\n passwordBasedBackup\n } = await _generatePasswordToken(password, seed, passwordHashAlgo)\n\n const { ecKeyData, keySalts } = await _generateKeys(seed)\n\n try {\n const session = await authApi.signUp(\n username,\n passwordToken,\n ecKeyData,\n passwordSalts,\n keySalts,\n email,\n profile,\n passwordBasedBackup,\n sessionLength,\n )\n return session\n } catch (e) {\n _parseSessionLengthError(e)\n _parseUserResponseError(e, username)\n }\n}\n\nconst _validateProfile = (profile) => {\n if (typeof profile !== 'object') throw new errors.ProfileMustBeObject\n\n let keyExists = false\n for (const key in profile) {\n keyExists = true\n\n const value = profile[key]\n if (typeof value !== 'string') throw new errors.ProfileValueMustBeString(key, value)\n if (!value) throw new errors.ProfileValueCannotBeBlank(key)\n }\n\n if (!keyExists) throw new errors.ProfileCannotBeEmpty\n}\n\nconst _validateSignUpInput = (params) => {\n _validateSignUpOrSignInInput(params)\n\n if (params.profile) _validateProfile(params.profile)\n if (params.email && typeof params.email !== 'string') throw new errors.EmailNotValid\n}\n\nconst signUp = async (params) => {\n try {\n _validateSignUpInput(params)\n\n const { password, profile, passwordHashAlgo, rememberMe = 'session' } = params\n\n const username = params.username.toLowerCase()\n const email = params.email && params.email.toLowerCase()\n\n const appId = config.getAppId()\n const seed = await crypto.generateSeed()\n\n const sessionLength = _calculateSessionLengthMs(params.sessionLength)\n\n const { sessionId, creationDate, expirationDate, userId, authToken } = await _generateKeysAndSignUp(username, password, seed, passwordHashAlgo, email, profile, sessionLength)\n const session = { username, userId, sessionId, creationDate, expirationDate, authToken }\n\n const seedString = base64.encode(seed)\n\n localData.saveSeedString(rememberMe, appId, username, seedString)\n localData.signInSession(rememberMe, username, sessionId, creationDate, expirationDate)\n\n await _connectWebSocket(session, seedString, rememberMe)\n\n return ws.buildUserResult({ username, userId, authToken, email, profile, userData: ws.userData })\n } catch (e) {\n\n switch (e.name) {\n case 'ParamsMustBeObject':\n case 'UsernameMissing':\n case 'UsernameAlreadyExists':\n case 'UsernameCannotBeBlank':\n case 'UsernameMustBeString':\n case 'UsernameTooLong':\n case 'PasswordMissing':\n case 'PasswordCannotBeBlank':\n case 'PasswordTooShort':\n case 'PasswordTooLong':\n case 'PasswordMustBeString':\n case 'EmailNotValid':\n case 'ProfileMustBeObject':\n case 'ProfileCannotBeEmpty':\n case 'ProfileHasTooManyKeys':\n case 'ProfileKeyTooLong':\n case 'ProfileValueMustBeString':\n case 'ProfileValueCannotBeBlank':\n case 'ProfileValueTooLong':\n case 'RememberMeValueNotValid':\n case 'SessionLengthMustBeNumber':\n case 'SessionLengthTooShort':\n case 'SessionLengthTooLong':\n case 'TrialExceededLimit':\n case 'AppIdNotSet':\n case 'AppIdNotValid':\n case 'DomainNotWhitelisted':\n case 'UserAlreadySignedIn':\n case 'ServiceUnavailable':\n throw e\n\n default:\n throw new errors.UnknownServiceUnavailable(e)\n }\n\n }\n}\n\nconst signOut = async () => {\n try {\n if (!ws.session.username) throw new errors.UserNotSignedIn\n\n try {\n await ws.signOut()\n } catch (e) {\n _parseGenericErrors(e)\n throw e\n }\n\n } catch (e) {\n\n switch (e.name) {\n case 'UserNotSignedIn':\n case 'ServiceUnavailable':\n throw e\n\n default:\n throw new errors.UnknownServiceUnavailable(e)\n }\n }\n}\n\nconst _getSeedStringFromPasswordBasedBackup = async (passwordHkdfKey, passwordBasedBackup) => {\n const { passwordBasedEncryptionKeySalt, passwordEncryptedSeed } = passwordBasedBackup\n\n const passwordBasedEncryptionKey = await crypto.aesGcm.getPasswordBasedEncryptionKey(\n passwordHkdfKey, base64.decode(passwordBasedEncryptionKeySalt))\n\n const seedFromBackup = await crypto.aesGcm.decrypt(passwordBasedEncryptionKey, base64.decode(passwordEncryptedSeed))\n const seedStringFromBackup = base64.encode(seedFromBackup)\n\n return seedStringFromBackup\n}\n\nconst _signInWrapper = async (username, passwordToken, sessionLength) => {\n try {\n const apiSignInResult = await authApi.signIn(username, passwordToken, sessionLength)\n return apiSignInResult\n } catch (e) {\n _parseGenericErrors(e)\n _parseGenericUsernamePasswordError(e)\n _parseSessionLengthError(e)\n\n if (e.response && e.response.data === 'Invalid password') {\n throw new errors.UsernameOrPasswordMismatch\n } else if (e.response && e.response.data === 'User pending deletion') {\n throw new errors.UserPendingDeletion\n }\n\n throw e\n }\n}\n\nconst _getPasswordSaltsOverRestEndpoint = async (username) => {\n try {\n const passwordSalts = await authApi.getPasswordSalts(username)\n return passwordSalts\n } catch (e) {\n _parseGenericErrors(e)\n _parseGenericUsernamePasswordError(e)\n\n if (e.response && e.response.data === 'User not found') {\n throw new errors.UsernameOrPasswordMismatch\n }\n\n throw e\n }\n}\n\nconst _getPasswordSaltsOverWebSocket = async () => {\n try {\n const action = 'GetPasswordSalts'\n const passwordSaltsResponse = await ws.request(action)\n return passwordSaltsResponse.data\n } catch (e) {\n _parseGenericErrors(e)\n throw e\n }\n}\n\nconst _rebuildPasswordToken = async (password, passwordSalts, passwordHashAlgo) => {\n const { passwordSalt, passwordTokenSalt } = passwordSalts\n\n const passwordHash = await crypto.scrypt.hash(password, new Uint8Array(base64.decode(passwordSalt)), passwordHashAlgo)\n const passwordHkdfKey = await crypto.hkdf.importHkdfKeyFromString(passwordHash)\n const passwordToken = await crypto.hkdf.getPasswordToken(passwordHkdfKey, base64.decode(passwordTokenSalt))\n\n return { passwordHkdfKey, passwordToken }\n}\n\nconst signIn = async (params) => {\n try {\n _validateSignUpOrSignInInput(params)\n\n const username = params.username.toLowerCase()\n const { password, passwordHashAlgo, rememberMe = 'session' } = params\n\n const appId = config.getAppId()\n\n const passwordSalts = await _getPasswordSaltsOverRestEndpoint(username)\n const { passwordHkdfKey, passwordToken } = await _rebuildPasswordToken(password, passwordSalts, passwordHashAlgo)\n\n const sessionLength = _calculateSessionLengthMs(params.sessionLength)\n\n const apiSignInResult = await _signInWrapper(username, passwordToken, sessionLength)\n const { userId, email, profile, passwordBasedBackup, protectedProfile, usedTempPassword, changePassword } = apiSignInResult\n const session = {\n ...apiSignInResult.session,\n username,\n userId,\n }\n\n let seedString\n if (!changePassword) {\n const savedSeedString = localData.getSeedString(appId, username)\n\n let seedStringFromBackup\n if (!savedSeedString && usedTempPassword) {\n throw new errors.KeyNotFound(KEY_NOT_FOUND_ON_SIGN_IN)\n } else if (!usedTempPassword) {\n // always use seed from backup in case it's changed and local copy is out of date\n seedStringFromBackup = await _getSeedStringFromPasswordBasedBackup(passwordHkdfKey, passwordBasedBackup)\n localData.saveSeedString(rememberMe, appId, username, seedStringFromBackup)\n }\n\n seedString = seedStringFromBackup || savedSeedString\n }\n\n localData.signInSession(rememberMe, username, session.sessionId, session.creationDate, session.expirationDate)\n\n try {\n await _connectWebSocket(session, seedString, rememberMe, changePassword)\n } catch (e) {\n if (usedTempPassword && e.message === 'Invalid seed') throw new errors.KeyNotFound(KEY_NOT_FOUND_ON_SIGN_IN)\n throw e\n }\n\n return ws.buildUserResult({\n username, userId, authToken: session.authToken, email,\n profile, protectedProfile, usedTempPassword, changePassword, userData: ws.userData\n })\n } catch (e) {\n\n switch (e.name) {\n case 'ParamsMustBeObject':\n case 'UsernameMissing':\n case 'UsernameOrPasswordMismatch':\n case 'UserPendingDeletion':\n case 'UsernameCannotBeBlank':\n case 'UsernameTooLong':\n case 'UsernameMustBeString':\n case 'PasswordMissing':\n case 'PasswordCannotBeBlank':\n case 'PasswordTooShort':\n case 'PasswordTooLong':\n case 'PasswordMustBeString':\n case 'PasswordAttemptLimitExceeded':\n case 'RememberMeValueNotValid':\n case 'SessionLengthMustBeNumber':\n case 'SessionLengthTooShort':\n case 'SessionLengthTooLong':\n case 'KeyNotFound':\n case 'AppIdNotSet':\n case 'AppIdNotValid':\n case 'DomainNotWhitelisted':\n case 'UserAlreadySignedIn':\n case 'ServiceUnavailable':\n throw e\n\n default:\n throw new errors.UnknownServiceUnavailable(e)\n }\n\n }\n}\n\nconst init = async (params) => {\n try {\n if (!window.crypto.subtle) throw new errors.WebCryptoUnavailable\n\n if (typeof params !== 'object') throw new errors.ParamsMustBeObject\n\n if (!objectHasOwnProperty(params, 'appId')) throw new errors.AppIdMissing\n if (typeof params.appId !== 'string') throw new errors.AppIdMustBeString\n if (params.appId.length === 0) throw new errors.AppIdCannotBeBlank\n\n if (objectHasOwnProperty(params, 'updateUserHandler') && typeof params.updateUserHandler !== 'function') {\n throw new errors.UpdateUserHandlerMustBeFunction\n }\n\n if (objectHasOwnProperty(params, 'sessionLength') && typeof params.sessionLength !== 'number') {\n throw new errors.SessionLengthMustBeNumber\n }\n\n if (objectHasOwnProperty(params, 'allowServerSideEncryption') && typeof params.allowServerSideEncryption !== 'boolean') {\n throw new errors.AllowServerSideEncryptionMustBeBoolean\n }\n\n config.configure(params)\n\n const session = await signInWithSession(params.appId, _calculateSessionLengthMs(params.sessionLength))\n return session\n } catch (e) {\n\n switch (e.name) {\n case 'WebCryptoUnavailable':\n case 'ParamsMustBeObject':\n case 'AppIdMissing':\n case 'AppIdAlreadySet':\n case 'AppIdMustBeString':\n case 'AppIdCannotBeBlank':\n case 'AppIdNotValid':\n case 'DomainNotWhitelisted':\n case 'UpdateUserHandlerMustBeFunction':\n case 'SessionLengthMustBeNumber':\n case 'SessionLengthTooShort':\n case 'SessionLengthTooLong':\n case 'AllowServerSideEncryptionMustBeBoolean':\n case 'UserAlreadySignedIn':\n case 'ServiceUnavailable':\n throw e\n\n default:\n throw new errors.UnknownServiceUnavailable(e)\n }\n\n }\n}\n\nconst signInWithSession = async (appId, sessionLength) => {\n let lastUsedUsername\n try {\n const currentSession = localData.getCurrentSession()\n if (!currentSession) return {}\n\n const { signedIn, sessionId, creationDate, expirationDate, rememberMe } = currentSession\n lastUsedUsername = currentSession.username\n const savedSeedString = localData.getSeedString(appId, lastUsedUsername)\n\n if (!signedIn || !savedSeedString || new Date() > new Date(expirationDate)) {\n return { lastUsedUsername }\n }\n\n let apiSignInWithSessionResult\n try {\n apiSignInWithSessionResult = await authApi.signInWithSession(sessionId, sessionLength)\n } catch (e) {\n _parseGenericErrors(e)\n _parseSessionLengthError(e)\n\n if (e.response && e.response.data === 'Session invalid') {\n return { lastUsedUsername }\n }\n\n throw e\n }\n const { userId, authToken, username, email, profile, protectedProfile } = apiSignInWithSessionResult\n\n // overwrite local data if username has been changed on server\n if (username !== lastUsedUsername) {\n localData.saveSeedString(rememberMe, appId, username, savedSeedString)\n localData.removeSeedString(appId, lastUsedUsername)\n }\n\n // expirationDate should have been extended\n localData.signInSession(rememberMe, username, sessionId, creationDate, apiSignInWithSessionResult.expirationDate)\n\n // enable idempotent calls to init()\n if (ws.connectionResolved) {\n if (ws.session.sessionId === sessionId) {\n return { user: ws.buildUserResult({ username, userId, authToken: ws.session.authToken, email, profile, protectedProfile, userData: ws.userData }) }\n } else {\n throw new errors.UserAlreadySignedIn(ws.session.username)\n }\n }\n\n const session = { ...currentSession, username, userId, authToken }\n await _connectWebSocket(session, savedSeedString, rememberMe)\n\n return { user: ws.buildUserResult({ username, userId, authToken, email, profile, protectedProfile, userData: ws.userData }) }\n } catch (e) {\n if (e.message === 'Invalid seed') return { lastUsedUsername }\n _parseGenericErrors(e)\n throw e\n }\n}\n\nconst _validateUpdatedUserInput = (params) => {\n if (!objectHasOwnProperty(params, 'username')\n && !objectHasOwnProperty(params, 'newPassword')\n && !objectHasOwnProperty(params, 'email')\n && !objectHasOwnProperty(params, 'profile')\n ) {\n throw new errors.ParamsMissing\n }\n\n const { username, currentPassword, newPassword, email, profile } = params\n\n if (objectHasOwnProperty(params, 'username')) _validateUsername(username)\n if (objectHasOwnProperty(params, 'newPassword')) {\n if (!objectHasOwnProperty(params, 'currentPassword')) throw new errors.CurrentPasswordMissing\n\n _validatePassword(currentPassword)\n _validatePassword(newPassword)\n }\n\n // if email or profile are falsey, will be set to false\n if (email && typeof email !== 'string') throw new errors.EmailNotValid\n if (profile) _validateProfile(profile)\n}\n\nconst _buildUpdateUserParams = async (params, newSeed) => {\n if (params.username) params.username = params.username.toLowerCase()\n\n if (params.newPassword) {\n const [currentPasswordSalts, newPasswordPromise, newKeyData] = await Promise.all([\n _getPasswordSaltsOverWebSocket(),\n _generatePasswordToken(params.newPassword, newSeed || base64.decode(ws.seedString)),\n newSeed && _generateKeys(newSeed)\n ])\n\n // current password\n const { passwordToken } = await _rebuildPasswordToken(params.currentPassword, currentPasswordSalts, params.passwordHashAlgo)\n params.currentPasswordToken = passwordToken\n delete params.currentPassword\n\n // new password\n params.passwordToken = newPasswordPromise.passwordToken\n params.passwordSalts = newPasswordPromise.passwordSalts\n params.passwordBasedBackup = newPasswordPromise.passwordBasedBackup\n delete params.newPassword\n\n if (newKeyData) params.newKeyData = newKeyData\n }\n\n if (params.email) params.email = params.email.toLowerCase()\n else if (objectHasOwnProperty(params, 'email')) params.email = false // marks email for deletion\n\n if (!params.profile && objectHasOwnProperty(params, 'profile')) params.profile = false // marks profile for deletion\n\n return params\n}\n\nconst updateUser = async (params) => {\n try {\n if (typeof params !== 'object') throw new errors.ParamsMustBeObject\n\n _validateUpdatedUserInput(params)\n\n if (ws.reconnecting) throw new errors.Reconnecting\n if (!ws.connectionResolved) throw new errors.UserNotSignedIn\n const startingUserId = ws.session.userId\n\n // need to generate new seed to rotate keys if user signed in with temp password to delete private data\n const newSeed = params.newPassword && !ws.keys.init && ws.changePassword && await crypto.generateSeed()\n\n const action = 'UpdateUser'\n const finalParams = await _buildUpdateUserParams({ ...params }, newSeed)\n\n if (ws.reconnecting) throw new errors.Reconnecting\n if (!ws.connectionResolved) throw new errors.UserNotSignedIn\n\n // ensures same user still attempting to update\n if (!ws.session || startingUserId !== ws.session.userId) throw new errors.ServiceUnavailable\n\n try {\n if (finalParams.username) {\n localData.saveSeedString(ws.rememberMe, config.getAppId(), finalParams.username, ws.seedString)\n }\n\n const response = await ws.request(action, finalParams)\n const updatedUser = response.data.updatedUser\n ws.handleUpdateUser(updatedUser)\n\n // must have rotated keys successfully\n if (newSeed && ws.session && startingUserId === ws.session.userId) {\n const newSeedString = base64.encode(newSeed)\n await ws.rotateKeys(newSeedString, finalParams.newKeyData)\n localData.saveSeedString(ws.rememberMe, config.getAppId(), updatedUser.username, newSeedString)\n\n const { sessionId, creationDate, expirationDate } = ws.session\n localData.signInSession(ws.rememberMe, updatedUser.username, sessionId, creationDate, expirationDate)\n }\n } catch (e) {\n _parseUserResponseError(e, finalParams.username)\n }\n } catch (e) {\n\n switch (e.name) {\n case 'ParamsMustBeObject':\n case 'ParamsMissing':\n case 'UsernameAlreadyExists':\n case 'UsernameMustBeString':\n case 'UsernameCannotBeBlank':\n case 'UsernameTooLong':\n case 'CurrentPasswordMissing':\n case 'CurrentPasswordIncorrect':\n case 'PasswordAttemptLimitExceeded':\n case 'PasswordMustBeString':\n case 'PasswordCannotBeBlank':\n case 'PasswordTooShort':\n case 'PasswordTooLong':\n case 'EmailNotValid':\n case 'ProfileMustBeObject':\n case 'ProfileCannotBeEmpty':\n case 'ProfileHasTooManyKeys':\n case 'ProfileKeyTooLong':\n case 'ProfileValueMustBeString':\n case 'ProfileValueCannotBeBlank':\n case 'ProfileValueTooLong':\n case 'AppIdNotSet':\n case 'AppIdNotValid':\n case 'UserNotFound':\n case 'UserNotSignedIn':\n case 'TooManyRequests':\n case 'ServiceUnavailable':\n throw e\n\n default:\n throw new errors.UnknownServiceUnavailable(e)\n }\n\n }\n}\n\nconst deleteUser = async () => {\n try {\n _checkSignedInState()\n\n const username = ws.session.username\n localData.removeSeedString(config.getAppId(), username)\n localData.removeCurrentSession()\n\n try {\n const action = 'DeleteUser'\n await ws.request(action)\n } catch (e) {\n _parseGenericErrors(e)\n throw e\n }\n\n ws.close()\n\n } catch (e) {\n\n switch (e.name) {\n case 'UserMustChangePassword':\n case 'UserNotSignedIn':\n case 'UserNotFound':\n case 'TooManyRequests':\n case 'ServiceUnavailable':\n throw e\n\n default:\n throw new errors.UnknownServiceUnavailable(e)\n }\n\n }\n}\n\nconst _getMasterKeyAndKeyNotFoundMessage = async (appId, username) => {\n const seedString = localData.getSeedString(appId, username)\n if (!seedString) throw new errors.KeyNotFound(KEY_NOT_FOUND_ON_FORGOT_PASSWORD)\n const seed = base64.decode(seedString)\n const masterKey = await crypto.hkdf.importHkdfKey(seed)\n return masterKey\n}\n\nconst forgotPassword = async (params) => {\n try {\n if (typeof params !== 'object') throw new errors.ParamsMustBeObject\n if (objectHasOwnProperty(params, 'deleteEndToEndEncryptedData') && typeof params.deleteEndToEndEncryptedData !== 'boolean') {\n throw new errors.DeleteEndToEndEncryptedDataMustBeBoolean\n }\n if (!objectHasOwnProperty(params, 'username')) throw new errors.UsernameMissing\n\n _validateUsername(params.username)\n const username = params.username.toLowerCase()\n\n const appId = config.getAppId()\n\n const url = `${getWsUrl(config.getEndpoint())}/api/auth/forgot-password?appId=${appId}&username=${encodeURIComponent(username)}&userbaseJsVersion=${config.USERBASE_JS_VERSION}`\n const forgotPasswordWs = new WebSocket(url + (objectHasOwnProperty(params, 'deleteEndToEndEncryptedData')\n ? `&deleteEndToEndEncryptedData=${params.deleteEndToEndEncryptedData}` : ''))\n\n await new Promise((resolve, reject) => {\n setTimeout(() => reject(new errors.Timeout), 15000)\n\n forgotPasswordWs.onerror = () => reject(new errors.ServiceUnavailable)\n\n forgotPasswordWs.onmessage = async (e) => {\n try {\n const message = JSON.parse(e.data)\n\n switch (message.route) {\n\n // users created with userbase-js < v2.0.0 that have not signed in yet will need to prove access to DH key by decrypting token\n case 'ReceiveEncryptedToken': {\n const masterKey = await _getMasterKeyAndKeyNotFoundMessage(appId, username)\n\n // if client decrypts encrypted token successfully, proves to server it has the user's key\n const encryptedForgotPasswordToken = new Uint8Array(message.encryptedForgotPasswordToken.data)\n\n const dhPrivateKey = await crypto.diffieHellman.importKeyFromMaster(masterKey, base64.decode(message.dhKeySalt))\n const sharedKey = await crypto.diffieHellman.getSharedKeyWithServer(dhPrivateKey)\n\n let forgotPasswordToken\n try {\n // if it fails to decrypt, it's almost certainly because key is incorrect\n forgotPasswordToken = base64.encode(await crypto.aesGcm.decrypt(sharedKey, encryptedForgotPasswordToken))\n } catch {\n throw new errors.KeyNotFound(KEY_NOT_FOUND_ON_FORGOT_PASSWORD)\n }\n\n forgotPasswordWs.send(JSON.stringify({\n action: 'ForgotPassword',\n params: { forgotPasswordToken }\n }))\n\n break\n }\n\n // users signed in with userbase-js >= v2.0.1 will need to prove access to ECDSA key by signing token\n case 'ReceiveToken': {\n const masterKey = await _getMasterKeyAndKeyNotFoundMessage(appId, username)\n\n const {\n ecdsaKeyEncryptionKeySalt,\n encryptedEcdsaPrivateKey,\n forgotPasswordToken,\n } = message\n\n const ecdsaKeyEncryptionKey = await crypto.ecdsa.importEcdsaKeyEncryptionKeyFromMaster(masterKey, base64.decode(ecdsaKeyEncryptionKeySalt))\n\n let ecdsaPrivateKey\n try {\n // if it fails to decrypt, it's almost certainly because key is incorrect\n const rawEcdsaPrivateKey = await crypto.aesGcm.decrypt(ecdsaKeyEncryptionKey, base64.decode(encryptedEcdsaPrivateKey))\n ecdsaPrivateKey = await crypto.ecdsa.getPrivateKeyFromRawPrivateKey(rawEcdsaPrivateKey)\n } catch {\n throw new errors.KeyNotFound(KEY_NOT_FOUND_ON_FORGOT_PASSWORD)\n }\n\n const signedForgotPasswordToken = base64.encode(await crypto.ecdsa.sign(ecdsaPrivateKey, base64.decode(forgotPasswordToken)))\n\n forgotPasswordWs.send(JSON.stringify({\n action: 'ForgotPassword',\n params: { signedForgotPasswordToken }\n }))\n\n break\n }\n\n case 'SuccessfullyForgotPassword': {\n // server has sent the email\n resolve()\n break\n }\n\n case 'Error': {\n const data = message.data\n\n switch (data.name) {\n case 'UsernameTooLong': throw new errors.UsernameTooLong(data.maxLen)\n case 'AppIdNotValid': throw new errors.AppIdNotValid\n case 'UserNotFound': throw new errors.UserNotFound\n case 'UserEmailNotFound': throw new errors.UserEmailNotFound\n\n default: {\n if (message.status === statusCodes['Internal Server Error']) throw new errors.ServiceUnavailable\n else throw new errors.UnknownServiceUnavailable(data)\n }\n }\n }\n\n case 'Ping': {\n // ignore -- websocket connection should only exist for the life of the forgot password request\n break\n }\n\n default:\n reject(new Error(`Received unknown message from userbase-server: ${e.data}`))\n }\n } catch (e) {\n reject(e)\n }\n }\n })\n\n forgotPasswordWs.close()\n } catch (e) {\n\n switch (e.name) {\n case 'ParamsMustBeObject':\n case 'UsernameMissing':\n case 'UsernameMustBeString':\n case 'UsernameCannotBeBlank':\n case 'UsernameTooLong':\n case 'AppIdNotSet':\n case 'AppIdNotValid':\n case 'KeyNotFound':\n case 'UserNotFound':\n case 'UserEmailNotFound':\n case 'ServiceUnavailable':\n throw e\n\n default:\n throw new errors.UnknownServiceUnavailable(e)\n\n }\n }\n}\n\nexport default {\n signUp,\n signOut,\n signIn,\n init,\n updateUser,\n deleteUser,\n forgotPassword,\n}\n", + "import uuidv4 from 'uuid/v4'\nimport SortedArray from 'sorted-array'\nimport base64 from 'base64-arraybuffer'\nimport crypto from './Crypto'\nimport ws from './ws'\nimport errors from './errors'\nimport statusCodes from './statusCodes'\nimport { byteSizeOfString, Queue, objectHasOwnProperty } from './utils'\nimport { appendBuffer, arrayBufferToString, stringToArrayBuffer } from './Crypto/utils'\nimport authApi from './api/auth'\nimport config from './config'\n\nconst success = 'Success'\n\nconst MAX_DB_NAME_CHAR_LENGTH = 100\nconst MAX_ITEM_ID_CHAR_LENGTH = 100\n\nconst MAX_ITEM_KB = 10\nconst TEN_KB = MAX_ITEM_KB * 1024\nconst MAX_ITEM_BYTES = TEN_KB\n\nconst UUID_CHAR_LENGTH = 36\n\nconst FILE_CHUNK_SIZE = 1024 * 512 // 512kb\nconst FILE_CHUNKS_PER_BATCH = 10\n\nconst VERIFIED_USERS_DATABASE_NAME = '__userbase_verified_users'\n\nconst ENCRYPTION_MODE_OPTIONS = {\n 'end-to-end': true,\n 'server-side': true\n}\n\nconst TX_TIMEOUT = 30 * 1000\n\nconst _checkSignedInState = () => {\n if (ws.reconnecting) throw new errors.Reconnecting\n if (!ws.keys.init && ws.changePassword) throw new errors.UserMustChangePassword\n if (!ws.keys.init || !ENCRYPTION_MODE_OPTIONS[ws.encryptionMode]) throw new errors.UserNotSignedIn\n}\n\nconst _parseGenericErrors = (e) => {\n if (e.response) {\n if (e.response.data === 'UserNotFound') {\n throw new errors.UserNotFound\n } else if (e.response.status === statusCodes['Internal Server Error']) {\n throw new errors.InternalServerError\n } else if (e.response.status === statusCodes['Gateway Timeout']) {\n throw new errors.Timeout\n }\n } else if (e.message && e.message.indexOf('timeout') !== -1) {\n throw new errors.Timeout\n }\n}\n\nclass UnverifiedTransaction {\n constructor(startSeqNo) {\n this.startSeqNo = startSeqNo\n this.txSeqNo = null\n this.transactions = {}\n this.promiseResolve = null\n this.promiseReject = null\n this.index = null\n }\n\n getStartSeqNo() {\n return this.startSeqNo\n }\n\n getIndex() {\n return this.index\n }\n\n setIndex(index) {\n this.index = index\n }\n\n async getResult(seqNo) {\n this.txSeqNo = seqNo\n\n const promise = new Promise((resolve, reject) => {\n this.promiseResolve = resolve\n this.promiseReject = reject\n\n setTimeout(() => { reject(new Error('timeout')) }, TX_TIMEOUT)\n })\n\n this.verifyPromise()\n\n return promise\n }\n\n verifyPromise() {\n if (!this.txSeqNo && this.txSeqNo != 0) {\n return\n }\n\n if (!this.promiseResolve || !this.promiseReject) {\n return\n }\n\n if (this.transactions[this.txSeqNo]) {\n if (this.transactions[this.txSeqNo] == 'Success') {\n this.promiseResolve()\n } else {\n this.promiseReject(this.transactions[this.txSeqNo])\n }\n }\n }\n\n addTransaction(transaction, code) {\n if (this.transactions[transaction.seqNo]) return\n this.transactions[transaction.seqNo] = code\n this.verifyPromise()\n }\n}\n\nclass Database {\n constructor(changeHandler, receivedMessage, shareTokenId, shareTokenHkdfKey) {\n this.onChange = _setChangeHandler(changeHandler)\n\n this.items = {}\n this.itemsPlaintextMetadata = {}\n this.fileIds = {}\n\n const compareItems = (a, b) => {\n if (a.seqNo < b.seqNo || (a.seqNo === b.seqNo && a.operationIndex < b.operationIndex)) {\n return -1\n }\n if (a.seqNo > b.seqNo || (a.seqNo === b.seqNo && a.operationIndex > b.operationIndex)) {\n return 1\n }\n return 0\n }\n\n this.itemsIndex = new SortedArray([], compareItems)\n this.unverifiedTransactions = []\n this.lastSeqNo = 0\n this.init = false\n this.dbKey = null\n this.receivedMessage = receivedMessage\n this.usernamesByUserId = new Map()\n this.attributionEnabled = false\n\n this.shareTokenId = shareTokenId\n this.shareTokenHkdfKey = shareTokenHkdfKey\n\n // Queue that ensures 'ApplyTransactions' executes one at a time\n this.applyTransactionsQueue = new Queue()\n\n this.bundleChunks = {}\n }\n\n async applyTransactions(transactions, ownerId, dbId, dbNameHash) {\n for (let i = 0; i < transactions.length; i++) {\n const transaction = transactions[i]\n const seqNo = transaction.seqNo\n\n // client must only apply transcations in sequence\n if (seqNo !== this.lastSeqNo + 1) {\n console.warn(`Client attempted to apply transaction with seq no ${seqNo} when last seq no is ${this.lastSeqNo}`)\n continue\n }\n\n const transactionCode = await this.applyTransaction(this.dbKey, transaction, ownerId)\n this.lastSeqNo = seqNo\n\n for (let j = 0; j < this.unverifiedTransactions.length; j++) {\n if (!this.unverifiedTransactions[j] || seqNo < this.unverifiedTransactions[j].getStartSeqNo()) {\n continue\n }\n this.unverifiedTransactions[j].addTransaction(transactions[i], transactionCode)\n }\n\n if (this.init && transactionCode === 'Success') {\n this.onChange(this.getItems())\n }\n }\n\n if (!this.init) {\n this.init = true // allows triggers and loaders to be called from within client's changeHandler on database load\n this.dbId = dbId\n this.dbNameHash = dbNameHash\n this.onChange(this.getItems())\n this.receivedMessage() // wait to resolve openDatabase() until changeHandler has received all data\n }\n }\n\n async applyBundle(bundle, bundleSeqNo) {\n // client must only apply bundle when opening state\n if (this.lastSeqNo !== 0) {\n console.warn(`Client attempted to apply bundle when last seq no is ${this.lastSeqNo}`)\n return\n }\n\n for (let i = 0; i < bundle.itemsIndex.length; i++) {\n const itemIndex = bundle.itemsIndex[i]\n const itemId = bundle.itemsIndex[i].itemId\n const item = bundle.items[i]\n const itemsPlaintextMetadata = bundle.itemsPlaintextMetadata[i]\n\n if (item.file && item.file.fileEncryptionKeyString) {\n item.file.fileEncryptionKey = await crypto.aesGcm.getKeyFromKeyString(item.file.fileEncryptionKeyString)\n this.fileIds[item.file.fileId] = itemId\n }\n\n this.items[itemId] = item\n this.itemsPlaintextMetadata[itemId] = itemsPlaintextMetadata\n this.itemsIndex.insert(itemIndex)\n }\n\n this.lastSeqNo = bundleSeqNo\n }\n\n async applyTransaction(key, transaction, ownerId) {\n const seqNo = transaction.seqNo\n const command = transaction.command\n\n switch (command) {\n case 'Insert': {\n try {\n const record = await crypto.aesGcm.decryptJson(key, transaction.record)\n const itemId = record.id\n const item = record.item\n const createdBy = this.attributionFromTransaction(transaction)\n const writeAccess = transaction.writeAccess\n\n this.validateInsert(itemId)\n return this.applyInsert(itemId, seqNo, item, createdBy, writeAccess)\n } catch (transactionCode) {\n return transactionCode\n }\n }\n\n case 'Update': {\n try {\n const record = await crypto.aesGcm.decryptJson(key, transaction.record)\n const itemId = record.id\n const item = record.item\n const updatedBy = this.attributionFromTransaction(transaction)\n const __v = record.__v\n const writeAccess = transaction.writeAccess\n\n this.validateUpdate(itemId, __v, updatedBy, ownerId, writeAccess, 'updateItem')\n return this.applyUpdate(itemId, item, __v, updatedBy, writeAccess)\n } catch (transactionCode) {\n return transactionCode\n }\n }\n\n case 'Delete': {\n try {\n const record = await crypto.aesGcm.decryptJson(key, transaction.record)\n const itemId = record.id\n const deletedBy = this.attributionFromTransaction(transaction)\n const __v = record.__v\n\n this.validateUpdateOrDelete(itemId, __v, deletedBy, ownerId, 'deleteItem')\n return this.applyDelete(itemId)\n } catch (transactionCode) {\n return transactionCode\n }\n }\n\n case 'BatchTransaction': {\n try {\n const batch = transaction.operations\n const attribution = this.attributionFromTransaction(transaction)\n const recordPromises = []\n\n for (const operation of batch) {\n recordPromises.push(operation.record && crypto.aesGcm.decryptJson(key, operation.record))\n }\n const records = await Promise.all(recordPromises)\n\n this.validateBatchTransaction(batch, records, attribution, ownerId)\n return this.applyBatchTransaction(seqNo, batch, records, attribution)\n } catch (transactionCode) {\n return transactionCode\n }\n }\n\n case 'UploadFile': {\n try {\n const fileEncryptionKeyRaw = await crypto.aesGcm.decrypt(key, base64.decode(transaction.fileEncryptionKey))\n const fileEncryptionKey = await crypto.aesGcm.getKeyFromRawKey(fileEncryptionKeyRaw)\n const fileEncryptionKeyString = await crypto.aesGcm.getKeyStringFromKey(fileEncryptionKey)\n const fileMetadata = await crypto.aesGcm.decryptJson(fileEncryptionKey, transaction.fileMetadata)\n\n const itemId = fileMetadata.itemId\n const fileVersion = fileMetadata.__v\n const { fileName, fileSize, fileType } = fileMetadata\n const fileId = transaction.fileId\n const fileUploadedBy = this.attributionFromTransaction(transaction)\n\n this.validateUploadFile(itemId, fileVersion, fileUploadedBy, ownerId, 'uploadFile')\n return this.applyUploadFile(itemId, fileUploadedBy, fileVersion, fileEncryptionKey, fileEncryptionKeyString, fileName, fileId, fileSize, fileType)\n } catch (transactionCode) {\n return transactionCode\n }\n }\n\n case 'Rollback': {\n // no-op\n return\n }\n\n default: {\n console.warn(`Unknown command: ${command}`)\n return\n }\n }\n }\n\n attributionFromTransaction(transaction) {\n if (!this.attributionEnabled) return undefined\n return {\n timestamp: transaction.timestamp,\n userId: transaction.userId,\n }\n }\n\n validateInsert(itemId) {\n if (this.items[itemId]) {\n throw new errors.ItemAlreadyExists\n }\n }\n\n validateUpdate(itemId, __v, updatedBy, ownerId, writeAccess, command) {\n this.validateUpdateOrDelete(itemId, __v, updatedBy, ownerId, command)\n\n // writeAccess can only be set or removed by either the item creator or database owner\n const { createdBy } = this.itemsPlaintextMetadata[itemId]\n\n if (writeAccess || writeAccess === false) {\n if (!createdBy) return // if no attribution on item set, can't set write access\n const createdByUserId = createdBy.userId\n const updatedByUserId = updatedBy.userId\n\n if (createdByUserId !== updatedByUserId && updatedByUserId !== ownerId) {\n throw new errors.WriteAccessParamNotAllowed\n }\n }\n }\n\n validateUpdateOrDelete(itemId, __v, attribution, ownerId, command) {\n const item = this.items[itemId]\n if (!item) throw new errors.ItemDoesNotExist\n\n const currentVersion = this.getItemVersionNumber(itemId)\n if (__v <= currentVersion) {\n throw new errors.ItemUpdateConflict\n }\n\n this.validateAccessPermissions(itemId, attribution, ownerId, command)\n }\n\n validateUploadFile(itemId, __v, fileUploadedBy, ownerId, command) {\n const item = this.items[itemId]\n if (!item) throw new errors.ItemDoesNotExist\n\n const currentVersion = this.getFileVersionNumber(itemId)\n\n if (__v <= currentVersion) {\n throw new errors.FileUploadConflict\n }\n\n this.validateAccessPermissions(itemId, fileUploadedBy, ownerId, command)\n }\n\n validateAccessPermissions(itemId, attribution, ownerId, command) {\n const { createdBy, writeAccess } = this.itemsPlaintextMetadata[itemId]\n if (createdBy && attribution && writeAccess) {\n const createdByUserId = createdBy.userId\n const modifiedByUserId = attribution.userId\n\n let userIsAuthorized = false\n const { onlyCreator, users } = writeAccess\n\n if (modifiedByUserId === ownerId || modifiedByUserId === createdByUserId) {\n userIsAuthorized = true\n } else if (!onlyCreator && users) {\n for (const { userId } of users) {\n userIsAuthorized = modifiedByUserId === userId\n if (userIsAuthorized) break\n }\n }\n\n if (!userIsAuthorized) throw new errors.TransactionUnauthorized(command)\n }\n }\n\n itemExists(itemId) {\n return objectHasOwnProperty(this.items, itemId)\n }\n\n applyInsert(itemId, seqNo, record, createdBy, writeAccess, operationIndex) {\n const item = { seqNo }\n if (typeof operationIndex === 'number') item.operationIndex = operationIndex\n\n this.items[itemId] = {\n ...item,\n record,\n __v: 0\n }\n this.itemsPlaintextMetadata[itemId] = {\n createdBy,\n writeAccess,\n }\n this.itemsIndex.insert({ ...item, itemId })\n\n if (writeAccess && writeAccess.users) {\n for (const { userId, username } of writeAccess.users) {\n this.usernamesByUserId.set(userId, username)\n }\n }\n\n return success\n }\n\n applyUpdate(itemId, record, __v, updatedBy, writeAccess) {\n this.items[itemId].record = record\n this.items[itemId].__v = __v\n\n this.itemsPlaintextMetadata[itemId].updatedBy = updatedBy\n\n if (writeAccess === false) {\n delete this.itemsPlaintextMetadata[itemId].writeAccess\n } else if (writeAccess) {\n this.itemsPlaintextMetadata[itemId].writeAccess = writeAccess\n\n if (writeAccess.users) {\n for (const { userId, username } of writeAccess.users) {\n this.usernamesByUserId.set(userId, username)\n }\n }\n }\n\n return success\n }\n\n applyUploadFile(itemId, fileUploadedBy, __v, fileEncryptionKey, fileEncryptionKeyString, fileName, fileId, fileSize, fileType) {\n const existingFile = this.items[itemId].file\n if (existingFile) delete this.fileIds[existingFile.fileId]\n\n this.items[itemId].file = {\n fileName,\n fileId,\n fileSize,\n fileType,\n fileEncryptionKey,\n fileEncryptionKeyString,\n __v,\n }\n this.itemsPlaintextMetadata[itemId].fileUploadedBy = fileUploadedBy\n this.fileIds[fileId] = itemId\n return success\n }\n\n applyDelete(itemId) {\n this.itemsIndex.remove(this.items[itemId])\n delete this.items[itemId]\n delete this.itemsPlaintextMetadata[itemId]\n return success\n }\n\n validateBatchTransaction(batch, records, attribution, ownerId) {\n const uniqueItemIds = {}\n\n for (let i = 0; i < batch.length; i++) {\n const operation = batch[i]\n const { command, writeAccess } = operation\n\n const itemId = records[i].id\n const __v = records[i].__v\n\n if (uniqueItemIds[itemId]) throw new errors.OperationsConflict\n uniqueItemIds[itemId] = true\n\n switch (command) {\n case 'Insert':\n this.validateInsert(itemId)\n break\n\n case 'Update':\n this.validateUpdate(itemId, __v, attribution, ownerId, writeAccess, command)\n break\n\n case 'Delete':\n this.validateUpdateOrDelete(itemId, __v, attribution, ownerId, command)\n break\n }\n }\n }\n\n applyBatchTransaction(seqNo, batch, records, attribution) {\n for (let i = 0; i < batch.length; i++) {\n const operation = batch[i]\n\n const itemId = records[i].id\n const item = records[i].item\n const __v = records[i].__v\n const writeAccess = operation.writeAccess\n\n switch (operation.command) {\n case 'Insert':\n this.applyInsert(itemId, seqNo, item, attribution, writeAccess, i)\n break\n\n case 'Update':\n this.applyUpdate(itemId, item, __v, attribution, writeAccess)\n break\n\n case 'Delete':\n this.applyDelete(itemId, __v)\n break\n }\n }\n\n return success\n }\n\n registerUnverifiedTransaction() {\n const unverifiedTransaction = new UnverifiedTransaction(this.lastSeqNo)\n const i = this.unverifiedTransactions.push(unverifiedTransaction)\n unverifiedTransaction.setIndex(i - 1)\n return unverifiedTransaction\n }\n\n unregisterUnverifiedTransaction(pendingTransaction) {\n delete this.unverifiedTransactions[pendingTransaction.getIndex()]\n }\n\n getItems() {\n const result = []\n for (let i = 0; i < this.itemsIndex.array.length; i++) {\n const itemId = this.itemsIndex.array[i].itemId\n const record = this.items[itemId].record\n const item = { itemId, item: record }\n\n // set file metadata\n if (this.items[itemId].file) {\n const { fileId, fileName, fileSize } = this.items[itemId].file\n item.fileId = fileId\n item.fileName = fileName\n item.fileSize = fileSize\n }\n\n // set attribution metadata\n for (const prop of ['createdBy', 'updatedBy', 'fileUploadedBy']) {\n if (this.itemsPlaintextMetadata[itemId][prop]) {\n const { timestamp, userId } = this.itemsPlaintextMetadata[itemId][prop]\n const attribution = { timestamp }\n const username = this.usernamesByUserId.get(userId)\n if (username == null) {\n attribution.userDeleted = true\n } else {\n attribution.username = username\n }\n item[prop] = attribution\n }\n }\n\n // set write access permissions\n if (this.itemsPlaintextMetadata[itemId].writeAccess) {\n const { onlyCreator, users } = this.itemsPlaintextMetadata[itemId].writeAccess\n const writeAccess = {}\n if (onlyCreator) writeAccess.onlyCreator = onlyCreator\n\n if (users) {\n writeAccess.users = []\n for (const { userId } of users) {\n const username = this.usernamesByUserId.get(userId)\n if (username) writeAccess.users.push({ username })\n }\n }\n\n item.writeAccess = writeAccess\n }\n\n result.push(item)\n }\n return result\n }\n\n getItemVersionNumber(itemId) {\n return this.items[itemId].__v\n }\n\n getFileVersionNumber(itemId) {\n return this.items[itemId].file && this.items[itemId].file.__v\n }\n\n async decryptShareTokenEncryptedDbKey(shareTokenEncryptedDbKey, shareTokenEncryptionKeySalt) {\n const shareTokenEncryptionKey = await crypto.aesGcm.importKeyFromMaster(this.shareTokenHkdfKey, base64.decode(shareTokenEncryptionKeySalt))\n const dbKeyString = await crypto.aesGcm.decryptString(shareTokenEncryptionKey, shareTokenEncryptedDbKey)\n return dbKeyString\n }\n}\n\nconst _setChangeHandler = (changeHandler) => {\n return (items) => {\n try {\n changeHandler(items)\n } catch (e) {\n console.error('There was an error in your changeHandler.\\n\\n', e)\n }\n }\n}\n\nconst _idempotentOpenDatabase = (database, changeHandler, receivedMessage) => {\n // safe to replace -- enables idempotent calls to openDatabase\n database.onChange = _setChangeHandler(changeHandler)\n\n // if 1 call succeeds, all idempotent calls succeed\n const currentReceivedMessage = database.receivedMessage\n database.receivedMessage = () => {\n currentReceivedMessage()\n receivedMessage()\n }\n\n // database is already open, can return successfully\n if (database.init) {\n database.onChange(database.getItems())\n database.receivedMessage()\n return true\n }\n\n return false\n}\n\nconst _getShareTokenIdFromShareToken = (shareTokenArrayBuffer) => {\n const shareTokenIdArrayBuffer = shareTokenArrayBuffer.slice(0, UUID_CHAR_LENGTH)\n const shareTokenId = arrayBufferToString(shareTokenIdArrayBuffer, true)\n if (!shareTokenId || shareTokenId.length !== UUID_CHAR_LENGTH) throw new errors.ShareTokenInvalid\n return shareTokenId\n}\n\nconst _getShareTokenIdAndShareTokenSeed = (shareTokenResult) => {\n const shareTokenArrayBuffer = base64.decode(shareTokenResult)\n const shareTokenId = _getShareTokenIdFromShareToken(shareTokenArrayBuffer)\n const shareTokenSeed = shareTokenArrayBuffer.slice(UUID_CHAR_LENGTH)\n return { shareTokenId, shareTokenSeed }\n}\n\nconst _openDatabaseByShareToken = async (shareToken, changeHandler, receivedMessage) => {\n let shareTokenIdAndShareTokenSeed, shareTokenHkdfKey\n try {\n shareTokenIdAndShareTokenSeed = _getShareTokenIdAndShareTokenSeed(shareToken)\n shareTokenHkdfKey = await crypto.hkdf.importHkdfKey(shareTokenIdAndShareTokenSeed.shareTokenSeed)\n } catch {\n throw new errors.ShareTokenInvalid\n }\n const { shareTokenId } = shareTokenIdAndShareTokenSeed\n\n const { databaseId, validationMessage, signedValidationMessage } = await ws.authenticateShareToken(shareTokenId, shareTokenHkdfKey)\n ws.state.shareTokenIdToDbId[shareTokenId] = databaseId\n\n await _openDatabaseByDatabaseId(databaseId, changeHandler, receivedMessage, shareTokenId, shareTokenHkdfKey, validationMessage, signedValidationMessage)\n}\n\nconst _openDatabaseByDatabaseId = async (databaseId, changeHandler, receivedMessage, shareTokenId, shareTokenHkdfKey, validationMessage, signedValidationMessage) => {\n const database = ws.state.databasesByDbId[databaseId]\n\n if (!database) {\n ws.state.databasesByDbId[databaseId] = new Database(changeHandler, receivedMessage, shareTokenId, shareTokenHkdfKey)\n } else {\n if (_idempotentOpenDatabase(database, changeHandler, receivedMessage)) return\n }\n\n const action = 'OpenDatabaseByDatabaseId'\n const params = { databaseId, validationMessage, signedValidationMessage }\n await ws.request(action, params)\n}\n\nconst _openDatabaseByNameHash = async (dbNameHash, newDatabaseParams, changeHandler, receivedMessage) => {\n const database = ws.state.databases[dbNameHash]\n\n if (!database) {\n ws.state.databases[dbNameHash] = new Database(changeHandler, receivedMessage)\n } else {\n if (_idempotentOpenDatabase(database, changeHandler, receivedMessage)) return\n }\n\n const action = 'OpenDatabase'\n const params = { dbNameHash, newDatabaseParams }\n await ws.request(action, params)\n}\n\nconst _openDatabase = async (changeHandler, params) => {\n try {\n let receivedMessage\n let timeout\n const firstMessageFromWebSocket = new Promise((resolve, reject) => {\n receivedMessage = resolve\n timeout = setTimeout(() => reject(new Error('timeout')), TX_TIMEOUT)\n })\n\n const { dbNameHash, newDatabaseParams, databaseId, shareToken } = params\n try {\n\n if (dbNameHash) await _openDatabaseByNameHash(dbNameHash, newDatabaseParams, changeHandler, receivedMessage)\n else if (databaseId) await _openDatabaseByDatabaseId(databaseId, changeHandler, receivedMessage)\n else if (shareToken) await _openDatabaseByShareToken(shareToken, changeHandler, receivedMessage)\n\n await firstMessageFromWebSocket\n } catch (e) {\n clearTimeout(timeout)\n\n if (e.response && e.response.data) {\n const data = e.response.data\n\n if (data === 'Database already creating') {\n throw new errors.DatabaseAlreadyOpening\n } else if (data === 'Database is owned by user') {\n if (databaseId) throw new errors.DatabaseIdNotAllowedForOwnDatabase\n else if (shareToken) throw new errors.ShareTokenNotAllowedForOwnDatabase\n } else if (data === 'Database key not found' || data === 'Database not found') {\n throw new errors.DatabaseNotFound\n }\n\n switch (data.name) {\n case 'SubscriptionNotFound':\n throw new errors.SubscriptionNotFound\n case 'SubscriptionInactive':\n throw new errors.SubscriptionInactive(data.subscriptionStatus)\n case 'TrialExpired':\n throw new errors.TrialExpired\n }\n\n }\n\n throw e\n }\n\n } catch (e) {\n _parseGenericErrors(e)\n throw e\n }\n}\n\nconst _createDatabase = async (dbName, encryptionMode) => {\n const dbId = uuidv4()\n\n const dbKey = await crypto.aesGcm.generateKey()\n const dbKeyString = await crypto.aesGcm.getKeyStringFromKey(dbKey)\n\n const [encryptedDbKey, encryptedDbName] = await Promise.all([\n crypto.aesGcm.encryptString(ws.keys.encryptionKey, dbKeyString),\n crypto.aesGcm.encryptString(dbKey, dbName)\n ])\n\n const newDatabaseParams = {\n dbId,\n encryptedDbKey,\n encryptedDbName,\n attribution: true,\n }\n\n if (encryptionMode === 'server-side') newDatabaseParams.plaintextDbKey = dbKeyString\n\n // tie database to user's fingerprint at time of creation\n newDatabaseParams.fingerprint = await _getMyFingerprint()\n\n return newDatabaseParams\n}\n\nconst _validateEncryptionMode = (encryptionMode) => {\n if (encryptionMode === 'server-side' && !config.isServerSideEncryptionModeAllowed()) {\n throw new errors.ServerSideEncryptionNotEnabledInClient\n }\n}\n\nconst _validateDbName = (dbName) => {\n if (typeof dbName !== 'string') throw new errors.DatabaseNameMustBeString\n if (dbName.length === 0) throw new errors.DatabaseNameCannotBeBlank\n if (dbName.length > MAX_DB_NAME_CHAR_LENGTH) throw new errors.DatabaseNameTooLong(MAX_DB_NAME_CHAR_LENGTH)\n}\n\nconst _validateDbId = (dbId) => {\n if (typeof dbId !== 'string') throw new errors.DatabaseIdMustBeString\n if (dbId.length === 0) throw new errors.DatabaseIdCannotBeBlank\n if (dbId.length !== UUID_CHAR_LENGTH) throw new errors.DatabaseIdInvalidLength(UUID_CHAR_LENGTH)\n}\n\nconst _validateDbInput = (params) => {\n if (typeof params !== 'object') throw new errors.ParamsMustBeObject\n\n if (objectHasOwnProperty(params, 'databaseName')) {\n\n _validateDbName(params.databaseName)\n if (objectHasOwnProperty(params, 'databaseId')) throw new errors.DatabaseIdNotAllowed\n if (objectHasOwnProperty(params, 'shareToken')) throw new errors.ShareTokenNotAllowed\n\n // try to block usage of verified users database. If user works around this and modifies this database,\n // they could mess up the database for themself.\n if (!params.allowVerifiedUsersDatabase && params.databaseName === VERIFIED_USERS_DATABASE_NAME) {\n throw new errors.DatabaseNameRestricted(VERIFIED_USERS_DATABASE_NAME)\n }\n\n } else if (objectHasOwnProperty(params, 'databaseId')) {\n\n _validateDbId(params.databaseId)\n if (objectHasOwnProperty(params, 'shareToken')) throw new errors.ShareTokenNotAllowed\n\n } else if (objectHasOwnProperty(params, 'shareToken')) {\n if (typeof params.shareToken !== 'string') throw new errors.ShareTokenInvalid\n } else {\n throw new errors.DatabaseNameMissing\n }\n\n if (objectHasOwnProperty(params, 'encryptionMode') && !ENCRYPTION_MODE_OPTIONS[params.encryptionMode]) {\n throw new errors.EncryptionModeNotValid(ENCRYPTION_MODE_OPTIONS)\n }\n\n _checkSignedInState()\n}\n\nconst openDatabase = async (params) => {\n try {\n _validateDbInput(params)\n if (!objectHasOwnProperty(params, 'changeHandler')) throw new errors.ChangeHandlerMissing\n\n const { databaseName, databaseId, shareToken, changeHandler, encryptionMode = ws.encryptionMode } = params\n\n if (typeof changeHandler !== 'function') throw new errors.ChangeHandlerMustBeFunction\n _validateEncryptionMode(encryptionMode)\n\n if (databaseName) {\n const dbNameHash = encryptionMode === 'server-side'\n ? databaseName // Hashing is meant to keep it secret, no need to hash if encryption mode is server-side\n : (ws.state.dbNameToHash[databaseName] || await crypto.hmac.signString(ws.keys.hmacKey, databaseName))\n\n if (encryptionMode === 'end-to-end') ws.state.dbNameToHash[databaseName] = dbNameHash // eslint-disable-line require-atomic-updates\n\n const newDatabaseParams = await _createDatabase(databaseName, encryptionMode)\n\n const openByDbNameHashParams = { dbNameHash, newDatabaseParams }\n await _openDatabase(changeHandler, openByDbNameHashParams)\n } else if (databaseId) {\n const openByDbIdParams = { databaseId }\n await _openDatabase(changeHandler, openByDbIdParams)\n } else {\n const openByShareToken = { shareToken }\n await _openDatabase(changeHandler, openByShareToken)\n }\n } catch (e) {\n\n switch (e.name) {\n case 'ParamsMustBeObject':\n case 'DatabaseAlreadyOpening':\n case 'DatabaseNameMustBeString':\n case 'DatabaseNameMissing':\n case 'DatabaseNameCannotBeBlank':\n case 'DatabaseNameTooLong':\n case 'DatabaseNameRestricted':\n case 'DatabaseIdMustBeString':\n case 'DatabaseIdCannotBeBlank':\n case 'DatabaseIdInvalidLength':\n case 'DatabaseIdNotAllowed':\n case 'DatabaseIdNotAllowedForOwnDatabase':\n case 'ShareTokenNotAllowed':\n case 'ShareTokenInvalid':\n case 'ShareTokenNotFound':\n case 'ShareTokenNotAllowedForOwnDatabase':\n case 'DatabaseNotFound':\n case 'ChangeHandlerMissing':\n case 'ChangeHandlerMustBeFunction':\n case 'EncryptionModeNotValid':\n case 'ServerSideEncryptionNotEnabledInClient':\n case 'UserMustChangePassword':\n case 'UserNotSignedIn':\n case 'UserNotFound':\n case 'SubscriptionNotFound':\n case 'SubscriptionInactive':\n case 'TrialExpired':\n case 'TooManyRequests':\n case 'ServiceUnavailable':\n throw e\n\n default:\n throw new errors.UnknownServiceUnavailable(e)\n }\n }\n}\n\nconst getOpenDb = (dbName, databaseId, shareToken, encryptionMode = 'end-to-end') => {\n _validateEncryptionMode(encryptionMode)\n\n const shareTokenId = shareToken && _getShareTokenIdFromShareToken(base64.decode(shareToken))\n\n const dbNameHash = encryptionMode === 'server-side' ? dbName : ws.state.dbNameToHash[dbName]\n const database = dbName\n ? ws.state.databases[dbNameHash]\n : ws.state.databasesByDbId[databaseId || ws.state.shareTokenIdToDbId[shareTokenId]]\n\n if (!database || !database.init) throw new errors.DatabaseNotOpen\n return database\n}\n\nconst insertItem = async (params) => {\n try {\n _validateDbInput(params)\n\n const database = getOpenDb(params.databaseName, params.databaseId, params.shareToken, params.encryptionMode || ws.encryptionMode)\n\n const action = 'Insert'\n const insertParams = await _buildInsertParams(database, params)\n\n await postTransaction(database, action, insertParams)\n\n } catch (e) {\n\n switch (e.name) {\n case 'ParamsMustBeObject':\n case 'DatabaseNotOpen':\n case 'DatabaseNameMissing':\n case 'DatabaseNameMustBeString':\n case 'DatabaseNameCannotBeBlank':\n case 'DatabaseNameTooLong':\n case 'DatabaseNameRestricted':\n case 'DatabaseIdMustBeString':\n case 'DatabaseIdCannotBeBlank':\n case 'DatabaseIdInvalidLength':\n case 'DatabaseIdNotAllowed':\n case 'ShareTokenNotAllowed':\n case 'ShareTokenInvalid':\n case 'DatabaseIsReadOnly':\n case 'EncryptionModeNotValid':\n case 'ServerSideEncryptionNotEnabledInClient':\n case 'ItemIdMustBeString':\n case 'ItemIdCannotBeBlank':\n case 'ItemIdTooLong':\n case 'ItemMissing':\n case 'ItemInvalid':\n case 'ItemTooLarge':\n case 'ItemAlreadyExists':\n case 'UserMustChangePassword':\n case 'UserNotSignedIn':\n case 'UserNotFound':\n case 'TooManyRequests':\n case 'ServiceUnavailable':\n throw e\n\n default:\n throw new errors.UnknownServiceUnavailable(e)\n }\n\n }\n}\n\nconst _buildInsertParams = async (database, params) => {\n if (!objectHasOwnProperty(params, 'item')) throw new errors.ItemMissing\n\n const { item, itemId, writeAccess } = params\n\n if (objectHasOwnProperty(params, 'itemId')) {\n if (typeof itemId !== 'string') throw new errors.ItemIdMustBeString\n if (itemId.length === 0) throw new errors.ItemIdCannotBeBlank\n if (itemId.length > MAX_ITEM_ID_CHAR_LENGTH) throw new errors.ItemIdTooLong(MAX_ITEM_ID_CHAR_LENGTH)\n }\n\n const itemString = JSON.stringify(item)\n if (!itemString) throw new errors.ItemInvalid\n if (byteSizeOfString(itemString) > MAX_ITEM_BYTES) throw new errors.ItemTooLarge(MAX_ITEM_KB)\n\n const id = itemId || uuidv4()\n\n const itemKey = await crypto.hmac.signString(ws.keys.hmacKey, id)\n const itemRecord = { id, item }\n const encryptedItem = await crypto.aesGcm.encryptJson(database.dbKey, itemRecord)\n\n return { itemKey, encryptedItem, writeAccess }\n}\n\nconst updateItem = async (params) => {\n try {\n _validateDbInput(params)\n\n const database = getOpenDb(params.databaseName, params.databaseId, params.shareToken, params.encryptionMode || ws.encryptionMode)\n\n const action = 'Update'\n const updateParams = await _buildUpdateParams(database, params)\n\n await postTransaction(database, action, updateParams)\n } catch (e) {\n\n switch (e.name) {\n case 'ParamsMustBeObject':\n case 'DatabaseNotOpen':\n case 'DatabaseNameMissing':\n case 'DatabaseNameMustBeString':\n case 'DatabaseNameCannotBeBlank':\n case 'DatabaseNameTooLong':\n case 'DatabaseNameRestricted':\n case 'DatabaseIdMustBeString':\n case 'DatabaseIdCannotBeBlank':\n case 'DatabaseIdInvalidLength':\n case 'DatabaseIdNotAllowed':\n case 'ShareTokenNotAllowed':\n case 'ShareTokenInvalid':\n case 'DatabaseIsReadOnly':\n case 'EncryptionModeNotValid':\n case 'ServerSideEncryptionNotEnabledInClient':\n case 'ItemIdMissing':\n case 'ItemIdMustBeString':\n case 'ItemIdCannotBeBlank':\n case 'ItemIdTooLong':\n case 'ItemMissing':\n case 'ItemInvalid':\n case 'ItemTooLarge':\n case 'ItemDoesNotExist':\n case 'ItemUpdateConflict':\n case 'WriteAccessParamNotAllowed':\n case 'TransactionUnauthorized':\n case 'UserMustChangePassword':\n case 'UserNotSignedIn':\n case 'UserNotFound':\n case 'TooManyRequests':\n case 'ServiceUnavailable':\n throw e\n\n default:\n throw new errors.UnknownServiceUnavailable(e)\n }\n\n }\n}\n\nconst _buildUpdateParams = async (database, params) => {\n if (!objectHasOwnProperty(params, 'item')) throw new errors.ItemMissing\n if (!objectHasOwnProperty(params, 'itemId')) throw new errors.ItemIdMissing\n\n if (!params.writeAccess && objectHasOwnProperty(params, 'writeAccess')) params.writeAccess = false // marks writeAccess for deletion\n\n const { item, itemId, writeAccess } = params\n\n if (typeof itemId !== 'string') throw new errors.ItemIdMustBeString\n if (itemId.length === 0) throw new errors.ItemIdCannotBeBlank\n if (itemId.length > MAX_ITEM_ID_CHAR_LENGTH) throw new errors.ItemIdTooLong(MAX_ITEM_ID_CHAR_LENGTH)\n\n if (!database.itemExists(itemId)) throw new errors.ItemDoesNotExist\n\n const itemString = JSON.stringify(item)\n if (!itemString) throw new errors.ItemInvalid\n if (byteSizeOfString(itemString) > MAX_ITEM_BYTES) throw new errors.ItemTooLarge(MAX_ITEM_KB)\n\n const currentVersion = database.getItemVersionNumber(itemId)\n const itemKey = await crypto.hmac.signString(ws.keys.hmacKey, itemId)\n const itemRecord = { id: itemId, item, __v: currentVersion + 1 }\n const encryptedItem = await crypto.aesGcm.encryptJson(database.dbKey, itemRecord)\n\n return { itemKey, encryptedItem, writeAccess }\n}\n\nconst deleteItem = async (params) => {\n try {\n _validateDbInput(params)\n\n const database = getOpenDb(params.databaseName, params.databaseId, params.shareToken, params.encryptionMode || ws.encryptionMode)\n\n const action = 'Delete'\n const deleteParams = await _buildDeleteParams(database, params)\n\n await postTransaction(database, action, deleteParams)\n } catch (e) {\n\n switch (e.name) {\n case 'ParamsMustBeObject':\n case 'DatabaseNotOpen':\n case 'DatabaseNameMissing':\n case 'DatabaseNameMustBeString':\n case 'DatabaseNameCannotBeBlank':\n case 'DatabaseNameTooLong':\n case 'DatabaseNameRestricted':\n case 'DatabaseIdMustBeString':\n case 'DatabaseIdCannotBeBlank':\n case 'DatabaseIdInvalidLength':\n case 'DatabaseIdNotAllowed':\n case 'ShareTokenNotAllowed':\n case 'ShareTokenInvalid':\n case 'DatabaseIsReadOnly':\n case 'EncryptionModeNotValid':\n case 'ServerSideEncryptionNotEnabledInClient':\n case 'ItemIdMissing':\n case 'ItemIdMustBeString':\n case 'ItemIdCannotBeBlank':\n case 'ItemIdTooLong':\n case 'ItemDoesNotExist':\n case 'ItemUpdateConflict':\n case 'TransactionUnauthorized':\n case 'UserMustChangePassword':\n case 'UserNotSignedIn':\n case 'UserNotFound':\n case 'TooManyRequests':\n case 'ServiceUnavailable':\n throw e\n\n default:\n throw new errors.UnknownServiceUnavailable(e)\n }\n\n }\n}\n\nconst _buildDeleteParams = async (database, params) => {\n if (!objectHasOwnProperty(params, 'itemId')) throw new errors.ItemIdMissing\n\n const { itemId } = params\n\n if (typeof itemId !== 'string') throw new errors.ItemIdMustBeString\n if (itemId.length === 0) throw new errors.ItemIdCannotBeBlank\n if (itemId.length > MAX_ITEM_ID_CHAR_LENGTH) throw new errors.ItemIdTooLong(MAX_ITEM_ID_CHAR_LENGTH)\n\n if (!database.itemExists(itemId)) throw new errors.ItemDoesNotExist\n\n const currentVersion = database.getItemVersionNumber(itemId)\n const itemKey = await crypto.hmac.signString(ws.keys.hmacKey, itemId)\n const itemRecord = { id: itemId, __v: currentVersion + 1 }\n const encryptedItem = await crypto.aesGcm.encryptJson(database.dbKey, itemRecord)\n\n return { itemKey, encryptedItem }\n}\n\nconst putTransaction = async (params) => {\n try {\n _validateDbInput(params)\n if (!objectHasOwnProperty(params, 'operations')) throw new errors.OperationsMissing\n\n const { databaseName, databaseId, shareToken, operations, encryptionMode = ws.encryptionMode } = params\n\n if (!Array.isArray(operations)) throw new errors.OperationsMustBeArray\n\n const database = getOpenDb(databaseName, databaseId, shareToken, encryptionMode)\n\n const action = 'BatchTransaction'\n\n const operationParamsPromises = await Promise.all(operations.map(operation => {\n const command = operation.command\n\n switch (command) {\n case 'Insert': {\n return _buildInsertParams(database, operation)\n }\n\n case 'Update': {\n return _buildUpdateParams(database, operation)\n }\n\n case 'Delete': {\n return _buildDeleteParams(database, operation)\n }\n\n default: throw new errors.CommandNotRecognized(command)\n }\n }))\n const operationParamsPromiseResults = await Promise.all(operationParamsPromises)\n\n const operationParams = {\n operations: operations.map((operation, i) => ({\n command: operation.command,\n ...operationParamsPromiseResults[i]\n }))\n }\n\n try {\n await postTransaction(database, action, operationParams)\n } catch (e) {\n if (e.response && e.response.data.error === 'OperationsExceedLimit') {\n throw new errors.OperationsExceedLimit(e.response.data.limit)\n }\n throw e\n }\n\n } catch (e) {\n\n switch (e.name) {\n case 'ParamsMustBeObject':\n case 'DatabaseNotOpen':\n case 'DatabaseNameMissing':\n case 'DatabaseNameMustBeString':\n case 'DatabaseNameCannotBeBlank':\n case 'DatabaseNameTooLong':\n case 'DatabaseNameRestricted':\n case 'DatabaseIdMustBeString':\n case 'DatabaseIdCannotBeBlank':\n case 'DatabaseIdInvalidLength':\n case 'DatabaseIdNotAllowed':\n case 'ShareTokenNotAllowed':\n case 'ShareTokenInvalid':\n case 'DatabaseIsReadOnly':\n case 'EncryptionModeNotValid':\n case 'ServerSideEncryptionNotEnabledInClient':\n case 'OperationsMissing':\n case 'OperationsMustBeArray':\n case 'OperationsConflict':\n case 'OperationsExceedLimit':\n case 'CommandNotRecognized':\n case 'ItemIdMissing':\n case 'ItemIdMustBeString':\n case 'ItemIdCannotBeBlank':\n case 'ItemIdTooLong':\n case 'ItemMissing':\n case 'ItemInvalid':\n case 'ItemTooLarge':\n case 'ItemAlreadyExists':\n case 'ItemDoesNotExist':\n case 'ItemUpdateConflict':\n case 'WriteAccessParamNotAllowed':\n case 'TransactionUnauthorized':\n case 'UserMustChangePassword':\n case 'UserNotSignedIn':\n case 'UserNotFound':\n case 'TooManyRequests':\n case 'ServiceUnavailable':\n throw e\n\n default:\n throw new errors.UnknownServiceUnavailable(e)\n }\n }\n}\n\nconst postTransaction = async (database, action, params) => {\n try {\n const pendingTx = database.registerUnverifiedTransaction()\n\n const paramsWithDbData = {\n ...params,\n dbId: database.dbId,\n dbNameHash: database.dbNameHash\n }\n\n const response = await ws.request(action, paramsWithDbData)\n const seqNo = response.data.sequenceNo\n\n await pendingTx.getResult(seqNo)\n\n database.unregisterUnverifiedTransaction(pendingTx)\n\n return seqNo\n } catch (e) {\n _parseGenericErrors(e)\n\n if (e.response) {\n if (e.response.data.name === 'DatabaseIsReadOnly') {\n throw new errors.DatabaseIsReadOnly\n } else if (e.response.data.message === 'UserNotFound') {\n throw new errors.UserNotFound(e.response.data.username)\n }\n }\n\n throw e\n }\n}\n\nconst _completeFileUpload = async (database, fileId, itemKey, encryptedFileMetadata, encryptedFileEncryptionKey) => {\n const params = {\n dbId: database.dbId,\n fileId,\n itemKey,\n fileMetadata: encryptedFileMetadata,\n fileEncryptionKey: base64.encode(encryptedFileEncryptionKey)\n }\n\n const action = 'CompleteFileUpload'\n await postTransaction(database, action, params)\n}\n\nconst _readBlob = async (blob) => {\n const reader = new FileReader()\n\n return new Promise((resolve, reject) => {\n reader.onload = (e) => {\n if (!e.target.error) {\n resolve(e.target.result)\n } else {\n reject(e.target.error)\n }\n }\n\n reader.readAsArrayBuffer(blob)\n })\n}\n\nconst _uploadChunkRequest = async (request, bytesTransferredObject, progressHandler, chunkSize) => {\n await request\n bytesTransferredObject.bytesTransferred += chunkSize\n if (progressHandler) progressHandler({ ...bytesTransferredObject })\n}\n\nconst _uploadChunk = async (batch, chunk, dbId, fileId, fileEncryptionKey, chunkNumber, bytesTransferredObject, progressHandler) => {\n const plaintextChunk = await _readBlob(chunk)\n\n // encrypt each chunk with new encryption key to maintain lower usage of file encryption key\n const [chunkEncryptionKey, encryptedChunkEncryptionKey] = await crypto.aesGcm.generateAndEncryptKeyEncryptionKey(fileEncryptionKey)\n const encryptedChunk = await crypto.aesGcm.encrypt(chunkEncryptionKey, plaintextChunk)\n\n const uploadChunkParams = {\n dbId,\n chunkNumber,\n fileId,\n\n // arrayBufferToString takes up less space than base64 encoding. Uint8Array format required so that encrypted\n // chunks that are odd number sized get converted to string properly\n chunk: arrayBufferToString(new Uint8Array(encryptedChunk)),\n chunkEncryptionKey: arrayBufferToString(new Uint8Array(encryptedChunkEncryptionKey)),\n }\n\n // queue UploadFileChunk request into batch of requests\n const action = 'UploadFileChunk'\n\n const uploadChunkRequest = _uploadChunkRequest(ws.request(action, uploadChunkParams), bytesTransferredObject, progressHandler, chunk.size)\n\n batch.push(uploadChunkRequest)\n\n // wait for batch of UploadFileChunk requests to finish before moving on to upload the next batch of chunks\n if (batch.length === FILE_CHUNKS_PER_BATCH) {\n await Promise.all(batch)\n batch.length = 0\n }\n}\n\nconst _buildFileMetadata = async (params, database) => {\n if (!objectHasOwnProperty(params, 'itemId')) throw new errors.ItemIdMissing\n if (!objectHasOwnProperty(params, 'file')) throw new errors.FileMissing\n\n const { itemId, file } = params\n\n if (typeof itemId !== 'string') throw new errors.ItemIdMustBeString\n if (itemId.length === 0) throw new errors.ItemIdCannotBeBlank\n if (itemId.length > MAX_ITEM_ID_CHAR_LENGTH) throw new errors.ItemIdTooLong(MAX_ITEM_ID_CHAR_LENGTH)\n\n if (!database.itemExists(itemId)) throw new errors.ItemDoesNotExist\n\n if (!(file instanceof File)) throw new errors.FileMustBeFile\n if (file.size === 0) throw new errors.FileCannotBeEmpty\n\n const itemKey = await crypto.hmac.signString(ws.keys.hmacKey, itemId)\n const currentVersion = database.getFileVersionNumber(itemId)\n const fileMetadata = {\n itemId,\n __v: currentVersion === undefined ? 0 : currentVersion + 1,\n fileName: file.name,\n fileSize: file.size,\n fileType: file.type,\n }\n return { itemKey, fileMetadata }\n}\n\nconst _validateUploadFile = (params) => {\n _validateDbInput(params)\n if (objectHasOwnProperty(params, 'progressHandler') && typeof params.progressHandler !== 'function') {\n throw new errors.ProgressHandlerMustBeFunction\n }\n}\n\nconst uploadFile = async (params) => {\n try {\n _validateUploadFile(params)\n\n const database = getOpenDb(params.databaseName, params.databaseId, params.shareToken, params.encryptionMode || ws.encryptionMode)\n const { dbId } = database\n\n try {\n const { itemKey, fileMetadata } = await _buildFileMetadata(params, database)\n\n // generate a new key particular to this file to maintain lower usage of dbKey\n const [fileEncryptionKey, encryptedFileEncryptionKey] = await crypto.aesGcm.generateAndEncryptKeyEncryptionKey(database.dbKey)\n const encryptedFileMetadata = await crypto.aesGcm.encryptJson(fileEncryptionKey, fileMetadata)\n\n // server generates unique file identifier\n const { data: { fileId } } = await ws.request('GenerateFileId', { dbId: database.dbId })\n\n // upload file in chunks of size FILE_CHUNK_SIZE\n const file = params.file\n let position = 0\n let chunkNumber = 0\n let batch = [] // will use this to send chunks to server in batches of FILE_CHUNKS_PER_BATCH\n const bytesTransferredObject = {\n bytesTransferred: 0\n }\n\n while (position < file.size) {\n // read a chunk at a time to keep memory overhead low\n const chunk = file.slice(position, position + FILE_CHUNK_SIZE)\n await _uploadChunk(batch, chunk, dbId, fileId, fileEncryptionKey, chunkNumber, bytesTransferredObject, params.progressHandler)\n\n chunkNumber += 1\n position += FILE_CHUNK_SIZE\n }\n\n await Promise.all(batch)\n await _completeFileUpload(database, fileId, itemKey, encryptedFileMetadata, encryptedFileEncryptionKey)\n } catch (e) {\n _parseGenericErrors(e)\n\n if (e.response && e.response.data === 'DatabaseIsReadOnly') {\n throw new errors.DatabaseIsReadOnly\n }\n\n throw e\n }\n } catch (e) {\n\n switch (e.name) {\n case 'ParamsMustBeObject':\n case 'DatabaseNotOpen':\n case 'DatabaseNameMissing':\n case 'DatabaseNameMustBeString':\n case 'DatabaseNameCannotBeBlank':\n case 'DatabaseNameTooLong':\n case 'DatabaseNameRestricted':\n case 'DatabaseIdMustBeString':\n case 'DatabaseIdCannotBeBlank':\n case 'DatabaseIdInvalidLength':\n case 'DatabaseIdNotAllowed':\n case 'ShareTokenNotAllowed':\n case 'ShareTokenInvalid':\n case 'DatabaseIsReadOnly':\n case 'EncryptionModeNotValid':\n case 'ServerSideEncryptionNotEnabledInClient':\n case 'ItemIdMissing':\n case 'ItemIdMustBeString':\n case 'ItemIdCannotBeBlank':\n case 'ItemIdTooLong':\n case 'ItemDoesNotExist':\n case 'TransactionUnauthorized':\n case 'FileMustBeFile':\n case 'FileCannotBeEmpty':\n case 'FileMissing':\n case 'FileUploadConflict':\n case 'ProgressHandlerMustBeFunction':\n case 'UserMustChangePassword':\n case 'UserNotSignedIn':\n case 'TooManyRequests':\n case 'ServiceUnavailable':\n throw e\n\n default:\n throw new errors.UnknownServiceUnavailable(e)\n }\n\n }\n}\n\nconst _getChunk = async (dbId, fileId, chunkNumber, fileEncryptionKey) => {\n try {\n const action = 'GetChunk'\n const params = {\n dbId,\n fileId,\n chunkNumber,\n }\n const response = await ws.request(action, params)\n const data = response.data\n\n const chunkRawBuffer = new Uint8Array(new Uint16Array(stringToArrayBuffer(data.chunk))).buffer\n const chunkEncryptionKeyRawBuffer = new Uint8Array(new Uint16Array(stringToArrayBuffer(data.chunkEncryptionKey))).buffer\n\n const chunkEncryptionKeyRaw = await crypto.aesGcm.decrypt(fileEncryptionKey, chunkEncryptionKeyRawBuffer)\n const chunkEncryptionKey = await crypto.aesGcm.getKeyFromRawKey(chunkEncryptionKeyRaw)\n\n const chunk = await crypto.aesGcm.decrypt(chunkEncryptionKey, chunkRawBuffer)\n return chunk\n } catch (e) {\n _parseGenericErrors(e)\n throw e\n }\n}\n\nconst _getByteRange = async (dbId, fileId, fileEncryptionKey, range) => {\n const { start, end } = range\n\n const chunks = []\n const startChunkNumber = Math.floor(start / FILE_CHUNK_SIZE)\n const endChunkNumber = Math.floor(end / FILE_CHUNK_SIZE) - (end % FILE_CHUNK_SIZE === 0 ? 1 : 0)\n\n let chunkNumber = startChunkNumber\n while (chunkNumber <= endChunkNumber) {\n let chunk = await _getChunk(dbId, fileId, chunkNumber, fileEncryptionKey)\n\n if (chunkNumber === startChunkNumber && chunkNumber === endChunkNumber && end % FILE_CHUNK_SIZE) {\n chunk = chunk.slice(start % FILE_CHUNK_SIZE, end % FILE_CHUNK_SIZE)\n } else if (chunkNumber === startChunkNumber) {\n chunk = chunk.slice(start % FILE_CHUNK_SIZE)\n } else if (chunkNumber === endChunkNumber && end % FILE_CHUNK_SIZE) {\n chunk = chunk.slice(0, end % FILE_CHUNK_SIZE)\n }\n\n chunks.push(chunk)\n chunkNumber += 1\n }\n\n return chunks\n}\n\nconst _getFile = async (dbId, fileId, fileEncryptionKey, fileSize) => {\n const chunks = []\n let chunkNumber = 0\n\n const finalChunkNumber = fileSize < FILE_CHUNK_SIZE\n ? 0\n : Math.floor(fileSize / FILE_CHUNK_SIZE) - (fileSize % FILE_CHUNK_SIZE === 0 ? 1 : 0)\n\n while (chunkNumber <= finalChunkNumber) {\n const chunk = await _getChunk(dbId, fileId, chunkNumber, fileEncryptionKey)\n chunks.push(chunk)\n chunkNumber += 1\n }\n\n return chunks\n}\n\nconst _validateGetFileParams = (params) => {\n _validateDbInput(params)\n\n if (!objectHasOwnProperty(params, 'fileId')) throw new errors.FileIdMissing\n\n const { fileId, range } = params\n\n if (typeof fileId !== 'string') throw new errors.FileIdMustBeString\n if (fileId.length === 0) throw new errors.FileIdCannotBeBlank\n if (fileId.length > MAX_ITEM_ID_CHAR_LENGTH) throw new errors.FileIdTooLong(MAX_ITEM_ID_CHAR_LENGTH)\n\n if (objectHasOwnProperty(params, 'range')) {\n if (typeof range !== 'object') throw new errors.RangeMustBeObject\n\n if (!objectHasOwnProperty(range, 'start')) throw new errors.RangeMissingStart\n if (!objectHasOwnProperty(range, 'end')) throw new errors.RangeMissingEnd\n\n const { start, end } = range\n\n if (typeof start !== 'number') throw new errors.RangeStartMustBeNumber\n if (typeof end !== 'number') throw new errors.RangeEndMustBeNumber\n\n if (start < 0) throw new errors.RangeStartMustBeGreaterThanZero\n if (end <= start) throw new errors.RangeEndMustBeGreaterThanRangeStart\n }\n}\n\nconst getFile = async (params) => {\n try {\n _validateGetFileParams(params)\n\n const database = getOpenDb(params.databaseName, params.databaseId, params.shareToken, params.encryptionMode || ws.encryptionMode)\n const { dbId } = database\n const { fileId, range } = params\n\n const itemId = database.fileIds[fileId]\n const item = database.items[itemId]\n\n if (!item || !item.file) throw new errors.FileNotFound\n\n const { file: { fileName, fileSize, fileType, fileEncryptionKey } } = item\n\n if (range && range.end > fileSize) throw new errors.RangeEndMustBeLessThanFileSize\n\n const chunks = range\n ? await _getByteRange(dbId, fileId, fileEncryptionKey, range)\n : await _getFile(dbId, fileId, fileEncryptionKey, fileSize)\n\n return {\n file: new File(chunks, fileName, { type: fileType })\n }\n } catch (e) {\n\n switch (e.name) {\n case 'ParamsMustBeObject':\n case 'DatabaseNotOpen':\n case 'DatabaseNameMissing':\n case 'DatabaseNameMustBeString':\n case 'DatabaseNameCannotBeBlank':\n case 'DatabaseNameTooLong':\n case 'DatabaseNameRestricted':\n case 'DatabaseIdMustBeString':\n case 'DatabaseIdCannotBeBlank':\n case 'DatabaseIdInvalidLength':\n case 'DatabaseIdNotAllowed':\n case 'ShareTokenNotAllowed':\n case 'ShareTokenInvalid':\n case 'DatabaseIsReadOnly':\n case 'EncryptionModeNotValid':\n case 'ServerSideEncryptionNotEnabledInClient':\n case 'FileIdMissing':\n case 'FileIdMustBeString':\n case 'FileIdCannotBeBlank':\n case 'FileIdTooLong':\n case 'FileNotFound':\n case 'RangeMustBeObject':\n case 'RangeMissingStart':\n case 'RangeMissingEnd':\n case 'RangeStartMustBeNumber':\n case 'RangeEndMustBeNumber':\n case 'RangeStartMustBeGreaterThanZero':\n case 'RangeEndMustBeGreaterThanRangeStart':\n case 'RangeEndMustBeLessThanFileSize':\n case 'UserMustChangePassword':\n case 'UserNotSignedIn':\n case 'UserNotFound':\n case 'TooManyRequests':\n case 'ServiceUnavailable':\n throw e\n\n default:\n throw new errors.UnknownServiceUnavailable(e)\n }\n\n }\n}\n\nconst _verifyUsersParent = async (dbKey, verifiedUsers, databaseUser) => {\n const { username, senderUsername, verificationValues } = databaseUser\n const { sentSignature, receivedSignature, senderEcdsaPublicKey } = verificationValues\n\n const verifiedFingerprint = verifiedUsers[username] && verifiedUsers[username].record.fingerprint\n\n const parentRawEcdsaPublicKey = base64.decode(senderEcdsaPublicKey)\n const parentFingerprint = (verifiedUsers[senderUsername] && verifiedUsers[senderUsername].record.fingerprint)\n || await _getFingerprint(parentRawEcdsaPublicKey)\n const parentEcdsaPublicKey = await crypto.ecdsa.getPublicKeyFromRawPublicKey(parentRawEcdsaPublicKey)\n\n // verify parent's claim that sent the dbKey to user\n const expectedSentSignature = await _signFingerprintWithDbKey(dbKey, verifiedFingerprint)\n const verifiedParentSent = await crypto.ecdsa.verifyString(parentEcdsaPublicKey, sentSignature, expectedSentSignature)\n\n // verify user's claim that received the dbKey from parent\n const recipientEcdsaPublicKey = await crypto.ecdsa.getPublicKeyFromRawPublicKey(base64.decode(verificationValues.recipientEcdsaPublicKey))\n const expectedReceivedSignature = await _signFingerprintWithDbKey(dbKey, parentFingerprint)\n const verifiedReceivedFromParent = await crypto.ecdsa.verifyString(recipientEcdsaPublicKey, receivedSignature, expectedReceivedSignature)\n\n return verifiedParentSent && verifiedReceivedFromParent\n}\n\nconst _verifyReceivedDatabaseFromUser = async (dbKey, verifiedFingerprint, myFingerprint, myEcdsaPublicKey, verificationValues) => {\n const { mySentSignature, myReceivedSignature } = verificationValues\n\n // verify my claim that I received dbKey from this user\n const expectedReceivedSignature = await _signFingerprintWithDbKey(dbKey, verifiedFingerprint)\n const verifiedReceived = await crypto.ecdsa.verifyString(myEcdsaPublicKey, myReceivedSignature, expectedReceivedSignature)\n\n if (!verifiedReceived) return verifiedReceived\n\n // verify user's claim that sent dbKey to me\n const expectedSentSignature = await _signFingerprintWithDbKey(dbKey, myFingerprint)\n const senderEcdsaPublicKey = await crypto.ecdsa.getPublicKeyFromRawPublicKey(base64.decode(verificationValues.mySenderEcdsaPublicKey))\n const verifiedSent = await crypto.ecdsa.verifyString(senderEcdsaPublicKey, mySentSignature, expectedSentSignature)\n\n return verifiedSent && verifiedReceived\n}\n\nconst _verifySentDatabaseToUser = async (dbKey, verifiedFingerprint, myFingerprint, myEcdsaPublicKey, verificationValues) => {\n const { sentSignature, receivedSignature } = verificationValues\n\n // verify my claim that I sent dbKey to this user\n const expectedSentSignature = await _signFingerprintWithDbKey(dbKey, verifiedFingerprint)\n const verifiedSent = await crypto.ecdsa.verifyString(myEcdsaPublicKey, sentSignature, expectedSentSignature)\n\n if (!verifiedSent) return verifiedSent\n\n // verify user's claim that received dbKey from me\n const expectedReceivedSignature = await _signFingerprintWithDbKey(dbKey, myFingerprint)\n const recipientEcdsaPublicKey = await crypto.ecdsa.getPublicKeyFromRawPublicKey(base64.decode(verificationValues.recipientEcdsaPublicKey))\n const verifiedReceived = await crypto.ecdsa.verifyString(recipientEcdsaPublicKey, receivedSignature, expectedReceivedSignature)\n\n return verifiedSent && verifiedReceived\n}\n\nconst _buildDatabaseUserResult = async (dbKey, databaseUsers, verifiedUsers, myUsername, mySenderUsername) => {\n const myEcdsaPublicKey = await crypto.ecdsa.getPublicKeyFromPrivateKey(ws.keys.ecdsaPrivateKey)\n const myFingerprint = await _getMyFingerprint()\n\n // iterate over all database users to verify each user individually\n for (let i = 0; i < databaseUsers.length; i++) {\n const databaseUser = databaseUsers[i]\n const { username, isOwner, senderUsername, verificationValues } = databaseUser\n\n try {\n const verifiedFingerprint = verifiedUsers[username] && verifiedUsers[username].record.fingerprint\n\n const sentDatabaseToUser = verificationValues.isChild\n const receivedDatabaseFromUser = mySenderUsername === username\n\n if (verifiedFingerprint) {\n if (sentDatabaseToUser) {\n databaseUsers[i].verified = await _verifySentDatabaseToUser(dbKey, verifiedFingerprint, myFingerprint, myEcdsaPublicKey, verificationValues)\n } else if (receivedDatabaseFromUser) {\n const verifiedReceivedDatabaseFromUser = await _verifyReceivedDatabaseFromUser(dbKey, verifiedFingerprint, myFingerprint, myEcdsaPublicKey, verificationValues)\n\n // verify user's relationship to parent if has a parent\n if (verifiedReceivedDatabaseFromUser && senderUsername) {\n const verifiedGrandparent = await _verifyUsersParent(dbKey, verifiedUsers, databaseUser)\n databaseUsers[i].verified = verifiedGrandparent\n } else {\n databaseUsers[i].verified = verifiedReceivedDatabaseFromUser\n }\n\n } else if (!isOwner) {\n // verify unrelated user's parent sent dbKey to user and user received dbKey from their parent\n const verifiedUsersParent = await _verifyUsersParent(dbKey, verifiedUsers, databaseUser)\n databaseUsers[i].verified = verifiedUsersParent\n } else {\n // must be an owner that is not my child or parent, and owner is automatically verified\n databaseUsers[i].verified = isOwner\n }\n }\n } catch {\n // continue without setting verified boolean\n }\n\n // \"receivedFromUsername\" is easier to understand to end developer\n delete databaseUsers[i].senderUsername\n if (!isOwner) {\n if (verificationValues && verificationValues.isChild) databaseUsers[i].receivedFromUsername = myUsername\n else if (senderUsername) databaseUsers[i].receivedFromUsername = senderUsername\n }\n\n // these values are not useful to user\n delete databaseUsers[i].verificationValues\n }\n\n return databaseUsers\n}\n\nconst _databaseHasOwner = (databaseUsers) => {\n for (let i = 0; i < databaseUsers.length; i++) {\n const user = databaseUsers[i]\n if (user.isOwner) return true\n }\n\n return false\n}\n\nconst _getDatabaseUsers = async (databaseId, databaseNameHash, dbKey, verifiedUsers, username, senderUsername) => {\n const users = []\n const action = 'GetDatabaseUsers'\n const params = { databaseId, databaseNameHash }\n let databaseUsersResponse = await ws.request(action, params)\n\n users.push(...await _buildDatabaseUserResult(dbKey, databaseUsersResponse.data.users, verifiedUsers, username, senderUsername))\n\n while (databaseUsersResponse.data.nextPageTokenLessThanUserId || databaseUsersResponse.data.nextPageTokenMoreThanUserId) {\n params.nextPageTokenLessThanUserId = databaseUsersResponse.data.nextPageTokenLessThanUserId\n params.nextPageTokenMoreThanUserId = databaseUsersResponse.data.nextPageTokenMoreThanUserId\n databaseUsersResponse = await ws.request(action, params)\n users.push(...await _buildDatabaseUserResult(dbKey, databaseUsersResponse.data.users, verifiedUsers, username, senderUsername))\n }\n\n return users\n}\n\nconst _buildDatabaseResult = async (db, encryptionKey, ecdhPrivateKey, verifiedUsers, username) => {\n const { databaseId, databaseNameHash, isOwner, readOnly, resharingAllowed, senderUsername } = db\n\n let dbKey, databaseName\n if (db.encryptedDbKey || db.plaintextDbKey) {\n // user must already have access to database\n const dbKeyString = db.plaintextDbKey || await crypto.aesGcm.decryptString(encryptionKey, db.encryptedDbKey)\n dbKey = await crypto.aesGcm.getKeyFromKeyString(dbKeyString)\n databaseName = await crypto.aesGcm.decryptString(dbKey, db.databaseName)\n\n // don't expose the user's own verified users database to user -- it's used internally\n if (isOwner && databaseName === VERIFIED_USERS_DATABASE_NAME) return null\n } else if (db.wrappedDbKey) {\n // user using userbase-js v2.0.0 shared with user using userbase-js >= v2.0.1. Updated client\n // cannot receive access to databases shared via userbase-js v2.0.0\n return null\n } else {\n // user is seeing the database for the first time\n let senderRawEcdsaPublicKey\n try {\n const { ephemeralPublicKey, signedEphemeralPublicKey, sharedEncryptedDbKey } = db\n\n // verify sender signed the ephemeral public key\n senderRawEcdsaPublicKey = base64.decode(db.senderEcdsaPublicKey)\n const senderEcdsaPublicKey = await crypto.ecdsa.getPublicKeyFromRawPublicKey(senderRawEcdsaPublicKey)\n const senderSignedEphemeralPublicKey = await crypto.ecdsa.verify(senderEcdsaPublicKey, base64.decode(signedEphemeralPublicKey), base64.decode(ephemeralPublicKey))\n if (!senderSignedEphemeralPublicKey) throw new errors.ServiceUnavailable\n\n // compute shared key encryption key with other user and decrypt database encryption key\n const senderEphemeralEcdhPublicKey = await crypto.ecdh.getPublicKeyFromRawPublicKey(base64.decode(ephemeralPublicKey))\n const sharedKeyEncryptionKey = await crypto.ecdh.computeSharedKeyEncryptionKey(senderEphemeralEcdhPublicKey, ecdhPrivateKey)\n const dbKeyString = await crypto.aesGcm.decryptString(sharedKeyEncryptionKey, sharedEncryptedDbKey)\n dbKey = await crypto.aesGcm.getKeyFromKeyString(dbKeyString)\n\n // make sure dbKey the sender sent works\n databaseName = await crypto.aesGcm.decryptString(dbKey, db.databaseName)\n } catch (e) {\n // if for whatever reason the above process fails (e.g. malicious sender or version upgrade breaks the above implementation),\n // simply return a null spot for database\n return null\n }\n\n // compute receivedSignature to maintain record of who received dbKey from\n const senderFingerprint = await _getFingerprint(senderRawEcdsaPublicKey)\n const receivedSignature = await _signDbKeyAndFingerprint(dbKey, senderFingerprint)\n\n // tell server to store encrypted db key & delete ephemeral key data\n const dbKeyString = await crypto.aesGcm.getKeyStringFromKey(dbKey)\n const encryptedDbKey = await crypto.aesGcm.encryptString(encryptionKey, dbKeyString)\n\n const action = 'SaveDatabase'\n const params = { databaseNameHash, encryptedDbKey, receivedSignature }\n ws.request(action, params)\n }\n\n const result = {\n databaseName,\n databaseId,\n isOwner,\n readOnly,\n resharingAllowed,\n encryptionMode: db.plaintextDbKey ? 'server-side' : 'end-to-end',\n }\n\n const users = await _getDatabaseUsers(databaseId, databaseNameHash, dbKey, verifiedUsers, username, senderUsername)\n\n // if database has no owner, owner must have been deleted and database should not be accessible to user\n if (isOwner || _databaseHasOwner(users)) result.users = users\n else return null\n\n if (!isOwner && senderUsername) result.receivedFromUsername = senderUsername\n\n return result\n}\n\nconst getDatabases = async (params) => {\n try {\n if (params !== undefined) _validateDbInput(params)\n _checkSignedInState()\n\n const { encryptionKey, ecdhPrivateKey } = ws.keys\n const username = ws.session.username\n\n if (params && objectHasOwnProperty(params, 'shareToken')) throw new errors.ShareTokenNotAllowed\n\n const encryptionMode = (params && params.encryptionMode) || ws.encryptionMode\n _validateEncryptionMode(encryptionMode)\n\n try {\n const databases = []\n const action = 'GetDatabases'\n const requestParams = params && {\n databaseId: params.databaseId,\n dbNameHash: encryptionMode === 'server-side'\n ? params.databaseName\n : params.databaseName && await crypto.hmac.signString(ws.keys.hmacKey, params.databaseName)\n }\n\n let [databasesResponse, verifiedUsers] = await Promise.all([ws.request(action, requestParams), _openVerifiedUsersDatabase()])\n let databaseResults = await Promise.all(databasesResponse.data.databases.map(db => _buildDatabaseResult(db, encryptionKey, ecdhPrivateKey, verifiedUsers, username)))\n databases.push(...databaseResults)\n\n while (databasesResponse.data.nextPageToken) {\n const params = { nextPageToken: databasesResponse.data.nextPageToken }\n databasesResponse = await ws.request(action, params)\n databaseResults = await Promise.all(databasesResponse.data.databases.map(db => _buildDatabaseResult(db, encryptionKey, ecdhPrivateKey, verifiedUsers, username)))\n databases.push(...databaseResults)\n }\n\n return { databases: databases.filter(database => database !== null) }\n } catch (e) {\n _parseGenericErrors(e)\n throw e\n }\n\n } catch (e) {\n\n switch (e.name) {\n case 'ParamsMustBeObject':\n case 'DatabaseNameMustBeString':\n case 'DatabaseNameCannotBeBlank':\n case 'DatabaseNameTooLong':\n case 'DatabaseNameRestricted':\n case 'DatabaseIdMustBeString':\n case 'DatabaseIdCannotBeBlank':\n case 'DatabaseIdInvalidLength':\n case 'DatabaseIdNotAllowed':\n case 'ShareTokenNotAllowed':\n case 'EncryptionModeNotValid':\n case 'ServerSideEncryptionNotEnabledInClient':\n case 'UserMustChangePassword':\n case 'UserNotSignedIn':\n case 'ServiceUnavailable':\n throw e\n\n default:\n throw new errors.UnknownServiceUnavailable(e)\n }\n }\n}\n\nconst _getDatabase = async (databaseName, databaseId, encryptionMode = 'end-to-end') => {\n _validateEncryptionMode(encryptionMode)\n\n let database\n try {\n // check if database is already open in memory. shareToken = null because not possible to pass shareToken here\n database = getOpenDb(databaseName, databaseId, null, encryptionMode)\n } catch {\n // if not already open in memory, it's ok. Just get the values we need from backend\n const action = 'GetDatabases'\n const requestParams = databaseName\n ? { dbNameHash: encryptionMode === 'server-side' ? databaseName : await crypto.hmac.signString(ws.keys.hmacKey, databaseName) }\n : { databaseId }\n\n const databaseResponse = await ws.request(action, requestParams)\n\n const databases = databaseResponse.data.databases\n if (!databases || !databases.length) throw new errors.DatabaseNotFound\n database = databases[0]\n\n // type conversion :/\n database.dbNameHash = database.databaseNameHash\n database.dbId = database.databaseId\n }\n return database\n}\n\nconst _signFingerprintWithDbKey = async (dbKey, fingerprint) => {\n // convert dbKey into hmacKey\n const rawDbKey = await crypto.aesGcm.getRawKeyFromKey(dbKey)\n const dbKeyHash = await crypto.sha256.hash(rawDbKey)\n const hmacKey = await crypto.hmac.importKeyFromRawBits(dbKeyHash)\n\n // sign fingerprint with hmacKey\n const signedFingerprint = await crypto.hmac.signString(hmacKey, fingerprint)\n return signedFingerprint\n}\n\nconst _signDbKeyAndFingerprint = async (dbKey, fingerprint) => {\n const signedFingerprint = await _signFingerprintWithDbKey(dbKey, fingerprint)\n\n // digitally sign the signedFingerprint to enable a user to verify that\n // this user has sent/received dbKey to/from intended recipient/sender\n const signedDbKeyAndFingerprint = await crypto.ecdsa.signString(ws.keys.ecdsaPrivateKey, signedFingerprint)\n return signedDbKeyAndFingerprint\n}\n\nconst _verifyDatabaseRecipientFingerprint = async (username, recipientFingerprint, verifiedUsers) => {\n // find recipient's fingerprint in verified users database\n let verifiedRecipientFingerprint, foundOldFingerprint\n const verifiedUsersArray = Object.keys(verifiedUsers)\n for (let i = 0; i < verifiedUsersArray.length; i++) {\n const verifiedUsername = verifiedUsersArray[i]\n const verifiedFingerprint = verifiedUsers[verifiedUsername].record.fingerprint\n if (username === verifiedUsername && recipientFingerprint === verifiedFingerprint) {\n verifiedRecipientFingerprint = verifiedFingerprint\n break\n } else if (verifiedFingerprint === recipientFingerprint) {\n foundOldFingerprint = true\n }\n }\n\n // must have an outdated username stored in verified users database and therefore must reverify recipient\n if (!verifiedRecipientFingerprint && foundOldFingerprint) throw new errors.UserMustBeReverified\n if (!verifiedRecipientFingerprint) throw new errors.UserNotVerified\n}\n\nconst _getDatabaseEncryptionKey = async (database) => {\n let dbKeyString\n if (!database.dbKey) {\n dbKeyString = database.plaintextDbKey || await crypto.aesGcm.decryptString(ws.keys.encryptionKey, database.encryptedDbKey)\n database.dbKey = await crypto.aesGcm.getKeyFromKeyString(dbKeyString)\n } else {\n dbKeyString = await crypto.aesGcm.getKeyStringFromKey(database.dbKey)\n }\n return dbKeyString\n}\n\nconst _getShareToken = async (params, readOnly, encryptionMode) => {\n try {\n const { databaseName, databaseId } = params\n\n if (objectHasOwnProperty(params, 'requireVerified')) throw new errors.RequireVerifiedParamNotNecessary\n if (objectHasOwnProperty(params, 'resharingAllowed')) throw new errors.ResharingAllowedParamNotAllowed('when retrieving a share token')\n\n // generate share token seed and associated keys\n const shareTokenSeed = crypto.generateSeed()\n const shareTokenHkdfKey = await crypto.hkdf.importHkdfKey(shareTokenSeed)\n\n // generate share token encryption key\n const shareTokenEncryptionKeySalt = crypto.hkdf.generateSalt()\n const shareTokenEncryptionKey = await crypto.aesGcm.importKeyFromMaster(shareTokenHkdfKey, shareTokenEncryptionKeySalt)\n\n // encrypt the database key using shareTokenEncryptionKey\n const database = await _getDatabase(databaseName, databaseId, encryptionMode)\n const dbKeyString = await _getDatabaseEncryptionKey(database)\n const shareTokenEncryptedDbKeyString = await crypto.aesGcm.encryptString(shareTokenEncryptionKey, dbKeyString)\n\n // generate share token ECDSA key data\n const { ecdsaPublicKey, encryptedEcdsaPrivateKey, ecdsaKeyEncryptionKeySalt } = await crypto.ecdsa.generateEcdsaKeyData(shareTokenHkdfKey)\n\n const action = 'ShareDatabaseToken'\n const requestParams = {\n databaseId: database.dbId,\n databaseNameHash: database.dbNameHash,\n readOnly,\n keyData: {\n shareTokenEncryptedDbKey: shareTokenEncryptedDbKeyString,\n shareTokenEncryptionKeySalt: base64.encode(shareTokenEncryptionKeySalt),\n shareTokenPublicKey: ecdsaPublicKey,\n shareTokenEncryptedEcdsaPrivateKey: encryptedEcdsaPrivateKey,\n shareTokenEcdsaKeyEncryptionKeySalt: ecdsaKeyEncryptionKeySalt,\n }\n }\n const shareTokenResponse = await ws.request(action, requestParams)\n\n // server generates unique ID\n const { shareTokenId } = shareTokenResponse.data\n\n // prepend shareTokenId to shareTokenSeed to get final shareToken to return to user, all in base64\n const shareTokenIdArrayBuffer = stringToArrayBuffer(shareTokenId, true)\n const shareToken = base64.encode(appendBuffer(shareTokenIdArrayBuffer, shareTokenSeed))\n return shareToken\n } catch (e) {\n _parseGenericErrors(e)\n\n if (e.response && e.response.data) {\n switch (e.response.data.message) {\n case 'DatabaseNotFound': throw new errors.DatabaseNotFound\n case 'ResharingNotAllowed': throw new errors.ResharingNotAllowed('Only the owner can generate a share token')\n }\n }\n\n throw e\n }\n}\n\nconst _shareDatabaseWithUsername = async (params, readOnly, resharingAllowed, requireVerified, encryptionMode) => {\n const { databaseName, databaseId } = params\n const username = params.username.toLowerCase()\n\n try {\n // get recipient's public key to use to generate a shared key, and retrieve verified users list if requireVerified set to true\n const [recipientPublicKey, verifiedUsers, database] = await Promise.all([\n authApi.getPublicKey(username),\n requireVerified && _openVerifiedUsersDatabase(),\n _getDatabase(databaseName, databaseId, encryptionMode),\n ])\n\n // recipient must have required keys so client can share database key\n if (!recipientPublicKey.ecdhPublicKey || !recipientPublicKey.ecdsaPublicKey) throw new errors.UserUnableToReceiveDatabase\n\n // compute recipient's fingerprint of ECDSA public key stored on server\n const recipientRawEcdsaPublicKey = base64.decode(recipientPublicKey.ecdsaPublicKey)\n const recipientFingerprint = await _getFingerprint(recipientRawEcdsaPublicKey)\n\n // verify that the recipient is in the user's list of verified users\n if (requireVerified) await _verifyDatabaseRecipientFingerprint(username, recipientFingerprint, verifiedUsers)\n\n // verify recipient signed the ECDH public key that sender will be using to share database\n const recipientEcdsaPublicKey = await crypto.ecdsa.getPublicKeyFromRawPublicKey(recipientRawEcdsaPublicKey)\n const { signedEcdhPublicKey, ecdhPublicKey } = recipientPublicKey\n const isVerified = await crypto.ecdsa.verify(recipientEcdsaPublicKey, base64.decode(signedEcdhPublicKey), base64.decode(ecdhPublicKey))\n\n // this should never happen. If this happens, the server is serving conflicting keys and client should not sign anything\n if (!isVerified) throw new errors.ServiceUnavailable\n\n const recipientEcdhPublicKey = await crypto.ecdh.getPublicKeyFromRawPublicKey(base64.decode(recipientPublicKey.ecdhPublicKey))\n\n // generate ephemeral ECDH key pair to ensure forward secrecy for future shares between users if shared key is leaked\n const ephemeralEcdhKeyPair = await crypto.ecdh.generateKeyPair()\n const rawEphemeralEcdhPublicKey = await crypto.ecdh.getRawPublicKeyFromPublicKey(ephemeralEcdhKeyPair.publicKey)\n const signedEphemeralEcdhPublicKey = await crypto.ecdsa.sign(ws.keys.ecdsaPrivateKey, rawEphemeralEcdhPublicKey)\n\n // compute shared key encryption key with recipient so can use it to encrypt database encryption key\n const sharedKeyEncryptionKey = await crypto.ecdh.computeSharedKeyEncryptionKey(recipientEcdhPublicKey, ephemeralEcdhKeyPair.privateKey)\n\n // encrypt the database encryption key using shared ephemeral ECDH key\n const dbKeyString = await _getDatabaseEncryptionKey(database)\n const sharedEncryptedDbKeyString = await crypto.aesGcm.encryptString(sharedKeyEncryptionKey, dbKeyString)\n\n const action = 'ShareDatabase'\n const requestParams = {\n databaseId: database.dbId,\n databaseNameHash: database.dbNameHash,\n username,\n readOnly,\n resharingAllowed,\n sharedEncryptedDbKey: sharedEncryptedDbKeyString,\n ephemeralPublicKey: base64.encode(rawEphemeralEcdhPublicKey),\n signedEphemeralPublicKey: base64.encode(signedEphemeralEcdhPublicKey),\n sentSignature: await _signDbKeyAndFingerprint(database.dbKey, recipientFingerprint),\n recipientEcdsaPublicKey: recipientPublicKey.ecdsaPublicKey\n }\n await ws.request(action, requestParams)\n } catch (e) {\n _parseGenericErrors(e)\n\n if (e.response && e.response.data) {\n switch (e.response.data.message) {\n case 'SharingWithSelfNotAllowed':\n throw new errors.SharingWithSelfNotAllowed\n case 'DatabaseNotFound':\n throw new errors.DatabaseNotFound\n case 'ResharingNotAllowed':\n throw new errors.ResharingNotAllowed('Must have permission to reshare the database with another user')\n case 'ResharingWithWriteAccessNotAllowed':\n throw new errors.ResharingWithWriteAccessNotAllowed\n case 'UserNotFound':\n throw new errors.UserNotFound\n case 'DatabaseAlreadyShared':\n // safe to return\n return\n }\n }\n\n throw e\n }\n}\n\nconst _validateUsername = (username) => {\n if (typeof username !== 'string') throw new errors.UsernameMustBeString\n if (username.length === 0) throw new errors.UsernameCannotBeBlank\n}\n\nconst _validateDbSharingInput = (params) => {\n if (objectHasOwnProperty(params, 'shareToken')) throw new errors.ShareTokenNotAllowed\n\n if (objectHasOwnProperty(params, 'username')) _validateUsername(params.username)\n\n if (objectHasOwnProperty(params, 'readOnly') && typeof params.readOnly !== 'boolean') {\n throw new errors.ReadOnlyMustBeBoolean\n }\n\n if (objectHasOwnProperty(params, 'resharingAllowed') && typeof params.resharingAllowed !== 'boolean') {\n throw new errors.ResharingAllowedMustBeBoolean\n }\n\n if (objectHasOwnProperty(params, 'requireVerified') && typeof params.requireVerified !== 'boolean') {\n throw new errors.RequireVerifiedMustBeBoolean\n }\n}\n\nconst shareDatabase = async (params) => {\n try {\n _validateDbInput(params)\n _validateDbSharingInput(params)\n\n const readOnly = objectHasOwnProperty(params, 'readOnly') ? params.readOnly : true\n const resharingAllowed = objectHasOwnProperty(params, 'resharingAllowed') ? params.resharingAllowed : false\n const requireVerified = objectHasOwnProperty(params, 'requireVerified') ? params.requireVerified : true\n\n const encryptionMode = params.encryptionMode || ws.encryptionMode\n _validateEncryptionMode(encryptionMode)\n\n let result = {}\n if (objectHasOwnProperty(params, 'username')) await _shareDatabaseWithUsername(params, readOnly, resharingAllowed, requireVerified, encryptionMode)\n else result.shareToken = await _getShareToken(params, readOnly, encryptionMode)\n\n return result\n } catch (e) {\n\n switch (e.name) {\n case 'ParamsMustBeObject':\n case 'DatabaseNameMissing':\n case 'DatabaseNameMustBeString':\n case 'DatabaseNameCannotBeBlank':\n case 'DatabaseNameTooLong':\n case 'DatabaseNameRestricted':\n case 'DatabaseIdMustBeString':\n case 'DatabaseIdCannotBeBlank':\n case 'DatabaseIdInvalidLength':\n case 'DatabaseIdNotAllowed':\n case 'ShareTokenNotAllowed':\n case 'DatabaseNotFound':\n case 'EncryptionModeNotValid':\n case 'ServerSideEncryptionNotEnabledInClient':\n case 'UsernameCannotBeBlank':\n case 'UsernameMustBeString':\n case 'ReadOnlyMustBeBoolean':\n case 'ResharingAllowedMustBeBoolean':\n case 'ResharingNotAllowed':\n case 'ResharingWithWriteAccessNotAllowed':\n case 'ResharingAllowedParamNotAllowed':\n case 'RequireVerifiedMustBeBoolean':\n case 'RequireVerifiedParamNotNecessary':\n case 'SharingWithSelfNotAllowed':\n case 'UserMustChangePassword':\n case 'UserNotSignedIn':\n case 'UserUnableToReceiveDatabase':\n case 'UserNotFound':\n case 'UserNotVerified':\n case 'UserMustBeReverified':\n case 'ServiceUnavailable':\n throw e\n\n default:\n throw new errors.UnknownServiceUnavailable(e)\n }\n }\n}\n\nconst modifyDatabasePermissions = async (params) => {\n try {\n _validateDbInput(params)\n _validateDbSharingInput(params)\n\n if (!objectHasOwnProperty(params, 'username')) throw new errors.UsernameMissing\n\n if (objectHasOwnProperty(params, 'revoke')) {\n if (typeof params.revoke !== 'boolean') throw new errors.RevokeMustBeBoolean\n\n // readOnly and resharingAllowed booleans have no use if revoking database from user\n if (params.revoke) {\n if (objectHasOwnProperty(params, 'readOnly')) throw new errors.ReadOnlyParamNotAllowed\n if (objectHasOwnProperty(params, 'resharingAllowed')) throw new errors.ResharingAllowedParamNotAllowed('when revoking access to a database')\n }\n } else if (!objectHasOwnProperty(params, 'readOnly') && !objectHasOwnProperty(params, 'resharingAllowed')) {\n throw new errors.ParamsMissing\n }\n\n const { databaseName, databaseId, readOnly, resharingAllowed, revoke, encryptionMode = ws.encryptionMode } = params\n const username = params.username.toLowerCase()\n\n try {\n const database = await _getDatabase(databaseName, databaseId, encryptionMode)\n\n const action = 'ModifyDatabasePermissions'\n const requestParams = {\n databaseId: database.dbId,\n databaseNameHash: database.dbNameHash,\n username,\n readOnly,\n resharingAllowed,\n revoke,\n }\n await ws.request(action, requestParams)\n } catch (e) {\n _parseGenericErrors(e)\n\n if (e.response && e.response.data) {\n switch (e.response.data.message) {\n case 'SharingWithSelfNotAllowed':\n throw new errors.ModifyingOwnPermissionsNotAllowed\n case 'ModifyingOwnerPermissionsNotAllowed':\n throw new errors.ModifyingOwnerPermissionsNotAllowed\n case 'ResharingNotAllowed':\n throw new errors.ModifyingPermissionsNotAllowed\n case 'ResharingWithWriteAccessNotAllowed':\n throw new errors.GrantingWriteAccessNotAllowed\n case 'DatabaseNotFound':\n throw new errors.DatabaseNotFound\n case 'UserNotFound':\n throw new errors.UserNotFound\n }\n }\n\n throw e\n }\n\n } catch (e) {\n\n switch (e.name) {\n case 'ParamsMustBeObject':\n case 'ParamsMissing':\n case 'DatabaseNameMissing':\n case 'DatabaseNameMustBeString':\n case 'DatabaseNameCannotBeBlank':\n case 'DatabaseNameTooLong':\n case 'DatabaseNameRestricted':\n case 'DatabaseIdMustBeString':\n case 'DatabaseIdCannotBeBlank':\n case 'DatabaseIdInvalidLength':\n case 'DatabaseIdNotAllowed':\n case 'ShareTokenNotAllowed':\n case 'DatabaseNotFound':\n case 'EncryptionModeNotValid':\n case 'ServerSideEncryptionNotEnabledInClient':\n case 'UsernameMissing':\n case 'UsernameCannotBeBlank':\n case 'UsernameMustBeString':\n case 'ReadOnlyMustBeBoolean':\n case 'ReadOnlyParamNotAllowed':\n case 'ResharingAllowedMustBeBoolean':\n case 'ResharingAllowedParamNotAllowed':\n case 'RevokeMustBeBoolean':\n case 'ModifyingOwnPermissionsNotAllowed':\n case 'ModifyingOwnerPermissionsNotAllowed':\n case 'ModifyingPermissionsNotAllowed':\n case 'GrantingWriteAccessNotAllowed':\n case 'UserMustChangePassword':\n case 'UserNotSignedIn':\n case 'UserNotFound':\n case 'ServiceUnavailable':\n throw e\n\n default:\n throw new errors.UnknownServiceUnavailable(e)\n }\n }\n}\n\nconst _packVerificationMessage = (username, fingerprint) => {\n return btoa(JSON.stringify({ username, fingerprint }))\n}\n\nconst _unpackVerificationMessage = (verificationMessage) => {\n try {\n const { username, fingerprint } = JSON.parse(atob(verificationMessage))\n\n _validateUsername(username)\n if (!fingerprint) throw new errors.VerificationMessageInvalid\n\n return { username, fingerprint }\n } catch {\n throw new errors.VerificationMessageInvalid\n }\n}\n\nconst _getFingerprint = async (ecdsaRawPublicKey) => {\n const ecdsaPublicKeyHash = await crypto.sha256.hash(ecdsaRawPublicKey)\n const fingerprint = base64.encode(ecdsaPublicKeyHash)\n return fingerprint\n}\n\nconst _getMyFingerprint = async () => {\n const ecdsaPublicKey = await crypto.ecdsa.getPublicKeyFromPrivateKey(ws.keys.ecdsaPrivateKey)\n const ecdsaRawPublicKey = await crypto.ecdsa.getRawPublicKeyFromPublicKey(ecdsaPublicKey)\n const fingerprint = await _getFingerprint(ecdsaRawPublicKey)\n return fingerprint\n}\n\nconst getVerificationMessage = async () => {\n try {\n _checkSignedInState()\n\n const username = ws.session.username\n const fingerprint = await _getMyFingerprint()\n\n const verificationMessage = _packVerificationMessage(username, fingerprint)\n return { verificationMessage }\n } catch (e) {\n\n switch (e.name) {\n case 'UserMustChangePassword':\n case 'UserNotSignedIn':\n case 'ServiceUnavailable':\n throw e\n\n default:\n throw new errors.UnknownServiceUnavailable(e)\n }\n }\n}\n\nconst _openVerifiedUsersDatabase = async () => {\n const databaseName = VERIFIED_USERS_DATABASE_NAME\n const changeHandler = () => { } // not used\n const allowVerifiedUsersDatabase = true\n const encryptionMode = 'end-to-end' // if server has access, opens attack vector because can withold and/or replace verified users\n await openDatabase({ databaseName, changeHandler, allowVerifiedUsersDatabase, encryptionMode })\n const dbNameHash = ws.state.dbNameToHash[databaseName]\n const verifiedUsers = ws.state.databases[dbNameHash].items\n return verifiedUsers\n}\n\nconst verifyUser = async (params) => {\n try {\n if (typeof params !== 'object') throw new errors.ParamsMustBeObject\n _checkSignedInState()\n\n if (!objectHasOwnProperty(params, 'verificationMessage')) throw new errors.VerificationMessageMissing\n const { verificationMessage } = params\n if (typeof verificationMessage !== 'string') throw new errors.VerificationMessageMustBeString\n if (verificationMessage.length === 0) throw new errors.VerificationMessageCannotBeBlank\n\n const { username, fingerprint } = _unpackVerificationMessage(verificationMessage)\n\n if (username === ws.session.username || fingerprint === await _getMyFingerprint()) throw new errors.VerifyingSelfNotAllowed\n\n // upsert the verification message into the user's encrypted database that stores verified users\n await _openVerifiedUsersDatabase()\n\n const databaseName = VERIFIED_USERS_DATABASE_NAME\n const allowVerifiedUsersDatabase = true\n const itemId = username\n const item = { fingerprint }\n try {\n await insertItem({ databaseName, itemId, item, allowVerifiedUsersDatabase })\n } catch (e) {\n if (e.name === 'ItemAlreadyExists') await updateItem({ databaseName, itemId, item, allowVerifiedUsersDatabase })\n else throw e\n }\n } catch (e) {\n\n switch (e.name) {\n case 'ParamsMustBeObject':\n case 'VerificationMessageMissing':\n case 'VerificationMessageMustBeString':\n case 'VerificationMessageCannotBeBlank':\n case 'VerificationMessageInvalid':\n case 'VerifyingSelfNotAllowed':\n case 'UserMustChangePassword':\n case 'UserNotSignedIn':\n case 'ServiceUnavailable':\n throw e\n\n default:\n throw new errors.UnknownServiceUnavailable(e)\n }\n }\n}\n\nexport default {\n openDatabase,\n getDatabases,\n\n insertItem,\n updateItem,\n deleteItem,\n putTransaction,\n\n uploadFile,\n getFile,\n\n shareDatabase,\n modifyDatabasePermissions,\n\n getVerificationMessage,\n verifyUser,\n}\n", + "import ws from './ws'\nimport errors from './errors'\nimport statusCodes from './statusCodes'\nimport { objectHasOwnProperty, getProtocolFromEndpoint } from './utils'\nimport config from './config'\n\nconst _checkSignedInState = () => {\n if (ws.reconnecting) throw new errors.Reconnecting\n if (!ws.keys.init && ws.changePassword) throw new errors.UserMustChangePassword\n if (!ws.keys.init) throw new errors.UserNotSignedIn\n}\n\nconst _parseGenericErrors = (e) => {\n if (e.response) {\n if (e.response.status === statusCodes['Internal Server Error']) {\n throw new errors.InternalServerError\n } else if (e.response.status === statusCodes['Gateway Timeout']) {\n throw new errors.Timeout\n }\n } else if (e.message && e.message.indexOf('timeout') !== -1) {\n throw new errors.Timeout\n }\n}\n\nconst _validatePurchaseOrUpdate = (params) => {\n _checkSignedInState()\n\n const stripeData = ws.userData.stripeData\n if (!stripeData.stripeAccountId) throw new errors.StripeAccountNotConnected\n if (stripeData.paymentsMode === 'disabled') throw new errors.PaymentsDisabled\n\n if (!objectHasOwnProperty(window, 'Stripe')) throw new errors.StripeJsLibraryMissing\n\n if (typeof params !== 'object') throw new errors.ParamsMustBeObject\n\n if (!objectHasOwnProperty(params, 'successUrl')) throw new errors.SuccessUrlMissing\n if (typeof params.successUrl !== 'string') throw new errors.SuccessUrlMustBeString\n const successUrlProtocol = getProtocolFromEndpoint(params.successUrl)\n if (successUrlProtocol !== 'http' && successUrlProtocol !== 'https') {\n const invalidProtocol = true\n throw new errors.SuccessUrlInvalid(invalidProtocol)\n }\n\n if (!objectHasOwnProperty(params, 'cancelUrl')) throw new errors.CancelUrlMissing\n if (typeof params.cancelUrl !== 'string') throw new errors.CancelUrlMustBeString\n const cancelUrlProtocol = getProtocolFromEndpoint(params.cancelUrl)\n if (cancelUrlProtocol !== 'http' && cancelUrlProtocol !== 'https') {\n const invalidProtocol = true\n throw new errors.CancelUrlInvalid(invalidProtocol)\n }\n}\n\nconst purchaseSubscription = async (params) => {\n try {\n const stripeData = ws.userData.stripeData\n if (!stripeData.cancelSubscriptionAt && stripeData.subscriptionStatus && stripeData.subscriptionStatus !== 'canceled') {\n throw new errors.SubscriptionPlanAlreadyPurchased\n }\n _validatePurchaseOrUpdate(params)\n\n try {\n const action = 'PurchaseSubscription'\n const sessionIdResponse = await ws.request(action, params)\n const stripeSessionId = sessionIdResponse.data\n\n const stripePk = config.getStripePublishableKey(stripeData.paymentsMode === 'prod')\n\n const result = await window\n .Stripe(stripePk, { stripeAccount: stripeData.stripeAccountId })\n .redirectToCheckout({ sessionId: stripeSessionId })\n\n if (result.error) throw result.error\n\n } catch (e) {\n _parseGenericErrors(e)\n\n if (e.response) {\n switch (e.response.data) {\n case 'PriceIdOrPlanIdAllowed': throw new errors.PriceIdOrPlanIdAllowed\n case 'PriceIdOrPlanIdMissing': throw new errors.PriceIdOrPlanIdMissing\n case 'SubscriptionPlanAlreadyPurchased': throw new errors.SubscriptionPlanAlreadyPurchased\n case 'SuccessUrlInvalid': throw new errors.SuccessUrlInvalid\n case 'CancelUrlInvalid': throw new errors.CancelUrlInvalid\n default: {\n if (e.response.data && e.response.data.name === 'StripeError') {\n throw new errors.StripeError(e.response.data)\n }\n }\n }\n }\n\n throw e\n }\n\n } catch (e) {\n\n switch (e.name) {\n case 'ParamsMustBeObject':\n case 'SuccessUrlMissing':\n case 'SuccessUrlMustBeString':\n case 'SuccessUrlInvalid':\n case 'CancelUrlMissing':\n case 'CancelUrlMustBeString':\n case 'CancelUrlInvalid':\n case 'StripeError':\n case 'StripeJsLibraryMissing':\n case 'PriceIdOrPlanIdAllowed':\n case 'PriceIdOrPlanIdMissing':\n case 'SubscriptionPlanAlreadyPurchased':\n case 'StripeAccountNotConnected':\n case 'PaymentsDisabled':\n case 'UserMustChangePassword':\n case 'UserNotSignedIn':\n case 'TooManyRequests':\n case 'ServiceUnavailable':\n throw e\n\n default:\n throw new errors.UnknownServiceUnavailable(e)\n }\n }\n}\n\nconst _validateModifySubscriptionConditions = () => {\n _checkSignedInState()\n\n const stripeData = ws.userData.stripeData\n if (!stripeData.stripeAccountId) throw new errors.StripeAccountNotConnected\n if (stripeData.paymentsMode === 'disabled') throw new errors.PaymentsDisabled\n\n if (stripeData.subscriptionStatus === 'canceled') throw new errors.SubscriptionAlreadyCanceled\n}\n\nconst cancelSubscription = async () => {\n try {\n _validateModifySubscriptionConditions()\n\n try {\n const action = 'CancelSubscription'\n const cancelResponse = await ws.request(action)\n const cancelSubscriptionAt = cancelResponse.data\n\n ws.userData.stripeData.cancelSubscriptionAt = cancelSubscriptionAt\n return { cancelSubscriptionAt }\n } catch (e) {\n _parseGenericErrors(e)\n\n if (e.response && e.response.data === 'SubscriptionNotFound') {\n throw new errors.SubscriptionNotFound\n }\n\n throw e\n }\n\n } catch (e) {\n\n switch (e.name) {\n case 'SubscriptionNotFound':\n case 'StripeAccountNotConnected':\n case 'PaymentsDisabled':\n case 'SubscriptionAlreadyCanceled':\n case 'UserMustChangePassword':\n case 'UserNotSignedIn':\n case 'TooManyRequests':\n case 'ServiceUnavailable':\n throw e\n\n default:\n throw new errors.UnknownServiceUnavailable(e)\n }\n }\n}\n\nconst resumeSubscription = async () => {\n try {\n _validateModifySubscriptionConditions()\n\n try {\n const action = 'ResumeSubscription'\n await ws.request(action)\n\n delete ws.userData.stripeData.cancelSubscriptionAt\n } catch (e) {\n _parseGenericErrors(e)\n\n if (e.response && e.response.data === 'SubscriptionNotFound') {\n throw new errors.SubscriptionNotFound\n }\n\n throw e\n }\n\n } catch (e) {\n\n switch (e.name) {\n case 'SubscriptionNotFound':\n case 'StripeAccountNotConnected':\n case 'PaymentsDisabled':\n case 'SubscriptionAlreadyCanceled':\n case 'UserMustChangePassword':\n case 'UserNotSignedIn':\n case 'TooManyRequests':\n case 'ServiceUnavailable':\n throw e\n\n default:\n throw new errors.UnknownServiceUnavailable(e)\n }\n }\n}\n\nconst updatePaymentMethod = async (params) => {\n try {\n _validatePurchaseOrUpdate(params)\n\n const stripeData = ws.userData.stripeData\n if (!stripeData.subscriptionStatus) throw new errors.SubscriptionNotPurchased\n\n try {\n const action = 'UpdatePaymentMethod'\n const sessionIdResponse = await ws.request(action, params)\n const stripeSessionId = sessionIdResponse.data\n\n const stripePk = config.getStripePublishableKey(stripeData.paymentsMode === 'prod')\n\n const result = await window\n .Stripe(stripePk, { stripeAccount: stripeData.stripeAccountId })\n .redirectToCheckout({ sessionId: stripeSessionId })\n\n if (result.error) throw result.error\n\n } catch (e) {\n _parseGenericErrors(e)\n\n if (e.response) {\n if (e.response.data === 'SuccessUrlInvalid') {\n throw new errors.SuccessUrlInvalid\n } else if (e.response.data === 'CancelUrlInvalid') {\n throw new errors.CancelUrlInvalid\n }\n }\n\n throw e\n }\n\n } catch (e) {\n\n switch (e.name) {\n case 'ParamsMustBeObject':\n case 'SuccessUrlMissing':\n case 'SuccessUrlMustBeString':\n case 'SuccessUrlInvalid':\n case 'CancelUrlMissing':\n case 'CancelUrlMustBeString':\n case 'CancelUrlInvalid':\n case 'StripeJsLibraryMissing':\n case 'SubscriptionNotPurchased':\n case 'StripeAccountNotConnected':\n case 'PaymentsDisabled':\n case 'UserMustChangePassword':\n case 'UserNotSignedIn':\n case 'TooManyRequests':\n case 'ServiceUnavailable':\n throw e\n\n default:\n throw new errors.UnknownServiceUnavailable(e)\n }\n }\n}\n\nexport default {\n purchaseSubscription,\n cancelSubscription,\n resumeSubscription,\n updatePaymentMethod,\n}\n", + "import auth from './auth'\nimport db from './db'\nimport payments from './payments'\n\nexport default {\n init: auth.init,\n\n signUp: auth.signUp,\n signIn: auth.signIn,\n signOut: auth.signOut,\n updateUser: auth.updateUser,\n deleteUser: auth.deleteUser,\n forgotPassword: auth.forgotPassword,\n\n openDatabase: db.openDatabase,\n\n insertItem: db.insertItem,\n updateItem: db.updateItem,\n deleteItem: db.deleteItem,\n putTransaction: db.putTransaction,\n\n uploadFile: db.uploadFile,\n getFile: db.getFile,\n\n getDatabases: db.getDatabases,\n shareDatabase: db.shareDatabase,\n modifyDatabasePermissions: db.modifyDatabasePermissions,\n getVerificationMessage: db.getVerificationMessage,\n verifyUser: db.verifyUser,\n\n purchaseSubscription: payments.purchaseSubscription,\n cancelSubscription: payments.cancelSubscription,\n resumeSubscription: payments.resumeSubscription,\n updatePaymentMethod: payments.updatePaymentMethod,\n}\n" + ], + "sourceRoot": "" +} diff --git a/public/manifest.json b/public/manifest.json index ad0313a..59b7a83 100644 --- a/public/manifest.json +++ b/public/manifest.json @@ -3,12 +3,12 @@ "short_name": "Budget Zen", "icons": [ { - "src": "/images/logo.svg", + "src": "/public/images/logo.svg", "sizes": "250x150 any", "type": "image/svg+xml" }, { - "src": "/images/favicon.png", + "src": "/public/images/favicon.png", "sizes": "310x310", "type": "image/png", "purpose": "any maskable" diff --git a/public/sitemap.xml b/public/sitemap.xml deleted file mode 100644 index 120a8b8..0000000 --- a/public/sitemap.xml +++ /dev/null @@ -1 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1"><url><loc>https://app.budgetzen.net</loc><lastmod>2020-11-21T13:32:06.336Z</lastmod><priority>1</priority></url></urlset> diff --git a/routes.ts b/routes.ts new file mode 100644 index 0000000..aeaf9ca --- /dev/null +++ b/routes.ts @@ -0,0 +1,172 @@ +import { readableStreamFromReader } from 'https://deno.land/std@0.142.0/streams/mod.ts'; +import { baseUrl, basicLayoutResponse, isRunningLocally, PageContentResult, recordPageView } from './lib/utils.ts'; + +// NOTE: This won't be necessary once https://github.com/denoland/deploy_feedback/issues/1 is closed +import * as indexPage from './pages/index.ts'; +import * as pricingPage from './pages/pricing.ts'; +import * as settingsPage from './pages/settings.ts'; +import * as billingPage from './pages/billing.ts'; +const pages = { + index: indexPage, + pricing: pricingPage, + settings: settingsPage, + billing: billingPage, +}; + +export interface Route { + pattern: URLPattern; + handler: ( + request: Request, + match: URLPatternResult, + ) => (Response | Promise<Response>); +} + +interface Routes { + [routeKey: string]: Route; +} + +function createBasicRouteHandler(id: string, pathname: string) { + return { + pattern: new URLPattern({ pathname }), + handler: async (request: Request, match: URLPatternResult) => { + try { + // NOTE: Use this instead once https://github.com/denoland/deploy_feedback/issues/1 is closed + // const { pageContent, pageAction } = await import(`./pages/${id}.ts`); + + // @ts-ignore necessary because of the comment above + const { pageContent, pageAction } = pages[id]; + + if (!request.url.startsWith('http://localhost')) { + recordPageView(match.pathname.input); + } + + if (request.method !== 'GET') { + return pageAction(request, match) as Response; + } + + const pageContentResult = await pageContent(request, match); + + if (pageContentResult instanceof Response) { + return pageContentResult; + } + + const { htmlContent: htmlContent, titlePrefix } = (pageContentResult as PageContentResult); + + return basicLayoutResponse(htmlContent, { currentPath: match.pathname.input, titlePrefix }); + } catch (error) { + if (error.toString().includes('NotFound')) { + return new Response('Not Found', { status: 404 }); + } + + console.error(error); + + return new Response('Internal Server Error', { status: 500 }); + } + }, + }; +} + +const routes: Routes = { + sitemap: { + pattern: new URLPattern({ pathname: '/sitemap.xml' }), + handler: (_request) => { + const pages = [ + '/', + '/pricing', + ]; + + const oneHourAgo = new Date(new Date().setHours(new Date().getHours() - 1)); + + const sitemapContent = `<?xml version="1.0" encoding="UTF-8"?> +<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1"> + ${ + pages.map((page) => ` + <url> + <loc>${baseUrl}${page}</loc> + <lastmod>${oneHourAgo.toISOString()}</lastmod> + <priority>${page === '/' ? '1.0' : '0.8'}</priority> + </url> + `).join('') + } +</urlset> +`; + + const oneDayInSeconds = 24 * 60 * 60; + + return new Response(sitemapContent, { + headers: { + 'content-type': 'application/xml', + 'cache-control': `max-age=${oneDayInSeconds}, public`, + }, + }); + }, + }, + robots: { + pattern: new URLPattern({ pathname: '/robots.txt' }), + handler: async (_request) => { + const file = await Deno.open(`public/robots.txt`, { read: true }); + const readableStream = readableStreamFromReader(file); + + const oneDayInSeconds = 24 * 60 * 60; + + return new Response(readableStream, { + headers: { + 'content-type': 'text/plain', + 'cache-control': `max-age=${oneDayInSeconds}, public`, + }, + }); + }, + }, + public: { + pattern: new URLPattern({ pathname: '/public/:filePath*' }), + handler: async (_request, match) => { + const { filePath } = match.pathname.groups; + + try { + const file = await Deno.open(`public/${filePath}`, { read: true }); + const readableStream = readableStreamFromReader(file); + + const oneDayInSeconds = isRunningLocally(match) ? 0 : 24 * 60 * 60; + + const headers: ResponseInit['headers'] = { + 'cache-control': `max-age=${oneDayInSeconds}, public`, + }; + + // NOTE: It would be nice to figure out a better way to deduce content-type without dependencies + const fileExtension = filePath.split('.').pop()?.toLowerCase(); + + if (fileExtension === 'js') { + headers['content-type'] = 'text/javascript'; + } else if (fileExtension === 'css') { + headers['content-type'] = 'text/css'; + } else if (fileExtension === 'jpg') { + headers['content-type'] = 'image/jpeg'; + } else if (fileExtension === 'png') { + headers['content-type'] = 'image/png'; + } else if (fileExtension === 'svg') { + headers['content-type'] = 'image/svg+xml'; + } else if (fileExtension === 'json') { + headers['content-type'] = 'text/json'; + } + + return new Response(readableStream, { + headers, + }); + } catch (error) { + if (error.toString().includes('NotFound')) { + return new Response('Not Found', { status: 404 }); + } + + console.error(error); + + return new Response('Internal Server Error', { status: 500 }); + } + }, + }, + index: createBasicRouteHandler('index', '/'), + pricing: createBasicRouteHandler('pricing', '/pricing'), + settings: createBasicRouteHandler('settings', '/settings'), + billing: createBasicRouteHandler('billing', '/billing'), +}; + +export default routes; diff --git a/serverless.yml b/serverless.yml deleted file mode 100644 index 819a6f8..0000000 --- a/serverless.yml +++ /dev/null @@ -1,11 +0,0 @@ -service: - name: budgetzen-web-v2 - -useDotEnv: true - -myNextAppplication: - component: '@sls-next/serverless-component@3.6.0' - inputs: - domain: ['app', 'budgetzen.net'] - bucketName: budgetzen-web-v2 - bucketRegion: us-east-1 diff --git a/styles/__base.scss b/styles/__base.scss deleted file mode 100644 index cb49c96..0000000 --- a/styles/__base.scss +++ /dev/null @@ -1,158 +0,0 @@ -@import 'styles/__reset'; -@import 'styles/__variables'; - -html, -body { - font: 16px/16px 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', - 'Fira Sans', 'Droid Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; - background: $color-background; - color: $color-text; - - @media (prefers-color-scheme: dark) { - background: #101010; - color: #f3f3f3; - } - &.theme-dark { - background: #101010; - color: #f3f3f3; - } -} - -a { - color: $color-link; - text-decoration: underline; - transition: all 60ms ease-in; - - @media (prefers-color-scheme: dark) { - color: $color-link-hover; - } - @at-root .theme-dark #{&} { - color: $color-link-hover; - } - - &:hover, - &:focus { - text-decoration: none; - color: $color-link-hover; - - @media (prefers-color-scheme: dark) { - color: $color-menu-background-hover; - } - @at-root .theme-dark #{&} { - color: $color-menu-background-hover; - } - } - - &.style-less { - color: unset; - text-decoration: unset; - } -} - -code, -pre { - font-family: 'Courier New', Courier, monospace; -} - -pre { - font-family: 'Courier New', Courier, monospace; - background: rgba(0, 0, 0, 0.1); - padding: 1em; - - @media (prefers-color-scheme: dark) { - background-color: rgba(0, 0, 0, 0.8); - } - @at-root .theme-dark #{&} { - background-color: rgba(0, 0, 0, 0.8); - } -} - -.wrapper { - margin: 1rem auto; - display: block; - max-width: $max-width; - min-width: 80vw; - - @media #{$bigger-screen} { - min-width: $min-width; - } -} - -button { - -webkit-app-region: no-drag; -} - -.hidden { - display: none; -} - -.swal2-toast.swal2-icon-error { - cursor: pointer; -} - -// Tweak CSS for modal from https://github.com/chenjiahan/rodal/issues/27#issuecomment-381396700 -.rodal, -.rodal-mask { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-direction: row; - -webkit-box-align: center; - align-items: center; - -webkit-box-pack: center; - justify-content: center; - position: fixed !important; - padding: 10px; - top: 0; - left: 0; - right: 0; - bottom: 0; - overflow-y: auto; - overflow-x: hidden; - -webkit-box-align: center; - align-items: center; -} -.rodal-dialog { - display: flex; - margin: auto; - height: auto !important; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - flex-direction: column; - background-color: #fff; - font-family: inherit; - font-size: 1rem; - padding: 1.25em; - border-radius: 0.3125em; - -webkit-box-sizing: border-box; - box-sizing: border-box; - -webkit-box-pack: center; - justify-content: center; - position: relative !important; - width: 32em; - max-width: 100%; - - @media (prefers-color-scheme: dark) { - background-color: $color-text; - } - @at-root .theme-dark #{&} { - background-color: $color-text; - } -} - -// Tweak CSS for switch -.switch { - background-color: #ccc; - border: none; - border-radius: 20px; - - &.on { - background-color: #80a881; - } -} -.switch-toggle { - border-radius: 20px; - box-shadow: none; -} diff --git a/styles/__reset.scss b/styles/__reset.scss deleted file mode 100644 index d971da6..0000000 --- a/styles/__reset.scss +++ /dev/null @@ -1,129 +0,0 @@ -/* http://meyerweb.com/eric/tools/css/reset/ - v2.0 | 20110126 - License: none (public domain) -*/ - -html, -body, -div, -span, -applet, -object, -iframe, -h1, -h2, -h3, -h4, -h5, -h6, -p, -blockquote, -pre, -a, -abbr, -acronym, -address, -big, -cite, -code, -del, -dfn, -em, -img, -ins, -kbd, -q, -s, -samp, -small, -strike, -strong, -sub, -sup, -tt, -var, -b, -u, -i, -center, -dl, -dt, -dd, -ol, -ul, -li, -fieldset, -form, -label, -legend, -table, -caption, -tbody, -tfoot, -thead, -tr, -th, -td, -article, -aside, -canvas, -details, -embed, -figure, -figcaption, -footer, -header, -hgroup, -menu, -nav, -output, -ruby, -section, -summary, -time, -mark, -audio, -video { - margin: 0; - padding: 0; - border: 0; - font-size: 100%; - font: inherit; - vertical-align: baseline; -} -/* HTML5 display-role reset for older browsers */ -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -menu, -nav, -section { - display: block; -} -body { - line-height: 1; -} -ol, -ul { - list-style: none; -} -blockquote, -q { - quotes: none; -} -blockquote:before, -blockquote:after, -q:before, -q:after { - content: ''; - content: none; -} -table { - border-collapse: collapse; - border-spacing: 0; -} diff --git a/styles/__variables.scss b/styles/__variables.scss deleted file mode 100644 index 2a7fe33..0000000 --- a/styles/__variables.scss +++ /dev/null @@ -1,51 +0,0 @@ -$color-background: #efefef; -$color-text: #222; -$color-text-button: #222; -$color-text-gray: #333; -$color-white: #fff; -$color-light-gray: #999; - -$color-link: #222; -$color-link-hover: #555; - -$color-menu-text: #fff; -$color-menu-background: #444; -$color-menu-text-hover: #333; -$color-menu-background-hover: #555; - -$color-background-red: #a02200; -$color-background-green: #00a022; -$color-background-blue: #2f74a0; - -$color-block-background: #fff; -$color-block-border: #444; -$color-block-border-hover: #555; - -$color-input-text: #333; -$color-input-background: #fff; - -$break-xsmall: 400px; -$break-small: 600px; -$max-width: 1024px; -$min-width: 950px; - -$medium-screen: 'only screen and (min-width : #{$break-xsmall})'; -$bigger-screen: 'only screen and (min-width : #{$break-small})'; - -@mixin flex { - display: flex; - flex: 1; - flex-wrap: nowrap; - justify-content: center; - align-items: center; -} - -@mixin flex-spaced { - @include flex; - justify-content: space-between; -} - -@mixin flex-end { - @include flex; - align-items: flex-end; -} diff --git a/styles/_common.scss b/styles/_common.scss deleted file mode 100644 index 3a798b0..0000000 --- a/styles/_common.scss +++ /dev/null @@ -1,54 +0,0 @@ -@import 'styles/__variables'; - -.common { - padding: 20px 10px; - - &__line { - margin: 0 auto 1rem; - font-size: 1.2rem; - line-height: 1.7rem; - font-weight: 400; - text-align: left; - - strong { - font-weight: bold; - } - } - - &__button { - margin: 1em auto; - padding: 0.8em 1.3em; - display: block; - font-size: 1.3rem; - line-height: 1.5rem; - font-weight: 400; - text-align: center; - color: $color-menu-text; - background: $color-menu-background; - border-radius: 3px; - border: none; - cursor: pointer; - max-width: 300px; - text-decoration: none; - transition: all 60ms ease-in; - - &:hover, - &:focus { - color: $color-menu-text; - background-color: $color-menu-background-hover; - } - - @media #{$bigger-screen} { - max-width: 220px; - } - } -} - -// Fix for SCSS modules not working for at-root components -.theme-dark footer { - background-color: #161616; -} - -.theme-dark label { - color: $color-link-hover; -} diff --git a/styles/main.scss b/styles/main.scss deleted file mode 100644 index 9aed6bb..0000000 --- a/styles/main.scss +++ /dev/null @@ -1 +0,0 @@ -@import 'styles/__base.scss'; diff --git a/tsconfig.json b/tsconfig.json deleted file mode 100644 index ebc47e3..0000000 --- a/tsconfig.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "compileOnSave": false, - "compilerOptions": { - "target": "esnext", - "module": "esnext", - "jsx": "preserve", - "allowJs": true, - "moduleResolution": "node", - "allowSyntheticDefaultImports": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "removeComments": false, - "preserveConstEnums": true, - "sourceMap": true, - "skipLibCheck": true, - "baseUrl": ".", - "typeRoots": ["./node_modules/@types"], - "lib": ["dom", "es2015", "es2016"], - "strict": false, - "forceConsistentCasingInFileNames": true, - "noEmit": true, - "esModuleInterop": true, - "resolveJsonModule": true, - "isolatedModules": true, - "incremental": true - }, - "exclude": [ - "node_modules", - "**/*.spec.ts", - "**/*.spec.tsx", - "**/*.test.ts", - "**/*.test.tsx" - ], - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"] -}